blob: d350a5b86d98c6869b7b2e27d18a7282a703d42f [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040 Copyright (c) 2010-2011 QUALCOMM Incorporated.
41 All Rights Reserved.
42 Qualcomm Confidential and Proprietary
43===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070044/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070045 EDIT HISTORY FOR FILE
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 This section contains comments describing changes made to the module.
48 Notice that changes are listed in reverse chronological order.
49
Jeff Johnson295189b2012-06-20 16:38:30 -070050 $Header$$DateTime$$Author$
51
Jeff Johnson295189b2012-06-20 16:38:30 -070052 when who what, where, why
53---------- --- -------------------------------------------------
5410/05/2011 haparna Adding support for Keep Alive Feature
552010-12-30 smiryala UMAC convergence changes
562010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
57===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070058#include "vos_mq.h"
59#include "vos_api.h"
60#include "vos_packet.h"
61#include "vos_nvitem.h"
62#include "sirApi.h"
63#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053064#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070065#include "wlan_qct_wda.h"
66#include "wlan_qct_wda_msg.h"
67#include "wlan_qct_wdi_cfg.h"
68#include "wlan_qct_wdi.h"
69#include "wlan_qct_wdi_ds.h"
70#include "wlan_hal_cfg.h"
71/**********************/
72#include "wniApi.h"
73#include "cfgApi.h"
74#include "limApi.h"
75#include "wlan_qct_tl.h"
76#include "wlan_qct_tli_ba.h"
77#include "limUtils.h"
78#include "btcApi.h"
79#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070080#include "pttMsgApi.h"
81#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070082/* Used MACRO's */
83/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080084#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
86#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070088#define CONVERT_WDI2SIR_STATUS(x) \
89 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
90
91#define IS_WDI_STATUS_FAILURE(status) \
92 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070093#define CONVERT_WDI2VOS_STATUS(x) \
94 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
95
96/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070097#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define WDA_GET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
101
102#define WDA_SET_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
104
105#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
106 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700107#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
108 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109/* timer related Macros */
110#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
111 tx_timer_create(a, b, c, d, e, f, g)
112#define WDA_START_TIMER(a) tx_timer_activate(a)
113#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
114#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700115#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116
117#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
118 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700122#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800123#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700124
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700125#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700127#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700128#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
129 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
130 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
131
132#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
133#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800134#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
135
Jeff Johnson295189b2012-06-20 16:38:30 -0700136/* extern declarations */
137extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700138extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
139
Jeff Johnson295189b2012-06-20 16:38:30 -0700140/* forward declarations */
141void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
142 void *pBodyptr, tANI_U32 bodyVal) ;
143VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
144 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700145VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
146VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
147
148extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
149 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530150void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
c_hpothu92367912014-05-01 15:18:17 +0530211v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
212 tSirBcnMissRateReq *pData);
213
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Leo Chang9056f462013-08-01 19:21:11 -0700220
221#ifdef FEATURE_WLAN_LPHB
222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
223 tSirLPHBReq *pData);
224#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530225
Dino Mycle41bdc942014-06-10 11:30:24 +0530226#ifdef WLAN_FEATURE_EXTSCAN
227VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
228 tSirEXTScanStartReqParams *wdaRequest);
229VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
230 tSirEXTScanStopReqParams *wdaRequest);
231VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
232 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
233VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
234 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
235VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
236 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
237VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
238 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
239VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
240 tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
241VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
242 tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
243#endif /* WLAN_FEATURE_EXTSCAN */
244
Sunil Duttbd736ed2014-05-26 21:19:41 +0530245#ifdef WLAN_FEATURE_LINK_LAYER_STATS
246VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
247 tSirLLStatsSetReq *wdaRequest);
248
249VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
250 tSirLLStatsGetReq *wdaRequest);
251
252VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
253 tSirLLStatsClearReq *wdaRequest);
254#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530255
256v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
257 tSirFWStatsGetReq *wdaRequest);
258
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530259VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
260 u8 *wdaRequest);
261
Jeff Johnson295189b2012-06-20 16:38:30 -0700262/*
263 * FUNCTION: WDA_open
264 * Allocate the WDA context
265 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530266VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 tMacOpenParameters *pMacParams )
268{
269 tWDA_CbContext *wdaContext;
270 VOS_STATUS status;
271 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530273 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
278 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 return VOS_STATUS_E_NOMEM;
280 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 /*__asm int 3;*/
282 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
283
284 /* Initialize data structures */
285 wdaContext->pVosContext = pVosContext;
286 wdaContext->wdaState = WDA_INIT_STATE;
287 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
288
289 /* Initialize WDA-WDI synchronization event */
290 status = vos_event_init(&wdaContext->wdaWdiEvent);
291 if(!VOS_IS_STATUS_SUCCESS(status))
292 {
293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800294 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800295 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700297 /* Init Frame transfer event */
298 status = vos_event_init(&wdaContext->txFrameEvent);
299 if(!VOS_IS_STATUS_SUCCESS(status))
300 {
301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800302 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800303 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700304 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700305 status = vos_event_init(&wdaContext->suspendDataTxEvent);
306 if(!VOS_IS_STATUS_SUCCESS(status))
307 {
308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800309 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800310 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700312 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
313 if(!VOS_IS_STATUS_SUCCESS(status))
314 {
315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800316 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800317 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530321 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700322 &wdiDevCapability, pMacParams->driverType))
323 {
324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
325 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800326 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700327 }
328 else
329 {
330 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
331 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
332 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700333 /* update max STA in WDA used for BA */
334 wdaContext->wdaMaxSta = pMacParams->maxStation;
335 /* store the frameTransRequired flag in wdaContext, to send this to HAL
336 * in WDA_Start
337 */
338 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
339 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700340 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800341
342error:
343 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
344 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700345}
346
Jeff Johnson295189b2012-06-20 16:38:30 -0700347/*
348 * FUNCTION: WDA_preStart
349 * Trigger DAL-AL to start CFG download
350 */
351VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
352{
353 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
354 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700355 /*
356 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
357 */
358 wdaMsg.type = WNI_CFG_DNLD_REQ ;
359 wdaMsg.bodyptr = NULL;
360 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 /* post the message.. */
362 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
363 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
364 {
365 vosStatus = VOS_STATUS_E_BADMSG;
366 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700367 return( vosStatus );
368}
Jeff Johnson295189b2012-06-20 16:38:30 -0700369/*
370 * FUNCTION: WDA_wdiStartCallback
371 * Once WDI_Start is finished, WDI start callback will be called by WDI
372 * to indicate completion of WDI_Start.
373 */
374void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
375 void *pVosContext)
376{
377 tWDA_CbContext *wdaContext;
378 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700379 if (NULL == pVosContext)
380 {
381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700382 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 return;
384 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
386 if (NULL == wdaContext)
387 {
388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700389 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 return;
391 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700392 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
393 {
394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700395 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 }
397 else
398 {
399 wdaContext->wdaState = WDA_START_STATE;
400 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700401 /* extract and save version information from the Start Response */
402 wdaContext->wcnssWlanCompiledVersion.major =
403 wdiRspParams->wlanCompiledVersion.major;
404 wdaContext->wcnssWlanCompiledVersion.minor =
405 wdiRspParams->wlanCompiledVersion.minor;
406 wdaContext->wcnssWlanCompiledVersion.version =
407 wdiRspParams->wlanCompiledVersion.version;
408 wdaContext->wcnssWlanCompiledVersion.revision =
409 wdiRspParams->wlanCompiledVersion.revision;
410 wdaContext->wcnssWlanReportedVersion.major =
411 wdiRspParams->wlanReportedVersion.major;
412 wdaContext->wcnssWlanReportedVersion.minor =
413 wdiRspParams->wlanReportedVersion.minor;
414 wdaContext->wcnssWlanReportedVersion.version =
415 wdiRspParams->wlanReportedVersion.version;
416 wdaContext->wcnssWlanReportedVersion.revision =
417 wdiRspParams->wlanReportedVersion.revision;
418 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
419 wdiRspParams->wcnssSoftwareVersion,
420 sizeof(wdaContext->wcnssSoftwareVersionString));
421 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
422 wdiRspParams->wcnssHardwareVersion,
423 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 /* Notify WDA_start that WDI_Start has completed */
425 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700426 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700427 {
428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700429 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 return;
432}
433
Jeff Johnson295189b2012-06-20 16:38:30 -0700434/*
435 * FUNCTION: WDA_start
436 * Prepare TLV configuration and call WDI_Start.
437 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700438VOS_STATUS WDA_start(v_PVOID_t pVosContext)
439{
440 tWDA_CbContext *wdaContext;
441 VOS_STATUS status;
442 WDI_Status wdiStatus;
443 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 if (NULL == pVosContext)
445 {
446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700447 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 return VOS_STATUS_E_FAILURE;
449 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700450 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
451 if (NULL == wdaContext)
452 {
453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700454 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 return VOS_STATUS_E_FAILURE;
456 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 /* Non-FTM mode, WDA status for START must be INIT
458 * FTM mode, WDA Status for START can be INIT or STOP */
459 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
460 (WDA_STOP_STATE != wdaContext->wdaState) )
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
463 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700464 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 return VOS_STATUS_E_FAILURE;
466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 /* initialize the wdiStartParam. Note that we can create this on
468 the stack since we won't exit until WDI_Start() completes or
469 times out */
470 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 /* prepare the config TLV for the WDI */
473 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
474 if ( !VOS_IS_STATUS_SUCCESS(status) )
475 {
476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700477 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 return VOS_STATUS_E_FAILURE;
479 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 /* note from here onwards if an error occurs we must
481 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
483 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
484 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* initialize the WDA-WDI synchronization event */
486 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 /* call WDI start */
488 wdiStatus = WDI_Start(&wdiStartParam,
489 (WDI_StartRspCb)WDA_wdiStartCallback,
490 (v_VOID_t *)pVosContext);
491 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
492 {
493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700494 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 vos_mem_free(wdiStartParam.pConfigBuffer);
496 return VOS_STATUS_E_FAILURE;
497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 /* wait for WDI start to invoke our callback */
499 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
500 WDA_WDI_START_TIMEOUT );
501 if ( !VOS_IS_STATUS_SUCCESS(status) )
502 {
503 if ( VOS_STATUS_E_TIMEOUT == status )
504 {
505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700506 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700507 }
508 else
509 {
510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
511 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700512 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700513 }
514 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530515 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 /* we no longer need the config TLV */
519 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 /* if we are not in the START state then WDI_Start() failed */
521 if (WDA_START_STATE != wdaContext->wdaState)
522 {
523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700524 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 /* FTM mode does not need to monitor BA activity */
528 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
529 {
530 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800531 if(VOS_STATUS_SUCCESS == status)
532 {
533 wdaContext->wdaTimersCreated = VOS_TRUE;
534 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 }
Leo Chang9d76f622013-08-23 16:34:52 -0700536 else
537 {
538 vos_event_init(&wdaContext->ftmStopDoneEvent);
539 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 return status;
541}
542
Jeff Johnson295189b2012-06-20 16:38:30 -0700543/*
544 * FUNCTION: WDA_prepareConfigTLV
545 * Function to prepare CFG for DAL(WDA)
546 */
547VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
548 WDI_StartReqParamsType *wdiStartParams )
549{
550 /* get pMac to acess CFG data base */
551 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
552 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
553 tHalCfg *tlvStruct = NULL ;
554 tANI_U8 *tlvStructStart = NULL ;
555 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
556 v_PVOID_t *configParam;
557 tANI_U32 configParamSize;
558 tANI_U32 *configDataValue;
559 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700560 tANI_U8 i;
561
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 if ((NULL == pMac)||(NULL == wdaContext))
563 {
564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700565 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700566 VOS_ASSERT(0);
567 return VOS_STATUS_E_FAILURE;
568 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700569 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
570 WNI_CFG_STA_ID_LEN +
571 WNI_CFG_EDCA_WME_ACBK_LEN +
572 WNI_CFG_EDCA_WME_ACBE_LEN +
573 WNI_CFG_EDCA_WME_ACVI_LEN +
574 WNI_CFG_EDCA_WME_ACVO_LEN +
575 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 /* malloc memory for all configs in one shot */
577 configParam = vos_mem_malloc(configParamSize);
578
579 if(NULL == configParam )
580 {
581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700582 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 VOS_ASSERT(0) ;
584 return VOS_STATUS_E_NOMEM;
585 }
586 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 tlvStruct = (tHalCfg *)configParam;
589 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700590 /* TODO: Remove Later */
591 /* QWLAN_HAL_CFG_STA_ID */
592 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
593 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
594 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
595 eSIR_SUCCESS)
596 {
597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
598 "Failed to get value for WNI_CFG_STA_ID");
599 goto handle_failure;
600 }
601 tlvStruct->length = strLength ;
602 /* calculate the pad bytes to have the CFG in aligned format */
603 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
604 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
606 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
608 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
609 tlvStruct->length = sizeof(tANI_U32);
610 configDataValue = (tANI_U32 *)(tlvStruct + 1);
611 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
612 != eSIR_SUCCESS)
613 {
614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
615 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
616 goto handle_failure;
617 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
619 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
621 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
622 tlvStruct->length = sizeof(tANI_U32);
623 configDataValue = (tANI_U32 *)(tlvStruct + 1);
624 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
625 eSIR_SUCCESS)
626 {
627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
628 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
629 goto handle_failure;
630 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
632 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
634 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
635 tlvStruct->length = sizeof(tANI_U32);
636 configDataValue = (tANI_U32 *)(tlvStruct + 1);
637 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
638 != eSIR_SUCCESS)
639 {
640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
641 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
642 goto handle_failure;
643 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
645 + sizeof(tHalCfg) + tlvStruct->length)) ;
646
647 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
648 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
649 tlvStruct->length = sizeof(tANI_U32);
650 configDataValue = (tANI_U32 *)(tlvStruct + 1);
651 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
652 configDataValue ) != eSIR_SUCCESS)
653 {
654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
655 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
656 goto handle_failure;
657 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
659 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 /* QWLAN_HAL_CFG_CAL_PERIOD */
661 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
662 tlvStruct->length = sizeof(tANI_U32);
663 configDataValue = (tANI_U32 *)(tlvStruct + 1);
664 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
665 != eSIR_SUCCESS)
666 {
667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
668 "Failed to get value for WNI_CFG_CAL_PERIOD");
669 goto handle_failure;
670 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
672 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* QWLAN_HAL_CFG_CAL_CONTROL */
674 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
675 tlvStruct->length = sizeof(tANI_U32);
676 configDataValue = (tANI_U32 *)(tlvStruct + 1);
677 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
678 != eSIR_SUCCESS)
679 {
680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
681 "Failed to get value for WNI_CFG_CAL_CONTROL");
682 goto handle_failure;
683 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
685 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 /* QWLAN_HAL_CFG_PROXIMITY */
687 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
688 tlvStruct->length = sizeof(tANI_U32);
689 configDataValue = (tANI_U32 *)(tlvStruct + 1);
690 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
691 != eSIR_SUCCESS)
692 {
693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
694 "Failed to get value for WNI_CFG_PROXIMITY");
695 goto handle_failure;
696 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
698 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700699 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
700 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
701 tlvStruct->length = sizeof(tANI_U32);
702 configDataValue = (tANI_U32 *)(tlvStruct + 1);
703 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
704 != eSIR_SUCCESS)
705 {
706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
707 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
708 goto handle_failure;
709 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
711 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
713 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
714 tlvStruct->length = sizeof(tANI_U32);
715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
716 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
717 eSIR_SUCCESS)
718 {
719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
720 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
721 goto handle_failure;
722 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
724 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
726 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
727 tlvStruct->length = sizeof(tANI_U32);
728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
729 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
730 configDataValue ) != eSIR_SUCCESS)
731 {
732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
733 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
734 goto handle_failure;
735 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
737 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
739 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
740 tlvStruct->length = sizeof(tANI_U32);
741 configDataValue = (tANI_U32 *)(tlvStruct + 1);
742 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
743 eSIR_SUCCESS)
744 {
745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
746 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
747 goto handle_failure;
748 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
750 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
752 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
753 tlvStruct->length = sizeof(tANI_U32);
754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
755 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
756 eSIR_SUCCESS)
757 {
758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
759 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
760 goto handle_failure;
761 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
763 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700764 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
765 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
766 tlvStruct->length = sizeof(tANI_U32);
767 configDataValue = (tANI_U32 *)(tlvStruct + 1);
768 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
769 eSIR_SUCCESS)
770 {
771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
772 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
773 goto handle_failure;
774 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
776 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700777 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
778 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
779 tlvStruct->length = sizeof(tANI_U32);
780 configDataValue = (tANI_U32 *)(tlvStruct + 1);
781 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
782 configDataValue ) != eSIR_SUCCESS)
783 {
784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
785 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
786 goto handle_failure;
787 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700788 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
789 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700790 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
791 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
792 tlvStruct->length = sizeof(tANI_U32);
793 configDataValue = (tANI_U32 *)(tlvStruct + 1);
794 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
795 configDataValue ) != eSIR_SUCCESS)
796 {
797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
798 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
799 goto handle_failure;
800 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700801 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
802 + sizeof(tHalCfg) + tlvStruct->length));
803
804 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
805 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
806 tlvStruct->length = sizeof(tANI_U32);
807 configDataValue = (tANI_U32 *)(tlvStruct + 1);
808 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
809 configDataValue ) != eSIR_SUCCESS)
810 {
811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
812 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
813 goto handle_failure;
814 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700815 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
816 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700817 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
818 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length));
830
831 /* QWLAN_HAL_CFG_FIXED_RATE */
832 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
836 != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_FIXED_RATE");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length));
844
845 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
846 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
847 tlvStruct->length = sizeof(tANI_U32);
848 configDataValue = (tANI_U32 *)(tlvStruct + 1);
849 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
850 != eSIR_SUCCESS)
851 {
852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
853 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
854 goto handle_failure;
855 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
857 + sizeof(tHalCfg) + tlvStruct->length));
858
859 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
860 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
861 tlvStruct->length = sizeof(tANI_U32);
862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
863 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
864 configDataValue ) != eSIR_SUCCESS)
865 {
866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
867 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
868 goto handle_failure;
869 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
871 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
873 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
874 tlvStruct->length = sizeof(tANI_U32);
875 configDataValue = (tANI_U32 *)(tlvStruct + 1);
876 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
877 configDataValue ) != eSIR_SUCCESS)
878 {
879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
880 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
881 goto handle_failure;
882 }
883 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
884 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700885 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
886 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
887 tlvStruct->length = sizeof(tANI_U32);
888 configDataValue = (tANI_U32 *)(tlvStruct + 1);
889 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
890 configDataValue ) != eSIR_SUCCESS)
891 {
892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
893 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
894 goto handle_failure;
895 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
897 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700898 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
899 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
903 configDataValue ) != eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
912 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
913 tlvStruct->length = sizeof(tANI_U32);
914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
915 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
916 configDataValue ) != eSIR_SUCCESS)
917 {
918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
919 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
920 goto handle_failure;
921 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
923 + sizeof(tHalCfg) + tlvStruct->length);
924
Jeff Johnson295189b2012-06-20 16:38:30 -0700925 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
926 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
927 tlvStruct->length = sizeof(tANI_U32);
928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
929 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
930 configDataValue ) != eSIR_SUCCESS)
931 {
932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
933 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
934 goto handle_failure;
935 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
937 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
939 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
940 tlvStruct->length = sizeof(tANI_U32);
941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
942 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
943 configDataValue ) != eSIR_SUCCESS)
944 {
945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
946 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
947 goto handle_failure;
948 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
950 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700951 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
952 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
953 tlvStruct->length = sizeof(tANI_U32);
954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
955 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
956 eSIR_SUCCESS)
957 {
958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
959 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
960 goto handle_failure;
961 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
963 + sizeof(tHalCfg) + tlvStruct->length);
964
965 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
966 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
967 tlvStruct->length = sizeof(tANI_U32);
968 configDataValue = (tANI_U32 *)(tlvStruct + 1);
969 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
970 configDataValue ) != eSIR_SUCCESS)
971 {
972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
973 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
974 goto handle_failure;
975 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
977 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700978 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
979 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
980 tlvStruct->length = sizeof(tANI_U32);
981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
982 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
983 configDataValue ) != eSIR_SUCCESS)
984 {
985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
986 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
987 goto handle_failure;
988 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
990 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700991 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
992 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
996 configDataValue ) != eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1000 goto handle_failure;
1001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1005 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1009 configDataValue ) != eSIR_SUCCESS)
1010 {
1011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1012 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1013 goto handle_failure;
1014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length);
1017
1018 /* QWLAN_HAL_CFG_STATS_PERIOD */
1019 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1020 tlvStruct->length = sizeof(tANI_U32);
1021 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1022 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1023 eSIR_SUCCESS)
1024 {
1025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1026 "Failed to get value for WNI_CFG_STATS_PERIOD");
1027 goto handle_failure;
1028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001029 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1030 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001031 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1032 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1033 tlvStruct->length = sizeof(tANI_U32);
1034 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1035 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1036 eSIR_SUCCESS)
1037 {
1038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1039 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1040 goto handle_failure;
1041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1043 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001044 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1045 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1046 tlvStruct->length = sizeof(tANI_U32);
1047 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1048 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1049 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001050 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1051 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1053 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1054 tlvStruct->length = sizeof(tANI_U32);
1055 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1056 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1057 != eSIR_SUCCESS)
1058 {
1059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1060 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1061 goto handle_failure;
1062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001063 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1064 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001065 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1066 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1067 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1068 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1069 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1070 &strLength) != eSIR_SUCCESS)
1071 {
1072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1073 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1074 goto handle_failure;
1075 }
1076 tlvStruct->length = strLength;
1077 /* calculate the pad bytes to have the CFG in aligned format */
1078 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1079 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1081 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001082 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1083 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1084 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1085 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1086 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1087 &strLength) != eSIR_SUCCESS)
1088 {
1089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1090 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1091 goto handle_failure;
1092 }
1093 tlvStruct->length = strLength;
1094 /* calculate the pad bytes to have the CFG in aligned format */
1095 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1096 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001097 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1098 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001099 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1100 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1101 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1102 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1103 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1104 &strLength) != eSIR_SUCCESS)
1105 {
1106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1107 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1108 goto handle_failure;
1109 }
1110 tlvStruct->length = strLength;
1111 /* calculate the pad bytes to have the CFG in aligned format */
1112 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1113 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1115 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001116 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1117 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1118 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1120 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1121 &strLength) != eSIR_SUCCESS)
1122 {
1123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1124 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1125 goto handle_failure;
1126 }
1127 tlvStruct->length = strLength;
1128 /* calculate the pad bytes to have the CFG in aligned format */
1129 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1130 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1132 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001133 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1134 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1135 tlvStruct->length = sizeof(tANI_U32);
1136 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1137 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1138 != eSIR_SUCCESS)
1139 {
1140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1141 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1142 goto handle_failure;
1143 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1145 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001146 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1147 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1148 tlvStruct->length = sizeof(tANI_U32);
1149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1150 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1151 != eSIR_SUCCESS)
1152 {
1153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1154 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1155 goto handle_failure;
1156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1158 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001159 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1160 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1161 tlvStruct->length = sizeof(tANI_U32);
1162 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1163 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1164 != eSIR_SUCCESS)
1165 {
1166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1167 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1168 goto handle_failure;
1169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1171 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001172 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1173 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1174 tlvStruct->length = sizeof(tANI_U32);
1175 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1176 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1177 != eSIR_SUCCESS)
1178 {
1179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1180 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1181 goto handle_failure;
1182 }
1183 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1184 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1186 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1187 tlvStruct->length = sizeof(tANI_U32);
1188 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1189 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1190 != eSIR_SUCCESS)
1191 {
1192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1193 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1194 goto handle_failure;
1195 }
1196 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1197 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001198 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1199 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1200 tlvStruct->length = sizeof(tANI_U32);
1201 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1202 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1203 != eSIR_SUCCESS)
1204 {
1205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1206 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1207 goto handle_failure;
1208 }
1209 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1210 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001211 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1212 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1213 tlvStruct->length = sizeof(tANI_U32);
1214 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1215 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1216 != eSIR_SUCCESS)
1217 {
1218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1219 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1220 goto handle_failure;
1221 }
1222 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1223 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001224 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1225 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1226 tlvStruct->length = sizeof(tANI_U32);
1227 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1228 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1229 != eSIR_SUCCESS)
1230 {
1231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1232 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1233 goto handle_failure;
1234 }
1235 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1236 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001237 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1238 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1239 tlvStruct->length = sizeof(tANI_U32);
1240 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1241 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1242 != eSIR_SUCCESS)
1243 {
1244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1245 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1246 goto handle_failure;
1247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1249 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001250 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1251 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1252 tlvStruct->length = sizeof(tANI_U32);
1253 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1254 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1255 != eSIR_SUCCESS)
1256 {
1257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1258 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1259 goto handle_failure;
1260 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1262 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001263 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1264 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1265 tlvStruct->length = sizeof(tANI_U32);
1266 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1267 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1268 != eSIR_SUCCESS)
1269 {
1270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1271 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1272 goto handle_failure;
1273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001276 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1277 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1278 * into FW, so the parameters are added here.
1279 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001280 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001287 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1288 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1289 tlvStruct->length = sizeof(tANI_U32);
1290 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1291 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1292 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1293 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001294 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1295 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1296 tlvStruct->length = sizeof(tANI_U32);
1297 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1298 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1299 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1300 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1358 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1362 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1363 + sizeof(tHalCfg) + tlvStruct->length) ;
1364
1365 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1366 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1370 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1371 + sizeof(tHalCfg) + tlvStruct->length) ;
1372
1373 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1374 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1375 tlvStruct->length = sizeof(tANI_U32);
1376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1377 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
1380
1381 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1382 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1383 tlvStruct->length = sizeof(tANI_U32);
1384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1385 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1386 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1387 + sizeof(tHalCfg) + tlvStruct->length) ;
1388
1389 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1390 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1391 tlvStruct->length = sizeof(tANI_U32);
1392 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1393 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1394 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1395 + sizeof(tHalCfg) + tlvStruct->length) ;
1396
1397 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1398 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1399 tlvStruct->length = sizeof(tANI_U32);
1400 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1401 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1402 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1403 + sizeof(tHalCfg) + tlvStruct->length) ;
1404
Wilson Tsaof8b37942013-09-06 10:49:00 -07001405 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1406 {
1407 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1408 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1409 tlvStruct->length = sizeof(tANI_U32);
1410 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1411 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1412 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1413 + sizeof(tHalCfg) + tlvStruct->length) ;
1414
1415 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1416 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1417 tlvStruct->length = sizeof(tANI_U32);
1418 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1419 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1420 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1421 + sizeof(tHalCfg) + tlvStruct->length) ;
1422
1423 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1424 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1425 tlvStruct->length = sizeof(tANI_U32);
1426 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1427 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1428 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1429 + sizeof(tHalCfg) + tlvStruct->length) ;
1430
1431 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1432 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1433 tlvStruct->length = sizeof(tANI_U32);
1434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1435 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1436 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1437 + sizeof(tHalCfg) + tlvStruct->length) ;
1438 }
1439
1440 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1441 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1442 tlvStruct->length = sizeof(tANI_U32);
1443 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1444 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1445 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1446 + sizeof(tHalCfg) + tlvStruct->length) ;
1447
1448 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1449 {
1450 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1451 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1455 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1456 + sizeof(tHalCfg) + tlvStruct->length) ;
1457 }
1458
1459 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1460 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
Jeff Johnson32d95a32012-09-10 13:15:23 -07001467 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001468 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1472 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1473 wcnssCompiledApiVersion.minor,
1474 wcnssCompiledApiVersion.version,
1475 wcnssCompiledApiVersion.revision);
1476 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1477 + sizeof(tHalCfg) + tlvStruct->length) ;
1478
Jeff Johnsond13512a2012-07-17 11:42:19 -07001479 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1480 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1481 tlvStruct->length = sizeof(tANI_U32);
1482 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1483 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1484 configDataValue ) != eSIR_SUCCESS)
1485 {
1486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1487 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1488 goto handle_failure;
1489 }
1490
1491 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1492 + sizeof(tHalCfg) + tlvStruct->length) ;
1493 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1494 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1495 tlvStruct->length = sizeof(tANI_U32);
1496 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1497 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1498 configDataValue ) != eSIR_SUCCESS)
1499 {
1500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1501 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1502 goto handle_failure;
1503 }
1504
1505 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1506 + sizeof(tHalCfg) + tlvStruct->length) ;
1507
1508 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1509 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1510 tlvStruct->length = sizeof(tANI_U32);
1511 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1512 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1513 != eSIR_SUCCESS)
1514 {
1515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1516 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1517 goto handle_failure;
1518 }
1519
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001523 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1524 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1525 tlvStruct->length = sizeof(tANI_U32);
1526 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1527 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1528 != eSIR_SUCCESS)
1529 {
1530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1531 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1532 goto handle_failure;
1533 }
1534
1535 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1536 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001537#ifdef WLAN_SOFTAP_VSTA_FEATURE
1538 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1539 tlvStruct->length = sizeof(tANI_U32);
1540 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1541 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1542 != eSIR_SUCCESS)
1543 {
1544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1545 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1546 goto handle_failure;
1547 }
1548
1549 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1550 + sizeof(tHalCfg) + tlvStruct->length) ;
1551#endif
1552
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001553 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1554 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1555 tlvStruct->length = sizeof(tANI_U32);
1556 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1557
1558 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1559 != eSIR_SUCCESS)
1560 {
1561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1562 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1563 goto handle_failure;
1564 }
1565
1566 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1567 + sizeof(tHalCfg) + tlvStruct->length) ;
1568
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301569/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1570 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1578 goto handle_failure;
1579 }
1580
1581 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1582 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301583#ifdef FEATURE_WLAN_TDLS
1584 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1585 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1586 tlvStruct->length = sizeof(tANI_U32);
1587 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1588 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1589 configDataValue ) != eSIR_SUCCESS)
1590 {
1591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1592 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1593 goto handle_failure;
1594 }
1595 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1596 + sizeof(tHalCfg) + tlvStruct->length) ;
1597
1598 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1599 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1600 tlvStruct->length = sizeof(tANI_U32);
1601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1602 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1603 configDataValue ) != eSIR_SUCCESS)
1604 {
1605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1606 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1607 goto handle_failure;
1608 }
1609 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1610 + sizeof(tHalCfg) + tlvStruct->length) ;
1611 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1612 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1613 tlvStruct->length = sizeof(tANI_U32);
1614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1615 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1616 configDataValue ) != eSIR_SUCCESS)
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1620 goto handle_failure;
1621 }
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
1624 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1625 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1626 tlvStruct->length = sizeof(tANI_U32);
1627 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1628 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1629 configDataValue ) != eSIR_SUCCESS)
1630 {
1631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1632 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1633 goto handle_failure;
1634 }
1635 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1636 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301637 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1638 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1639 tlvStruct->length = sizeof(tANI_U32);
1640 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1641 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1642 configDataValue ) != eSIR_SUCCESS)
1643 {
1644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1645 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1646 goto handle_failure;
1647 }
1648 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1649 + sizeof(tHalCfg) + tlvStruct->length) ;
1650
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301651#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301652
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001653 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1654 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1655 tlvStruct->length = sizeof(tANI_U32);
1656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1657 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1658 configDataValue ) != eSIR_SUCCESS)
1659 {
1660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1661 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1662 goto handle_failure;
1663 }
1664
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001667
1668 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1669 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1673 != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1677 goto handle_failure;
1678 }
1679 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1680 + sizeof(tHalCfg) + tlvStruct->length));
1681
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301682 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1683 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1684 tlvStruct->length = sizeof(tANI_U32);
1685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1686 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1687 configDataValue ) != eSIR_SUCCESS)
1688 {
1689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1690 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1691 goto handle_failure;
1692 }
1693
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301697 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1698 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1699 tlvStruct->length = sizeof(tANI_U32);
1700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1701 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1702 configDataValue ) != eSIR_SUCCESS)
1703 {
1704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1705 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1706 goto handle_failure;
1707 }
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301711 /* QWLAN_HAL_CFG_ATH_DISABLE */
1712 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1716 configDataValue ) != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_ATH_DISABLE");
1720 goto handle_failure;
1721 }
1722 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1723 + sizeof(tHalCfg) + tlvStruct->length) ;
1724
c_hpothu6d7dc922013-12-02 12:36:41 +05301725 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1726 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1727 tlvStruct->length = sizeof(tANI_U32);
1728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1729 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1730 configDataValue ) != eSIR_SUCCESS)
1731 {
1732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1733 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1734 goto handle_failure;
1735 }
1736 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1737 + sizeof(tHalCfg) + tlvStruct->length) ;
1738
1739 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1740 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1741 tlvStruct->length = sizeof(tANI_U32);
1742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1743 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1744 configDataValue ) != eSIR_SUCCESS)
1745 {
1746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1747 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1748 goto handle_failure;
1749 }
1750 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1751 + sizeof(tHalCfg) + tlvStruct->length) ;
1752
1753 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1754 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1755 tlvStruct->length = sizeof(tANI_U32);
1756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1757 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1758 configDataValue ) != eSIR_SUCCESS)
1759 {
1760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1761 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1762 goto handle_failure;
1763 }
1764 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1765 + sizeof(tHalCfg) + tlvStruct->length) ;
1766
1767 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1768 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1769 tlvStruct->length = sizeof(tANI_U32);
1770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1771 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1772 configDataValue ) != eSIR_SUCCESS)
1773 {
1774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1775 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1776 goto handle_failure;
1777 }
1778 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1779 + sizeof(tHalCfg) + tlvStruct->length) ;
1780
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301781 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1782 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1790 goto handle_failure;
1791 }
1792 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1793 + sizeof(tHalCfg) + tlvStruct->length) ;
1794
1795 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1796 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1797 tlvStruct->length = sizeof(tANI_U32);
1798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1799 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1800 configDataValue ) != eSIR_SUCCESS)
1801 {
1802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1803 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1804 goto handle_failure;
1805 }
1806 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1807 + sizeof(tHalCfg) + tlvStruct->length) ;
1808
1809 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1810 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1811 tlvStruct->length = sizeof(tANI_U32);
1812 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1813 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1814 configDataValue ) != eSIR_SUCCESS)
1815 {
1816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1817 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1818 goto handle_failure;
1819 }
1820 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1821 + sizeof(tHalCfg) + tlvStruct->length) ;
1822
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001823 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1824 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1825 tlvStruct->length = sizeof(tANI_U32);
1826 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1827 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1828 configDataValue ) != eSIR_SUCCESS)
1829 {
1830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1831 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1832 goto handle_failure;
1833 }
1834 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1835 + sizeof(tHalCfg) + tlvStruct->length) ;
1836
c_hpothu5bd1ae42014-03-07 20:28:22 +05301837 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1838 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1839 tlvStruct->length = sizeof(tANI_U32);
1840 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1841
1842 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1843 configDataValue ) != eSIR_SUCCESS)
1844 {
1845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1846 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1847 goto handle_failure;
1848 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301849 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1850 + sizeof(tHalCfg) + tlvStruct->length) ;
1851
1852 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1853 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1854 tlvStruct->length = sizeof(tANI_U32);
1855 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1856
1857 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1858 configDataValue ) != eSIR_SUCCESS)
1859 {
1860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1861 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1862 goto handle_failure;
1863 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301864 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1865 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301866
c_hpothu2d0f1c42014-04-01 18:38:51 +05301867 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1868 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1869 tlvStruct->length = sizeof(tANI_U32);
1870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1871
1872 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1873 configDataValue ) != eSIR_SUCCESS)
1874 {
1875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1876 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1877 goto handle_failure;
1878 }
1879 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1880 + sizeof(tHalCfg) + tlvStruct->length) ;
1881
1882 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1883 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1884 tlvStruct->length = sizeof(tANI_U32);
1885 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1886
1887 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1888 configDataValue ) != eSIR_SUCCESS)
1889 {
1890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1891 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1892 goto handle_failure;
1893 }
1894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1895 + sizeof(tHalCfg) + tlvStruct->length) ;
1896
1897 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1898 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1899 tlvStruct->length = sizeof(tANI_U32);
1900 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1901
1902 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1903 configDataValue ) != eSIR_SUCCESS)
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1907 goto handle_failure;
1908 }
1909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1910 + sizeof(tHalCfg) + tlvStruct->length) ;
1911
1912 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1913 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1914 tlvStruct->length = sizeof(tANI_U32);
1915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1916
1917 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1918 configDataValue ) != eSIR_SUCCESS)
1919 {
1920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1921 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1922 goto handle_failure;
1923 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301924 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1925 + sizeof(tHalCfg) + tlvStruct->length) ;
1926
Mihir Shetec34258c2014-07-30 17:50:27 +05301927 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1928 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1929 tlvStruct->length = sizeof(tANI_U32);
1930 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1931
1932 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1933 configDataValue ) != eSIR_SUCCESS)
1934 {
1935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1936 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1937 goto handle_failure;
1938 }
1939 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1940 + sizeof(tHalCfg) + tlvStruct->length) ;
1941
1942 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1943 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1944 tlvStruct->length = sizeof(tANI_U32);
1945 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1946
1947 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1948 configDataValue ) != eSIR_SUCCESS)
1949 {
1950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1951 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1952 goto handle_failure;
1953 }
1954 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1955 + sizeof(tHalCfg) + tlvStruct->length) ;
1956
1957 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1958 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1959 tlvStruct->length = sizeof(tANI_U32);
1960 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1961
1962 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1963 configDataValue ) != eSIR_SUCCESS)
1964 {
1965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1966 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1967 goto handle_failure;
1968 }
1969 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1970 + sizeof(tHalCfg) + tlvStruct->length) ;
1971
1972 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1973 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1974 tlvStruct->length = sizeof(tANI_U32);
1975 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1976
1977 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1978 configDataValue ) != eSIR_SUCCESS)
1979 {
1980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1981 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1982 goto handle_failure;
1983 }
1984 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1985 + sizeof(tHalCfg) + tlvStruct->length) ;
1986
1987 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1988 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1989 tlvStruct->length = sizeof(tANI_U32);
1990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1991
1992 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1993 configDataValue ) != eSIR_SUCCESS)
1994 {
1995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1996 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1997 goto handle_failure;
1998 }
1999 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2000 + sizeof(tHalCfg) + tlvStruct->length) ;
2001
2002 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2003 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2004 tlvStruct->length = sizeof(tANI_U32);
2005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2006
2007 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2008 configDataValue ) != eSIR_SUCCESS)
2009 {
2010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2011 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2012 goto handle_failure;
2013 }
2014 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2015 + sizeof(tHalCfg) + tlvStruct->length) ;
2016
2017 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2018 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2019 tlvStruct->length = sizeof(tANI_U32);
2020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2021
2022 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2023 configDataValue ) != eSIR_SUCCESS)
2024 {
2025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2026 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2027 goto handle_failure;
2028 }
2029 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2030 + sizeof(tHalCfg) + tlvStruct->length) ;
2031
2032 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2033 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2034 tlvStruct->length = sizeof(tANI_U32);
2035 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2036
2037 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2038 configDataValue ) != eSIR_SUCCESS)
2039 {
2040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2041 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2042 goto handle_failure;
2043 }
2044 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2045 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302046
2047 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2048 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2049 tlvStruct->length = sizeof(tANI_U32);
2050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2051
2052 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2053 configDataValue ) != eSIR_SUCCESS)
2054 {
2055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2056 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2057 goto handle_failure;
2058 }
2059 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2060 + sizeof(tHalCfg) + tlvStruct->length) ;
2061
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302062 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2063 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2064 tlvStruct->length = sizeof(tANI_U32);
2065 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2066
2067 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2068 configDataValue ) != eSIR_SUCCESS)
2069 {
2070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2071 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2072 goto handle_failure;
2073 }
2074 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2075 + sizeof(tHalCfg) + tlvStruct->length) ;
2076
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302077 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2078 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2079 tlvStruct->length = sizeof(tANI_U32);
2080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2081
2082 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2083 configDataValue ) != eSIR_SUCCESS)
2084 {
2085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2086 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2087 goto handle_failure;
2088 }
2089 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2090 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302091
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002093#ifdef WLAN_DEBUG
2094 {
2095 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2097 "****** Dumping CFG TLV ***** ");
2098 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2099 {
2100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2101 "%02x %02x %02x %02x %02x %02x %02x %02x",
2102 tlvStructStart[i],
2103 tlvStructStart[i+1],
2104 tlvStructStart[i+2],
2105 tlvStructStart[i+3],
2106 tlvStructStart[i+4],
2107 tlvStructStart[i+5],
2108 tlvStructStart[i+6],
2109 tlvStructStart[i+7]);
2110 }
2111 /* Dump the bytes in the last line*/
2112 for (; i < wdiStartParams->usConfigBufferLen; i++)
2113 {
2114 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2115 "%02x ",tlvStructStart[i]);
2116 }
2117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2118 "**************************** ");
2119 }
2120#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002121 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002122handle_failure:
2123 vos_mem_free(configParam);
2124 return VOS_STATUS_E_FAILURE;
2125}
Jeff Johnson295189b2012-06-20 16:38:30 -07002126/*
2127 * FUNCTION: WDA_wdiCompleteCB
2128 * call the voss call back function
2129 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002130void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002131{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2133 tWDA_CbContext *wdaContext;
2134
2135 if(NULL == pWdaParams)
2136 {
2137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002138 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002139 VOS_ASSERT(0) ;
2140 return ;
2141 }
2142
2143 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2144
Jeff Johnson295189b2012-06-20 16:38:30 -07002145 if (NULL == wdaContext)
2146 {
2147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002148 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002149 return ;
2150 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002151
Jeff Johnson295189b2012-06-20 16:38:30 -07002152 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002153 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002156 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002157 vos_mem_free(pWdaParams);
2158
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 if(WDI_STATUS_SUCCESS != status)
2160 {
2161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2162 "WDI stop callback returned failure" );
2163 VOS_ASSERT(0) ;
2164 }
2165 else
2166 {
2167 wdaContext->wdaState = WDA_STOP_STATE;
2168 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002169
Leo Chang9d76f622013-08-23 16:34:52 -07002170 /* FTM Driver stop procedure should be synced.
2171 * Stop and Close will happen on same context */
2172 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2173 {
2174 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2175 {
2176 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2177 "%s: FTM Stop Event Set Fail", __func__);
2178 VOS_ASSERT(0);
2179 }
2180 }
2181
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002183 vos_WDAComplete_cback(wdaContext->pVosContext);
2184
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 return ;
2186}
Jeff Johnson295189b2012-06-20 16:38:30 -07002187/*
2188 * FUNCTION: WDA_stop
2189 * call WDI_stop
2190 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002191VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2192{
2193 WDI_Status wdiStatus;
2194 VOS_STATUS status = VOS_STATUS_SUCCESS;
2195 WDI_StopReqParamsType *wdiStopReq;
2196 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002197 tWDA_ReqParams *pWdaParams ;
2198
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 if (NULL == pWDA)
2200 {
2201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002202 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 VOS_ASSERT(0);
2204 return VOS_STATUS_E_FAILURE;
2205 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002206 if (pWDA->wdiFailed == true)
2207 {
2208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002209 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002210 return VOS_STATUS_E_ALREADY;
2211 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002212
Jeff Johnson295189b2012-06-20 16:38:30 -07002213 /* FTM mode stay START_STATE */
2214 if( (WDA_READY_STATE != pWDA->wdaState) &&
2215 (WDA_INIT_STATE != pWDA->wdaState) &&
2216 (WDA_START_STATE != pWDA->wdaState) )
2217 {
2218 VOS_ASSERT(0);
2219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 wdiStopReq = (WDI_StopReqParamsType *)
2221 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2222 if(NULL == wdiStopReq)
2223 {
2224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002226 VOS_ASSERT(0);
2227 return VOS_STATUS_E_NOMEM;
2228 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002229
Jeff Johnson295189b2012-06-20 16:38:30 -07002230 wdiStopReq->wdiStopReason = reason;
2231 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302232
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002233 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2234 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 {
2236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 VOS_ASSERT(0);
2239 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002240 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002242
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002243 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2244 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 {
2246 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002247 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002249
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002250 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2251 pWdaParams->wdaMsgParam = NULL;
2252 pWdaParams->pWdaContext = pWDA;
2253
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 /* call WDI stop */
2255 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002256 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2257
Jeff Johnson295189b2012-06-20 16:38:30 -07002258 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2259 {
2260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2261 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2263 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 status = VOS_STATUS_E_FAILURE;
2265 }
Leo Chang9d76f622013-08-23 16:34:52 -07002266
2267 /* FTM Driver stop procedure should be synced.
2268 * Stop and Close will happen on same context */
2269 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2270 {
2271 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2272 WDI_RESPONSE_TIMEOUT);
2273 if (status != VOS_STATUS_SUCCESS)
2274 {
2275 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2276 "%s: FTM Stop Timepoout", __func__);
2277 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002278 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302279 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 return status;
2282}
Jeff Johnson295189b2012-06-20 16:38:30 -07002283/*
2284 * FUNCTION: WDA_close
2285 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302286 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002287VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2288{
Jeff Johnson43971f52012-07-17 12:26:56 -07002289 VOS_STATUS status = VOS_STATUS_SUCCESS;
2290 WDI_Status wstatus;
2291 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 if (NULL == wdaContext)
2294 {
2295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002296 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 return VOS_STATUS_E_FAILURE;
2298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2300 (WDA_STOP_STATE != wdaContext->wdaState))
2301 {
2302 VOS_ASSERT(0);
2303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002305 wstatus = WDI_Close();
2306 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002307 {
2308 status = VOS_STATUS_E_FAILURE;
2309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002311 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002312 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2313 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 {
2315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002316 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 status = VOS_STATUS_E_FAILURE;
2318 }
2319
Jeff Johnson43971f52012-07-17 12:26:56 -07002320 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002321 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 {
2323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002324 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 status = VOS_STATUS_E_FAILURE;
2326 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002327 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002328 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 {
2330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002331 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 status = VOS_STATUS_E_FAILURE;
2333 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002334 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002335 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 {
2337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002338 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002339 status = VOS_STATUS_E_FAILURE;
2340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002342 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002343 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 {
2345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2346 "error in WDA close " );
2347 status = VOS_STATUS_E_FAILURE;
2348 }
2349 return status;
2350}
Jeff Johnson295189b2012-06-20 16:38:30 -07002351/*
2352 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2353 * returns 1 if the compiled version is greater than or equal to the input version
2354 */
2355
2356uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2357{
2358 VOS_STATUS status = VOS_STATUS_SUCCESS;
2359 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2360 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2363 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2364 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2365 (compiledVersion.revision >= revision)))
2366 return 1;
2367 else
2368 return 0;
2369}
Jeff Johnson295189b2012-06-20 16:38:30 -07002370/*
2371 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2372 * returns 1 if the compiled version is greater than or equal to the input version
2373 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002374uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2375{
2376 VOS_STATUS status = VOS_STATUS_SUCCESS;
2377 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2378 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002379 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2381 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2382 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2383 (reportedVersion.revision >= revision)))
2384 return 1;
2385 else
2386 return 0;
2387}
Jeff Johnson295189b2012-06-20 16:38:30 -07002388/*
2389 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2390 * Returns the version of the WCNSS WLAN API with which the HOST
2391 * device driver was compiled
2392 */
2393VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2394 tSirVersionType *pVersion)
2395{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302396 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002397 if ((NULL == pvosGCtx) || (NULL == pVersion))
2398 {
2399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002400 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002401 VOS_ASSERT(0);
2402 return VOS_STATUS_E_FAILURE;
2403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2405 if (NULL == pWDA )
2406 {
2407 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002408 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 VOS_ASSERT(0);
2410 return VOS_STATUS_E_FAILURE;
2411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 *pVersion = pWDA->wcnssWlanCompiledVersion;
2413 return VOS_STATUS_SUCCESS;
2414}
Jeff Johnson295189b2012-06-20 16:38:30 -07002415/*
2416 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2417 * Returns the version of the WCNSS WLAN API with which the WCNSS
2418 * device driver was compiled
2419 */
2420VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2421 tSirVersionType *pVersion)
2422{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302423 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 if ((NULL == pvosGCtx) || (NULL == pVersion))
2425 {
2426 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002427 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 VOS_ASSERT(0);
2429 return VOS_STATUS_E_FAILURE;
2430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2432 if (NULL == pWDA )
2433 {
2434 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002435 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 VOS_ASSERT(0);
2437 return VOS_STATUS_E_FAILURE;
2438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 *pVersion = pWDA->wcnssWlanReportedVersion;
2440 return VOS_STATUS_SUCCESS;
2441}
Jeff Johnson295189b2012-06-20 16:38:30 -07002442/*
2443 * FUNCTION: WDA_GetWcnssSoftwareVersion
2444 * Returns the WCNSS Software version string
2445 */
2446VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2447 tANI_U8 *pVersion,
2448 tANI_U32 versionBufferSize)
2449{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302450 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002452 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 if ((NULL == pvosGCtx) || (NULL == pVersion))
2454 {
2455 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002456 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002457 VOS_ASSERT(0);
2458 return VOS_STATUS_E_FAILURE;
2459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2461 if (NULL == pWDA )
2462 {
2463 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002464 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002465 VOS_ASSERT(0);
2466 return VOS_STATUS_E_FAILURE;
2467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002468 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2469 return VOS_STATUS_SUCCESS;
2470}
Jeff Johnson295189b2012-06-20 16:38:30 -07002471/*
2472 * FUNCTION: WDA_GetWcnssHardwareVersion
2473 * Returns the WCNSS Hardware version string
2474 */
2475VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2476 tANI_U8 *pVersion,
2477 tANI_U32 versionBufferSize)
2478{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302479 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002480 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002481 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 if ((NULL == pvosGCtx) || (NULL == pVersion))
2483 {
2484 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002485 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 VOS_ASSERT(0);
2487 return VOS_STATUS_E_FAILURE;
2488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2490 if (NULL == pWDA )
2491 {
2492 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002493 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 VOS_ASSERT(0);
2495 return VOS_STATUS_E_FAILURE;
2496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2498 return VOS_STATUS_SUCCESS;
2499}
Jeff Johnson295189b2012-06-20 16:38:30 -07002500/*
2501 * FUNCTION: WDA_WniCfgDnld
2502 * Trigger CFG Download
2503 */
2504VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2505{
2506 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302507 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002508
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 if (NULL == pMac )
2510 {
2511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002512 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 VOS_ASSERT(0);
2514 return VOS_STATUS_E_FAILURE;
2515 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302516 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002517 return vosStatus;
2518}
Jeff Johnson295189b2012-06-20 16:38:30 -07002519/* -----------------------------------------------------------------
2520 * WDI interface
2521 * -----------------------------------------------------------------
2522 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002523/*
2524 * FUNCTION: WDA_suspendDataTxCallback
2525 * call back function called from TL after suspend Transmission
2526 */
2527VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2528 v_U8_t* ucSTAId,
2529 VOS_STATUS vosStatus)
2530{
2531 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002533 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 if (NULL == pWDA )
2535 {
2536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002537 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 VOS_ASSERT(0);
2539 return VOS_STATUS_E_FAILURE;
2540 }
2541 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2542 {
2543 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2544 }
2545 else
2546 {
2547 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 /* Trigger the event to bring the WDA TL suspend function to come
2550 * out of wait*/
2551 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2552 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2553 {
2554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002555 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 /* If TL suspended had timedout before this callback was called, resume back
2558 * TL.*/
2559 if (pWDA->txSuspendTimedOut)
2560 {
2561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002562 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 WDA_ResumeDataTx(pWDA);
2564 pWDA->txSuspendTimedOut = FALSE;
2565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 return VOS_STATUS_SUCCESS;
2567}
Jeff Johnson295189b2012-06-20 16:38:30 -07002568/*
2569 * FUNCTION: WDA_suspendDataTx
2570 * Update TL to suspend the data Transmission
2571 */
2572VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2573{
2574 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2575 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002576
2577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002578 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 if (pWDA->txSuspendTimedOut)
2581 {
2582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002583 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002584 return status;
2585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 /* Reset the event to be not signalled */
2587 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2588 if(!VOS_IS_STATUS_SUCCESS(status))
2589 {
2590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002591 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 return VOS_STATUS_E_FAILURE;
2593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002594 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002595 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 WDA_SuspendDataTxCallback);
2597 if(status != VOS_STATUS_SUCCESS)
2598 {
2599 return status;
2600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 /* Wait for the event to be set by the TL, to get the response of
2602 * suspending the TX queues, this event should be set by the Callback
2603 * function called by TL*/
2604 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2605 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2606 if(!VOS_IS_STATUS_SUCCESS(status))
2607 {
2608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2609 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002610 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 /* Set this flag to true when TL suspend times out, so that when TL
2612 * suspend eventually happens and calls the callback, TL can be resumed
2613 * right away by looking at this flag when true.*/
2614 pWDA->txSuspendTimedOut = TRUE;
2615 }
2616 else
2617 {
2618 pWDA->txSuspendTimedOut = FALSE;
2619 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2621 {
2622 status = VOS_STATUS_SUCCESS;
2623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 return status;
2625}
Jeff Johnson295189b2012-06-20 16:38:30 -07002626/*
2627 * FUNCTION: WDA_resumeDataTx
2628 * Update TL to resume the data Transmission
2629 */
2630VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2631{
2632 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002633
2634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002635 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002636
2637 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 return status;
2639}
Jeff Johnson295189b2012-06-20 16:38:30 -07002640/*
2641 * FUNCTION: WDA_InitScanReqCallback
2642 * Trigger Init SCAN callback
2643 */
2644void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2645{
2646 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2647 tWDA_CbContext *pWDA;
2648 tInitScanParams *pWDA_ScanParam ;
2649 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002651 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 if(NULL == pWdaParams)
2653 {
2654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002655 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 VOS_ASSERT(0) ;
2657 return ;
2658 }
2659 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2660 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 if(NULL == pWDA_ScanParam)
2662 {
2663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002664 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002665 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2667 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 return ;
2669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 if(WDI_STATUS_SUCCESS != wdiStatus)
2671 {
2672 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 if(VOS_STATUS_SUCCESS != status)
2674 {
2675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002676 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 }
2678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 /* free WDI command buffer */
2680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302682
2683
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002685 /* without converting the Status to Failure or Success Just
2686 pass the same status to lim */
2687 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 /* send SCAN RSP message back to PE */
2689 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 return ;
2691}
2692
2693/*
2694 * FUNCTION: WDA_ProcessInitScanReq
2695 * Trigger Init SCAN in DAL
2696 */
2697VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2698 tInitScanParams *initScanParams)
2699{
2700 WDI_Status status = WDI_STATUS_SUCCESS ;
2701 WDI_InitScanReqParamsType *wdiInitScanParam =
2702 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2703 sizeof(WDI_InitScanReqParamsType)) ;
2704 tWDA_ReqParams *pWdaParams;
2705 tANI_U8 i = 0;
2706
2707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002708 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 if(NULL == wdiInitScanParam)
2710 {
2711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002712 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 VOS_ASSERT(0);
2714 return VOS_STATUS_E_NOMEM;
2715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2717 if(NULL == pWdaParams)
2718 {
2719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 VOS_ASSERT(0);
2722 vos_mem_free(wdiInitScanParam);
2723 return VOS_STATUS_E_NOMEM;
2724 }
2725
2726 /* Copy init Scan params to WDI structure */
2727 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2728 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2729 sizeof(tSirMacAddr)) ;
2730 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2731 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2732 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2734 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2736 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002737 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2738 {
2739 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2740 initScanParams->scanEntry.bssIdx[i] ;
2741 }
2742
2743 /* if Frame length, copy macMgmtHdr or WDI structure */
2744 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2745 {
2746 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2747 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2748 }
2749 wdiInitScanParam->wdiReqStatusCB = NULL ;
2750
Jeff Johnson295189b2012-06-20 16:38:30 -07002751 /* Store Init Req pointer, as this will be used for response */
2752 pWdaParams->pWdaContext = pWDA;
2753 pWdaParams->wdaMsgParam = initScanParams;
2754 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002755 /* first try to suspend TX */
2756 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 if(WDI_STATUS_SUCCESS != status)
2758 {
2759 goto handleWdiFailure;
2760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 /* call DAL API to pass init scan request to DAL */
2762 status = WDI_InitScanReq(wdiInitScanParam,
2763 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 if(IS_WDI_STATUS_FAILURE(status))
2765 {
2766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2767 "error in WDA Init Scan, Resume Tx " );
2768 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 VOS_ASSERT(0) ;
2770
2771 goto handleWdiFailure;
2772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002774handleWdiFailure:
2775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2776 "Failure in WDI Api, free all the memory " );
2777 /* free WDI command buffer */
2778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2779 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 /* send Failure to PE */
2781 initScanParams->status = eSIR_FAILURE ;
2782 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 return CONVERT_WDI2VOS_STATUS(status) ;
2784}
2785
Jeff Johnson295189b2012-06-20 16:38:30 -07002786/*
2787 * FUNCTION: WDA_StartScanReqCallback
2788 * send Start SCAN RSP back to PE
2789 */
2790void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2791 void* pUserData)
2792{
2793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2794 tWDA_CbContext *pWDA;
2795 tStartScanParams *pWDA_ScanParam;
2796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002797 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 if(NULL == pWdaParams)
2799 {
2800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002801 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 VOS_ASSERT(0) ;
2803 return ;
2804 }
2805 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2806 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 if(NULL == pWDA_ScanParam)
2808 {
2809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002810 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002812 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 return ;
2814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2816 {
2817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002818 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002819 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002820 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 return ;
2822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2824 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002825
Jeff Johnson295189b2012-06-20 16:38:30 -07002826
2827 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002828 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 /* send SCAN RSP message back to PE */
2830 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 return ;
2832}
2833
Jeff Johnson295189b2012-06-20 16:38:30 -07002834/*
2835 * FUNCTION: WDA_ProcessStartScanReq
2836 * Trigger start SCAN in WDI
2837 */
2838VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2839 tStartScanParams *startScanParams)
2840{
2841 WDI_Status status = WDI_STATUS_SUCCESS;
2842 WDI_StartScanReqParamsType *wdiStartScanParams =
2843 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2844 sizeof(WDI_StartScanReqParamsType)) ;
2845 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002847 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 if(NULL == wdiStartScanParams)
2849 {
2850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 VOS_ASSERT(0);
2853 return VOS_STATUS_E_NOMEM;
2854 }
2855 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2856 if(NULL == pWdaParams)
2857 {
2858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 VOS_ASSERT(0);
2861 vos_mem_free(wdiStartScanParams);
2862 return VOS_STATUS_E_NOMEM;
2863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 /* Copy init Scan params to WDI structure */
2865 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2866 wdiStartScanParams->wdiReqStatusCB = NULL ;
2867
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 /* Store Init Req pointer, as this will be used for response */
2869 /* store Params pass it to WDI */
2870 pWdaParams->pWdaContext = pWDA;
2871 pWdaParams->wdaMsgParam = startScanParams;
2872 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 /* call DAL API to pass init scan request to DAL */
2874 status = WDI_StartScanReq(wdiStartScanParams,
2875 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 /* failure returned by WDI API */
2877 if(IS_WDI_STATUS_FAILURE(status))
2878 {
2879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2880 "Failure in Start Scan WDI API, free all the memory "
2881 "It should be due to previous abort scan." );
2882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2883 vos_mem_free(pWdaParams) ;
2884 startScanParams->status = eSIR_FAILURE ;
2885 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002887 return CONVERT_WDI2VOS_STATUS(status) ;
2888}
Jeff Johnson295189b2012-06-20 16:38:30 -07002889/*
2890 * FUNCTION: WDA_EndScanReqCallback
2891 * END SCAN callback
2892 */
2893void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2894{
2895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2896 tWDA_CbContext *pWDA;
2897 tEndScanParams *endScanParam;
2898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002899 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 if(NULL == pWdaParams)
2901 {
2902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002903 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 VOS_ASSERT(0) ;
2905 return ;
2906 }
2907 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2908 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 if(NULL == endScanParam)
2910 {
2911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002912 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2915 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 return ;
2917 }
2918
2919 /* Free WDI command buffer */
2920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2921 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002923 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 /* send response back to PE */
2925 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2926 return ;
2927}
2928
Jeff Johnson295189b2012-06-20 16:38:30 -07002929/*
2930 * FUNCTION: WDA_ProcessEndScanReq
2931 * Trigger END SCAN in WDI
2932 */
2933VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2934 tEndScanParams *endScanParams)
2935{
2936 WDI_Status status = WDI_STATUS_SUCCESS;
2937 WDI_EndScanReqParamsType *wdiEndScanParams =
2938 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2939 sizeof(WDI_EndScanReqParamsType)) ;
2940 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002942 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 if(NULL == wdiEndScanParams)
2944 {
2945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 VOS_ASSERT(0);
2948 return VOS_STATUS_E_NOMEM;
2949 }
2950 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2951 if(NULL == pWdaParams)
2952 {
2953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002954 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 VOS_ASSERT(0);
2956 vos_mem_free(wdiEndScanParams);
2957 return VOS_STATUS_E_NOMEM;
2958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 /* Copy init Scan params to WDI structure */
2960 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2961 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002962 /* Store Init Req pointer, as this will be used for response */
2963 /* store Params pass it to WDI */
2964 pWdaParams->pWdaContext = pWDA;
2965 pWdaParams->wdaMsgParam = endScanParams;
2966 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 /* call DAL API to pass init scan request to DAL */
2968 status = WDI_EndScanReq(wdiEndScanParams,
2969 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 if(IS_WDI_STATUS_FAILURE(status))
2971 {
2972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2973 "Failure in End Scan WDI API, free all the memory "
2974 "It should be due to previous abort scan." );
2975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2976 vos_mem_free(pWdaParams) ;
2977 endScanParams->status = eSIR_FAILURE ;
2978 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 return CONVERT_WDI2VOS_STATUS(status) ;
2981}
Jeff Johnson295189b2012-06-20 16:38:30 -07002982/*
2983 * FUNCTION: WDA_FinishScanReqCallback
2984 * Trigger Finish SCAN callback
2985 */
2986void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2987{
2988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2989 tWDA_CbContext *pWDA;
2990 tFinishScanParams *finishScanParam;
2991 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002993 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 if(NULL == pWdaParams)
2995 {
2996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002997 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 VOS_ASSERT(0) ;
2999 return ;
3000 }
3001
3002 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3003 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 if(NULL == finishScanParam)
3005 {
3006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003007 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3010 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 return ;
3012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3014 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 /*
3016 * Now Resume TX, if we reached here means, TX is already suspended, we
3017 * have to resume it unconditionaly
3018 */
3019 status = WDA_ResumeDataTx(pWDA) ;
3020
3021 if(VOS_STATUS_SUCCESS != status)
3022 {
3023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003024 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003026 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3028 return ;
3029}
Jeff Johnson295189b2012-06-20 16:38:30 -07003030/*
3031 * FUNCTION: WDA_ProcessFinshScanReq
3032 * Trigger Finish SCAN in WDI
3033 */
3034VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3035 tFinishScanParams *finishScanParams)
3036{
3037 WDI_Status status = WDI_STATUS_SUCCESS;
3038 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3039 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3040 sizeof(WDI_FinishScanReqParamsType)) ;
3041 tWDA_ReqParams *pWdaParams ;
3042 tANI_U8 i = 0;
3043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003044 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 if(NULL == wdiFinishScanParams)
3046 {
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 VOS_ASSERT(0);
3050 return VOS_STATUS_E_NOMEM;
3051 }
3052 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3053 if(NULL == pWdaParams)
3054 {
3055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 VOS_ASSERT(0);
3058 vos_mem_free(wdiFinishScanParams);
3059 return VOS_STATUS_E_NOMEM;
3060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 /* Copy init Scan params to WDI structure */
3062 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3063 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3064 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3066 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3067 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3068 finishScanParams->frameLength ;
3069 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3070 finishScanParams->currentOperChannel ;
3071 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3072 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3073 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3075 {
3076 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3077 finishScanParams->scanEntry.bssIdx[i] ;
3078 }
3079
3080
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 /* if Frame length, copy macMgmtHdr ro WDI structure */
3082 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3083 {
3084 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3085 &finishScanParams->macMgmtHdr,
3086 sizeof(WDI_MacMgmtHdr)) ;
3087 }
3088 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 /* Store Init Req pointer, as this will be used for response */
3090 /* store Params pass it to WDI */
3091 pWdaParams->pWdaContext = pWDA;
3092 pWdaParams->wdaMsgParam = finishScanParams;
3093 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 /* call DAL API to pass init scan request to DAL */
3095 status = WDI_FinishScanReq(wdiFinishScanParams,
3096 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003097
Jeff Johnson295189b2012-06-20 16:38:30 -07003098
3099 /*
3100 * WDI API returns failure..
3101 */
3102 if(IS_WDI_STATUS_FAILURE( status))
3103 {
3104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3105 "Failure in Finish Scan WDI API, free all the memory " );
3106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3107 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 finishScanParams->status = eSIR_FAILURE ;
3109 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 return CONVERT_WDI2VOS_STATUS(status) ;
3112}
Jeff Johnson295189b2012-06-20 16:38:30 -07003113/*---------------------------------------------------------------------
3114 * ASSOC API's
3115 *---------------------------------------------------------------------
3116 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003117/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303118 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 * Trigger Init SCAN callback
3120 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303121void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003122{
3123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3124 tWDA_CbContext *pWDA;
3125 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003127 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 if(NULL == pWdaParams)
3129 {
3130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003131 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 VOS_ASSERT(0) ;
3133 return ;
3134 }
3135 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3136 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3138 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 /* reset macBSSID */
3140 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 /* reset macSTASelf */
3142 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003143 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 return ;
3146}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303147
3148/*
3149 * FUNCTION: WDA_JoinReqCallback
3150 * Free memory and send SWITCH CHANNEL RSP back to PE.
3151 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3152 */
3153void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3154{
3155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3156 tWDA_CbContext *pWDA;
3157 tSwitchChannelParams *joinReqParam;
3158
3159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3160 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3161
3162 if(NULL == pWdaParams)
3163 {
3164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3165 "%s: pWdaParams received NULL", __func__);
3166 VOS_ASSERT(0);
3167 return;
3168 }
3169
3170 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3171 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3172 joinReqParam->status = wdiStatus;
3173
3174 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3175 {
3176 /* reset macBSSID */
3177 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3178 /* reset macSTASelf */
3179 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3180
3181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3182 vos_mem_free(pWdaParams);
3183 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3184 }
3185
3186 return;
3187}
3188
Jeff Johnson295189b2012-06-20 16:38:30 -07003189/*
3190 * FUNCTION: WDA_ProcessJoinReq
3191 * Trigger Join REQ in WDI
3192 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003193VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3194 tSwitchChannelParams* joinReqParam)
3195{
3196 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 WDI_JoinReqParamsType *wdiJoinReqParam =
3198 (WDI_JoinReqParamsType *)vos_mem_malloc(
3199 sizeof(WDI_JoinReqParamsType)) ;
3200 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003202 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(NULL == wdiJoinReqParam)
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003208 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 return VOS_STATUS_E_NOMEM;
3210 }
3211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3212 if(NULL == pWdaParams)
3213 {
3214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003215 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 VOS_ASSERT(0);
3217 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003218 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 return VOS_STATUS_E_NOMEM;
3220 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003221
3222 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3223 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3224 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3225 {
3226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3227 "%s: received join request when BSSID or self-STA is NULL "
3228 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003229 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003230 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3231 VOS_ASSERT(0);
3232 vos_mem_free(wdiJoinReqParam);
3233 vos_mem_free(pWdaParams);
3234 joinReqParam->status = eSIR_FAILURE ;
3235 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3236 return VOS_STATUS_E_INVAL;
3237 }
3238
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 /* copy the BSSID for pWDA */
3240 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3241 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3243 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3245 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003246#ifdef WLAN_FEATURE_VOWIFI
3247 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3248 joinReqParam->maxTxPower ;
3249#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3251 joinReqParam->localPowerConstraint ;
3252#endif
3253 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3254 joinReqParam->secondaryChannelOffset ;
3255 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3256
Sachin Ahuja935eda782014-07-30 14:57:41 +05303257 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3258 wdiJoinReqParam->pUserData = pWdaParams;
3259
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 /* Store Init Req pointer, as this will be used for response */
3261 /* store Params pass it to WDI */
3262 pWdaParams->pWdaContext = pWDA;
3263 pWdaParams->wdaMsgParam = joinReqParam;
3264 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303266 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 if(IS_WDI_STATUS_FAILURE(status))
3268 {
3269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3270 "Failure in Join WDI API, free all the memory " );
3271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3272 vos_mem_free(pWdaParams) ;
3273 joinReqParam->status = eSIR_FAILURE ;
3274 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 return CONVERT_WDI2VOS_STATUS(status) ;
3277}
Jeff Johnson295189b2012-06-20 16:38:30 -07003278/*
3279 * FUNCTION: WDA_SwitchChannelReqCallback
3280 * send Switch channel RSP back to PE
3281 */
3282void WDA_SwitchChannelReqCallback(
3283 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3284{
3285 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3286 tWDA_CbContext *pWDA;
3287 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003289 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 if(NULL == pWdaParams)
3291 {
3292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003293 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 VOS_ASSERT(0) ;
3295 return ;
3296 }
3297 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3298 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3299
3300#ifdef WLAN_FEATURE_VOWIFI
3301 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3302#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3304 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003306 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 return ;
3309}
Jeff Johnson295189b2012-06-20 16:38:30 -07003310/*
3311 * FUNCTION: WDA_ProcessChannelSwitchReq
3312 * Request to WDI to switch channel REQ params.
3313 */
3314VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3315 tSwitchChannelParams *pSwitchChanParams)
3316{
3317 WDI_Status status = WDI_STATUS_SUCCESS ;
3318 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3319 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3320 sizeof(WDI_SwitchChReqParamsType)) ;
3321 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003323 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 if(NULL == wdiSwitchChanParam)
3325 {
3326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003327 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 VOS_ASSERT(0);
3329 return VOS_STATUS_E_NOMEM;
3330 }
3331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3332 if(NULL == pWdaParams)
3333 {
3334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 VOS_ASSERT(0);
3337 vos_mem_free(wdiSwitchChanParam);
3338 return VOS_STATUS_E_NOMEM;
3339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3341#ifndef WLAN_FEATURE_VOWIFI
3342 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3343 pSwitchChanParams->localPowerConstraint;
3344#endif
3345 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3346 pSwitchChanParams->secondaryChannelOffset;
3347 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 /* Store req pointer, as this will be used for response */
3349 /* store Params pass it to WDI */
3350 pWdaParams->pWdaContext = pWDA;
3351 pWdaParams->wdaMsgParam = pSwitchChanParams;
3352 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353#ifdef WLAN_FEATURE_VOWIFI
3354 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3355 = pSwitchChanParams->maxTxPower;
3356 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3357 pSwitchChanParams ->selfStaMacAddr,
3358 sizeof(tSirMacAddr));
3359#endif
3360 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3361 pSwitchChanParams->bssId,
3362 sizeof(tSirMacAddr));
3363
3364 status = WDI_SwitchChReq(wdiSwitchChanParam,
3365 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003366 if(IS_WDI_STATUS_FAILURE(status))
3367 {
3368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3369 "Failure in process channel switch Req WDI API, free all the memory " );
3370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3371 vos_mem_free(pWdaParams) ;
3372 pSwitchChanParams->status = eSIR_FAILURE ;
3373 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 return CONVERT_WDI2VOS_STATUS(status) ;
3376}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003377
3378/*
3379 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3380 * send Switch channel RSP back to PE
3381 */
3382void WDA_SwitchChannelReqCallback_V1(
3383 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3384 void* pUserData)
3385{
3386 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3387 tWDA_CbContext *pWDA;
3388 tSwitchChannelParams *pSwitchChanParams;
3389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3390 "<------ %s " ,__func__);
3391
3392 if (NULL == pWdaParams)
3393 {
3394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3395 "%s: pWdaParams received NULL", __func__);
3396 VOS_ASSERT(0);
3397 return ;
3398 }
3399 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3400 pSwitchChanParams =
3401 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3402 pSwitchChanParams->channelSwitchSrc =
3403 wdiSwitchChanRsp->channelSwitchSrc;
3404#ifdef WLAN_FEATURE_VOWIFI
3405 pSwitchChanParams->txMgmtPower =
3406 wdiSwitchChanRsp->ucTxMgmtPower;
3407#endif
3408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3409 vos_mem_free(pWdaParams);
3410 pSwitchChanParams->status =
3411 wdiSwitchChanRsp->wdiStatus ;
3412 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3413 (void *)pSwitchChanParams , 0);
3414 return;
3415}
3416
3417/*
3418 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3419 * Request to WDI to switch channel REQ params.
3420 */
3421VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3422 tSwitchChannelParams *pSwitchChanParams)
3423{
3424 WDI_Status status = WDI_STATUS_SUCCESS ;
3425 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3426 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3427 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3428 tWDA_ReqParams *pWdaParams ;
3429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3430 "------> %s " ,__func__);
3431 if (NULL == wdiSwitchChanParam)
3432 {
3433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3434 "%s: VOS MEM Alloc Failure", __func__);
3435 VOS_ASSERT(0);
3436 return VOS_STATUS_E_NOMEM;
3437 }
3438 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3439 if (NULL == pWdaParams)
3440 {
3441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3442 "%s: VOS MEM Alloc Failure", __func__);
3443 VOS_ASSERT(0);
3444 vos_mem_free(wdiSwitchChanParam);
3445 return VOS_STATUS_E_NOMEM;
3446 }
3447 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3448 pSwitchChanParams->channelSwitchSrc;
3449
3450 wdiSwitchChanParam->wdiChInfo.ucChannel =
3451 pSwitchChanParams->channelNumber;
3452#ifndef WLAN_FEATURE_VOWIFI
3453 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3454 pSwitchChanParams->localPowerConstraint;
3455#endif
3456 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3457 pSwitchChanParams->secondaryChannelOffset;
3458 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3459 /* Store req pointer, as this will be used for response */
3460 /* store Params pass it to WDI */
3461 pWdaParams->pWdaContext = pWDA;
3462 pWdaParams->wdaMsgParam = pSwitchChanParams;
3463 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3464#ifdef WLAN_FEATURE_VOWIFI
3465 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3466 pSwitchChanParams->maxTxPower;
3467 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3468 pSwitchChanParams ->selfStaMacAddr,
3469 sizeof(tSirMacAddr));
3470#endif
3471 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3472 pSwitchChanParams->bssId,
3473 sizeof(tSirMacAddr));
3474
3475 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3476 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3477 pWdaParams);
3478 if (IS_WDI_STATUS_FAILURE(status))
3479 {
3480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3481 "Failure in process channel switch Req WDI "
3482 "API, free all the memory " );
3483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3484 vos_mem_free(pWdaParams) ;
3485 pSwitchChanParams->status = eSIR_FAILURE ;
3486 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3487 (void *)pSwitchChanParams, 0) ;
3488 }
3489 return CONVERT_WDI2VOS_STATUS(status) ;
3490}
3491
Jeff Johnson295189b2012-06-20 16:38:30 -07003492/*
3493 * FUNCTION: WDA_ConfigBssReqCallback
3494 * config BSS Req Callback, called by WDI
3495 */
3496void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3497 ,void* pUserData)
3498{
3499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3500 tWDA_CbContext *pWDA;
3501 tAddBssParams *configBssReqParam;
3502 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003504 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 if(NULL == pWdaParams)
3506 {
3507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003508 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 VOS_ASSERT(0) ;
3510 return ;
3511 }
3512 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3513 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3514 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003516 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3518 {
3519 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3520 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3522 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3523 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3524
3525 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3526 {
3527 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3528 {
3529 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3530 staConfigBssParam->staType = STA_ENTRY_BSSID;
3531 }
3532 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3533 (staConfigBssParam->staType == STA_ENTRY_SELF))
3534 {
3535 /* This is the 1st add BSS Req for the BTAMP STA */
3536 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3537 staConfigBssParam->staType = STA_ENTRY_BSSID;
3538 }
3539 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3540 (staConfigBssParam->staType == STA_ENTRY_PEER))
3541 {
3542 /* This is the 2nd ADD BSS Request that is sent
3543 * on the BTAMP STA side. The Sta type is
3544 * set to STA_ENTRY_PEER here.*/
3545 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3546 }
3547 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3548 (staConfigBssParam->staType == STA_ENTRY_SELF))
3549 {
3550 /* statype is already set by PE.
3551 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3552 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3553 staConfigBssParam->staType = STA_ENTRY_BSSID;
3554 }
3555 else
3556 {
3557 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3558 staConfigBssParam->staType = STA_ENTRY_PEER;
3559 }
3560 }
3561 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3562 {
3563 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3564 staConfigBssParam->staType = STA_ENTRY_SELF;
3565 }
3566 else
3567 {
3568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3569 "Invalid operation mode specified");
3570 VOS_ASSERT(0);
3571 }
3572
3573 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3578 sizeof(tSirMacAddr));
3579 staConfigBssParam->txChannelWidthSet =
3580 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3582 staConfigBssParam->htCapable)
3583 {
3584 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3585 wdiConfigBssRsp->ucBSSIdx;
3586 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3587 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303588 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3589 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3592 wdiConfigBssRsp->ucBSSIdx,
3593 wdiConfigBssRsp->ucSTAIdx))
3594 {
3595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003596 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 VOS_ASSERT(0) ;
3598 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3600 {
3601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003602 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 VOS_ASSERT(0) ;
3604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003605#ifdef WLAN_FEATURE_VOWIFI
3606 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3607#endif
3608 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303609 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3610 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3612 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003613 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 return ;
3615}
Jeff Johnson295189b2012-06-20 16:38:30 -07003616/*
3617 * FUNCTION: WDA_UpdateEdcaParamsForAC
3618 * Update WDI EDCA params with PE edca params
3619 */
3620void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3621 WDI_EdcaParamRecord *wdiEdcaParam,
3622 tSirMacEdcaParamRecord *macEdcaParam)
3623{
3624 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3625 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3626 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3627 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3628 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3629 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3630}
Jeff Johnson295189b2012-06-20 16:38:30 -07003631/*
3632 * FUNCTION: WDA_ProcessConfigBssReq
3633 * Configure BSS before starting Assoc with AP
3634 */
3635VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3636 tAddBssParams* configBssReqParam)
3637{
3638 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303639 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003642 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303643 if (NULL == configBssReqParam)
3644 {
3645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3646 "%s: configBssReqParam is NULL", __func__);
3647 return VOS_STATUS_E_INVAL;
3648 }
3649
3650 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3651 sizeof(WDI_ConfigBSSReqParamsType)) ;
3652
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 if(NULL == wdiConfigBssReqParam)
3654 {
3655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003656 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 VOS_ASSERT(0);
3658 return VOS_STATUS_E_NOMEM;
3659 }
3660 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3661 if(NULL == pWdaParams)
3662 {
3663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003664 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 VOS_ASSERT(0);
3666 vos_mem_free(wdiConfigBssReqParam);
3667 return VOS_STATUS_E_NOMEM;
3668 }
Kiran4a17ebe2013-01-31 10:43:43 -08003669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3670 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3673 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 /* Store Init Req pointer, as this will be used for response */
3675 /* store Params pass it to WDI */
3676 pWdaParams->pWdaContext = pWDA;
3677 pWdaParams->wdaMsgParam = configBssReqParam;
3678 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003679 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3680 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 if(IS_WDI_STATUS_FAILURE(status))
3682 {
3683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3684 "Failure in Config BSS WDI API, free all the memory " );
3685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3686 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003688 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 return CONVERT_WDI2VOS_STATUS(status) ;
3691}
Jeff Johnson295189b2012-06-20 16:38:30 -07003692#ifdef ENABLE_HAL_COMBINED_MESSAGES
3693/*
3694 * FUNCTION: WDA_PostAssocReqCallback
3695 * Post ASSOC req callback, send RSP back to PE
3696 */
3697void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3698 void* pUserData)
3699{
3700 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3701 tPostAssocParams *postAssocReqParam =
3702 (tPostAssocParams *)pWDA->wdaMsgParam ;
3703 /*STA context within the BSS Params*/
3704 tAddStaParams *staPostAssocParam =
3705 &postAssocReqParam->addBssParams.staContext ;
3706 /*STA Params for self STA*/
3707 tAddStaParams *selfStaPostAssocParam =
3708 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003710 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003712 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003713 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3714 {
3715 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3716 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3717 sizeof(tSirMacAddr)) ;
3718 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3719 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3720 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3722 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303723 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003724 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3725 pWDA->wdaWdiApiMsgParam = NULL;
3726 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003727 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003728 return ;
3729}
Jeff Johnson295189b2012-06-20 16:38:30 -07003730/*
3731 * FUNCTION: WDA_ProcessPostAssocReq
3732 * Trigger POST ASSOC processing in WDI
3733 */
3734VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3735 tPostAssocParams *postAssocReqParam)
3736{
Jeff Johnson295189b2012-06-20 16:38:30 -07003737 WDI_Status status = WDI_STATUS_SUCCESS ;
3738
3739 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3740 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3741 sizeof(WDI_PostAssocReqParamsType)) ;
3742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003743 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003744
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 if(NULL == wdiPostAssocReqParam)
3746 {
3747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003748 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 VOS_ASSERT(0);
3750 return VOS_STATUS_E_NOMEM;
3751 }
3752
3753 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3754 {
3755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003756 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 VOS_ASSERT(0);
3758 return VOS_STATUS_E_FAILURE;
3759 }
3760
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 /* update BSS params into WDI structure */
3762 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3763 &postAssocReqParam->addBssParams) ;
3764 /* update STA params into WDI structure */
3765 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3766 &postAssocReqParam->addStaParams) ;
3767
3768 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3769 postAssocReqParam->addBssParams.highPerformance;
3770 WDA_UpdateEdcaParamsForAC(pWDA,
3771 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3772 &postAssocReqParam->addBssParams.acbe);
3773 WDA_UpdateEdcaParamsForAC(pWDA,
3774 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3775 &postAssocReqParam->addBssParams.acbk);
3776 WDA_UpdateEdcaParamsForAC(pWDA,
3777 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3778 &postAssocReqParam->addBssParams.acvi);
3779 WDA_UpdateEdcaParamsForAC(pWDA,
3780 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3781 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 /* Store Init Req pointer, as this will be used for response */
3783 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 /* store Params pass it to WDI */
3785 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003786 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3787 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003788 if(IS_WDI_STATUS_FAILURE(status))
3789 {
3790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3791 "Failure in Post Assoc WDI API, free all the memory " );
3792 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3793 pWDA->wdaWdiApiMsgParam = NULL;
3794 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 return CONVERT_WDI2VOS_STATUS(status) ;
3799}
3800#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003801/*
3802 * FUNCTION: WDA_AddStaReqCallback
3803 * ADD STA req callback, send RSP back to PE
3804 */
3805void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3806 void* pUserData)
3807{
3808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3809 tWDA_CbContext *pWDA;
3810 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003812 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003813 if(NULL == pWdaParams)
3814 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 VOS_ASSERT(0) ;
3817 return ;
3818 }
3819 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3820 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003822 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3824 {
3825 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3826 /*TODO: UMAC structure doesn't have these fields*/
3827 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3828 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3829 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3830 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3831 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3832 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003833#ifdef FEATURE_WLAN_TDLS
3834 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3835 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3836#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003838#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 {
3840 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3841 wdiConfigStaRsp->ucBssIdx;
3842 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3843 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303844 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3845 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003846 }
3847 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3848 {
3849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003850 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 VOS_ASSERT(0) ;
3852 return ;
3853 }
3854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3856 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003857 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 return ;
3859}
Jeff Johnson295189b2012-06-20 16:38:30 -07003860/*
3861 * FUNCTION: WDA_ConfigStaReq
3862 * Trigger Config STA processing in WDI
3863 */
3864VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3865 tAddStaParams *addStaReqParam)
3866{
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3869 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3870 sizeof(WDI_ConfigSTAReqParamsType)) ;
3871 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003873 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 if(NULL == wdiConfigStaReqParam)
3875 {
3876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003877 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 VOS_ASSERT(0);
3879 return VOS_STATUS_E_NOMEM;
3880 }
3881 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3882 if(NULL == pWdaParams)
3883 {
3884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003885 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 VOS_ASSERT(0);
3887 vos_mem_free(wdiConfigStaReqParam);
3888 return VOS_STATUS_E_NOMEM;
3889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003891 /* update STA params into WDI structure */
3892 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3893 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 /* Store Init Req pointer, as this will be used for response */
3895 /* store Params pass it to WDI */
3896 pWdaParams->pWdaContext = pWDA;
3897 pWdaParams->wdaMsgParam = addStaReqParam;
3898 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3900 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 if(IS_WDI_STATUS_FAILURE(status))
3902 {
3903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3904 "Failure in Config STA WDI API, free all the memory " );
3905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3906 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003908 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 return CONVERT_WDI2VOS_STATUS(status) ;
3911}
Jeff Johnson295189b2012-06-20 16:38:30 -07003912/*
3913 * FUNCTION: WDA_DelBSSReqCallback
3914 * Dens DEL BSS RSP back to PE
3915 */
3916void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3917 void* pUserData)
3918{
3919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3920 tWDA_CbContext *pWDA;
3921 tDeleteBssParams *delBssReqParam;
3922 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003924 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003925 if(NULL == pWdaParams)
3926 {
3927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003928 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 VOS_ASSERT(0) ;
3930 return ;
3931 }
3932 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3933 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003934 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003935 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3936 {
3937 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3938 sizeof(tSirMacAddr)) ;
3939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3941 {
3942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003943 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 VOS_ASSERT(0) ;
3945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3947 {
3948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003949 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 VOS_ASSERT(0) ;
3951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3953 {
3954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003955 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 VOS_ASSERT(0) ;
3957 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303958
3959 WLANTL_StartForwarding(staIdx,0,0);
3960
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3962 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003963 /* reset the the system role*/
3964 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3965
3966 /* Reset the BA related information */
3967 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3968 {
3969 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3970 {
3971 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3972 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303973 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 /* Reset framesTxed counters here */
3975 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3976 {
3977 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3978 }
3979 }
3980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 return ;
3983}
3984
Jeff Johnson295189b2012-06-20 16:38:30 -07003985/*
3986 * FUNCTION: WDA_ProcessDelBssReq
3987 * Init DEL BSS req with WDI
3988 */
3989VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3990 tDeleteBssParams *delBssParam)
3991{
3992 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003993 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3994 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3995 sizeof(WDI_DelBSSReqParamsType)) ;
3996 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003998 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 if(NULL == wdiDelBssReqParam)
4000 {
4001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004002 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 VOS_ASSERT(0);
4004 return VOS_STATUS_E_NOMEM;
4005 }
4006 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4007 if(NULL == pWdaParams)
4008 {
4009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004010 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 VOS_ASSERT(0);
4012 vos_mem_free(wdiDelBssReqParam);
4013 return VOS_STATUS_E_NOMEM;
4014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4016 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4017
4018 /* Store Init Req pointer, as this will be used for response */
4019 /* store Params pass it to WDI */
4020 pWdaParams->pWdaContext = pWDA;
4021 pWdaParams->wdaMsgParam = delBssParam;
4022 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 status = WDI_DelBSSReq(wdiDelBssReqParam,
4024 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 if(IS_WDI_STATUS_FAILURE(status))
4026 {
4027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4028 "Failure in Del BSS WDI API, free all the memory " );
4029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4030 vos_mem_free(pWdaParams) ;
4031 delBssParam->status = eSIR_FAILURE ;
4032 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 return CONVERT_WDI2VOS_STATUS(status) ;
4035}
Jeff Johnson295189b2012-06-20 16:38:30 -07004036/*
4037 * FUNCTION: WDA_DelSTAReqCallback
4038 * Dens DEL STA RSP back to PE
4039 */
4040void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4041 void* pUserData)
4042{
4043 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4044 tWDA_CbContext *pWDA;
4045 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004047 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 if(NULL == pWdaParams)
4049 {
4050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004051 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 VOS_ASSERT(0) ;
4053 return ;
4054 }
4055 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4056 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004057 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4059 {
4060 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4061 {
4062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004063 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 VOS_ASSERT(0) ;
4065 }
4066 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304067 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 }
4069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4070 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 /*Reset the BA information corresponding to this STAIdx */
4072 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4073 WDA_INVALID_STA_INDEX;
4074 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304075 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 return ;
4078}
Jeff Johnson295189b2012-06-20 16:38:30 -07004079/*
4080 * FUNCTION: WDA_ProcessDelStaReq
4081 * Init DEL STA req with WDI
4082 */
4083VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4084 tDeleteStaParams *delStaParam)
4085{
4086 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4088 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4089 sizeof(WDI_DelSTAReqParamsType)) ;
4090 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 if(NULL == wdiDelStaReqParam)
4094 {
4095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004097 VOS_ASSERT(0);
4098 return VOS_STATUS_E_NOMEM;
4099 }
4100 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4101 if(NULL == pWdaParams)
4102 {
4103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004105 VOS_ASSERT(0);
4106 vos_mem_free(wdiDelStaReqParam);
4107 return VOS_STATUS_E_NOMEM;
4108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4110 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004111 /* Store Init Req pointer, as this will be used for response */
4112 /* store Params pass it to WDI */
4113 pWdaParams->pWdaContext = pWDA;
4114 pWdaParams->wdaMsgParam = delStaParam;
4115 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 status = WDI_DelSTAReq(wdiDelStaReqParam,
4117 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 if(IS_WDI_STATUS_FAILURE(status))
4119 {
4120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4121 "Failure in Del STA WDI API, free all the memory status = %d",
4122 status );
4123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4124 vos_mem_free(pWdaParams) ;
4125 delStaParam->status = eSIR_FAILURE ;
4126 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 return CONVERT_WDI2VOS_STATUS(status) ;
4129}
Jeff Johnson295189b2012-06-20 16:38:30 -07004130void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4131{
4132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4133 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304134 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004136 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 if(NULL == pWdaParams)
4138 {
4139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004140 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 VOS_ASSERT(0) ;
4142 return ;
4143 }
4144 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4145 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4147 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4149 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4150 pwdiAddSTASelfRsp->macSelfSta,
4151 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304152 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4153 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4154 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4155 {
4156 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4157 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4158 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 return ;
4161}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304162
Jeff Johnson295189b2012-06-20 16:38:30 -07004163/*
4164 * FUNCTION: WDA_ProcessAddStaSelfReq
4165 *
4166 */
4167VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4168{
4169 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004170 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4172 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4173 sizeof(WDI_AddSTASelfReqParamsType)) ;
4174 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004176 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304177 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 if( NULL == wdiAddStaSelfReq )
4179 {
4180 VOS_ASSERT( 0 );
4181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004182 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304183 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4184 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 return( VOS_STATUS_E_NOMEM );
4186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 if( NULL == pWdaParams )
4189 {
4190 VOS_ASSERT( 0 );
4191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004192 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304193 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4194 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 vos_mem_free(wdiAddStaSelfReq) ;
4196 return( VOS_STATUS_E_NOMEM );
4197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004199 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004200 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 /* Store Init Req pointer, as this will be used for response */
4202 /* store Params pass it to WDI */
4203 pWdaParams->pWdaContext = pWDA;
4204 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4205 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004206 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004207
Jeff Johnson43971f52012-07-17 12:26:56 -07004208 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 {
4210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4211 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004212 wstatus );
4213 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4215 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304216 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4217 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 pAddStaSelfReq->status = eSIR_FAILURE ;
4219 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4220 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004221 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004222}
Jeff Johnson295189b2012-06-20 16:38:30 -07004223/*
4224 * FUNCTION: WDA_DelSTASelfRespCallback
4225 *
4226 */
4227void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4228 wdiDelStaSelfRspParams , void* pUserData)
4229{
4230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4231 tWDA_CbContext *pWDA;
4232 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004234 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 if (NULL == pWdaParams)
4236 {
4237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004238 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 VOS_ASSERT(0);
4240 return;
4241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4243 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004245 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004246
4247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4248 vos_mem_free(pWdaParams) ;
4249
4250 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 return ;
4252}
Jeff Johnson295189b2012-06-20 16:38:30 -07004253/*
4254 * FUNCTION: WDA_DelSTASelfReqCallback
4255 *
4256 */
4257void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4258 void* pUserData)
4259{
4260 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4261 tWDA_CbContext *pWDA;
4262 tDelStaSelfParams *delStaSelfParams;
4263
4264 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304265 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004266 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004267
4268 if (NULL == pWdaParams)
4269 {
4270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004271 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 VOS_ASSERT(0);
4273 return;
4274 }
4275
4276 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4277 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4278
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004279 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280
4281 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4282 {
4283 VOS_ASSERT(0);
4284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4285 vos_mem_free(pWdaParams) ;
4286 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4287 }
4288
4289 return ;
4290}
4291
4292/*
4293 * FUNCTION: WDA_DelSTASelfReq
4294 * Trigger Config STA processing in WDI
4295 */
4296VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4297 tDelStaSelfParams* pDelStaSelfReqParam)
4298{
4299 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004300 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 tWDA_ReqParams *pWdaParams = NULL;
4302 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4303 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4304 sizeof(WDI_DelSTASelfReqParamsType)) ;
4305
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 if( NULL == wdiDelStaSelfReq )
4309 {
4310 VOS_ASSERT( 0 );
4311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004312 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 return( VOS_STATUS_E_NOMEM );
4314 }
4315
4316 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4317 if( NULL == pWdaParams )
4318 {
4319 VOS_ASSERT( 0 );
4320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004321 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 vos_mem_free(wdiDelStaSelfReq) ;
4323 return( VOS_STATUS_E_NOMEM );
4324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004325 pWdaParams->pWdaContext = pWDA;
4326 /* Store param pointer as passed in by caller */
4327 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4328 /* store Params pass it to WDI */
4329 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4331 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4332
4333 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4334 wdiDelStaSelfReq->pUserData = pWdaParams;
4335
Jeff Johnson43971f52012-07-17 12:26:56 -07004336 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4338
Jeff Johnson43971f52012-07-17 12:26:56 -07004339 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 {
4341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4342 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4343 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004344 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4346 vos_mem_free(pWdaParams) ;
4347 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4348 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4349 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004350 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004351}
4352
Jeff Johnson295189b2012-06-20 16:38:30 -07004353/*
4354 * FUNCTION: WDA_SendMsg
4355 * Send Message back to PE
4356 */
4357void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4358 void *pBodyptr, tANI_U32 bodyVal)
4359{
4360 tSirMsgQ msg = {0} ;
4361 tANI_U32 status = VOS_STATUS_SUCCESS ;
4362 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 msg.type = msgType;
4364 msg.bodyval = bodyVal;
4365 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 if (VOS_STATUS_SUCCESS != status)
4368 {
4369 if(NULL != pBodyptr)
4370 {
4371 vos_mem_free(pBodyptr);
4372 }
4373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004374 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004375 VOS_ASSERT(0) ;
4376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004377 return ;
4378}
Jeff Johnson295189b2012-06-20 16:38:30 -07004379/*
4380 * FUNCTION: WDA_UpdateBSSParams
4381 * Translated WDA/PE BSS info into WDI BSS info..
4382 */
4383void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4384 WDI_ConfigBSSReqInfoType *wdiBssParams,
4385 tAddBssParams *wdaBssParams)
4386{
4387 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304388 v_U8_t i = 0;
4389
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 /* copy bssReq Params to WDI structure */
4391 vos_mem_copy(wdiBssParams->macBSSID,
4392 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4393 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4394 sizeof(tSirMacAddr)) ;
4395 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4396 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4397 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004398 wdiBssParams->ucShortSlotTimeSupported =
4399 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4401 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4402 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4403 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4404 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4405
4406 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4407 wdiBssParams->ucTXOPProtectionFullSupport =
4408 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4410 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004411 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4413 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4414 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4415 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4416
Chet Lanctot186b5732013-03-18 10:26:30 -07004417 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4418
Jeff Johnson295189b2012-06-20 16:38:30 -07004419 /* copy SSID into WDI structure */
4420 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4421 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4422 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4424 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004426#ifdef WLAN_FEATURE_VOWIFI
4427 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4428#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004431#ifdef WLAN_FEATURE_VOWIFI_11R
4432 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004433 if(wdiBssParams->bExtSetStaKeyParamValid)
4434 {
4435 /* copy set STA key params to WDI structure */
4436 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4437 wdaBssParams->extSetStaKeyParam.staIdx;
4438 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4439 wdaBssParams->extSetStaKeyParam.encType;
4440 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4441 wdaBssParams->extSetStaKeyParam.wepType;
4442 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4443 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004444 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4445 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004446 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4448 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4449 {
4450 WDA_GetWepKeysFromCfg( pWDA,
4451 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4452 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4453 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4454 }
4455 else
4456 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4458 keyIndex++)
4459 {
4460 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4461 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4462 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4463 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4464 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4465 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304466
4467 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4468 {
4469 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4470 {
4471 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4472 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4473 }
4474
4475 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4476 {
4477 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4478 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4479 }
4480 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4481 FL("%s: Negated Keys"), __func__);
4482 }
4483 else
4484 {
4485 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4486 FL("%s: No change in Keys "), __func__);
4487 vos_mem_copy(
4488 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4489 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4490 WLAN_MAX_KEY_RSC_LEN);
4491 vos_mem_copy(
4492 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4493 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4494 SIR_MAC_MAX_KEY_LENGTH);
4495 }
4496
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4498 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4499 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4500 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304502 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 }
4505 }
4506 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4507 }
4508 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4509 {
4510 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4511 sizeof(wdaBssParams->extSetStaKeyParam) );
4512 }
4513#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004514#ifdef WLAN_FEATURE_11AC
4515 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4516 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4517#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004518
4519 return ;
4520}
Jeff Johnson295189b2012-06-20 16:38:30 -07004521/*
4522 * FUNCTION: WDA_UpdateSTAParams
4523 * Translated WDA/PE BSS info into WDI BSS info..
4524 */
4525void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4526 WDI_ConfigStaReqInfoType *wdiStaParams,
4527 tAddStaParams *wdaStaParams)
4528{
4529 tANI_U8 i = 0;
4530 /* Update STA params */
4531 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4532 sizeof(tSirMacAddr)) ;
4533 wdiStaParams->usAssocId = wdaStaParams->assocId;
4534 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004535 wdiStaParams->staIdx = wdaStaParams->staIdx;
4536
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 wdiStaParams->ucShortPreambleSupported =
4538 wdaStaParams->shortPreambleSupported;
4539 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4540 sizeof(tSirMacAddr)) ;
4541 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4542
4543 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4544
4545 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4546 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4547 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4548 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4549 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4550 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4551 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4552
4553 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4554 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 wdiStaParams->wdiSupportedRates.opRateMode =
4556 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4558 {
4559 wdiStaParams->wdiSupportedRates.llbRates[i] =
4560 wdaStaParams->supportedRates.llbRates[i];
4561 }
4562 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4563 {
4564 wdiStaParams->wdiSupportedRates.llaRates[i] =
4565 wdaStaParams->supportedRates.llaRates[i];
4566 }
4567 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4568 {
4569 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4570 wdaStaParams->supportedRates.aniLegacyRates[i];
4571 }
4572 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4573 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004574#ifdef WLAN_FEATURE_11AC
4575 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4576 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4577 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4578 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4579#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4581 {
4582 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4583 wdaStaParams->supportedRates.supportedMCSSet[i];
4584 }
4585 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4586 wdaStaParams->supportedRates.rxHighestDataRate;
4587
4588 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4589
4590 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4591
4592 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4593 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4594 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4595
4596 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4597 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4598 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4599 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004601#ifdef WLAN_FEATURE_11AC
4602 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4603 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004604 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304605 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4606 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4607 * must be set by default */
4608 if ( wdiStaParams->vhtTxMUBformeeCapable )
4609 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004610#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004611 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4612 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 return ;
4614}
Jeff Johnson295189b2012-06-20 16:38:30 -07004615/*
4616 * -------------------------------------------------------------------------
4617 * CFG update to WDI
4618 * -------------------------------------------------------------------------
4619 */
4620
4621 /*
4622 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4623 * Convert the WNI CFG ID to HAL CFG ID
4624 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004625static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004626{
4627 switch(wniCfgId)
4628 {
4629 case WNI_CFG_STA_ID:
4630 return QWLAN_HAL_CFG_STA_ID;
4631 case WNI_CFG_CURRENT_TX_ANTENNA:
4632 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4633 case WNI_CFG_CURRENT_RX_ANTENNA:
4634 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4635 case WNI_CFG_LOW_GAIN_OVERRIDE:
4636 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4637 case WNI_CFG_POWER_STATE_PER_CHAIN:
4638 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4639 case WNI_CFG_CAL_PERIOD:
4640 return QWLAN_HAL_CFG_CAL_PERIOD;
4641 case WNI_CFG_CAL_CONTROL:
4642 return QWLAN_HAL_CFG_CAL_CONTROL;
4643 case WNI_CFG_PROXIMITY:
4644 return QWLAN_HAL_CFG_PROXIMITY;
4645 case WNI_CFG_NETWORK_DENSITY:
4646 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4647 case WNI_CFG_MAX_MEDIUM_TIME:
4648 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4649 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4650 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4651 case WNI_CFG_RTS_THRESHOLD:
4652 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4653 case WNI_CFG_SHORT_RETRY_LIMIT:
4654 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4655 case WNI_CFG_LONG_RETRY_LIMIT:
4656 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4657 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4658 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4659 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4660 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4661 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4662 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4663 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4664 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4665 case WNI_CFG_FIXED_RATE:
4666 return QWLAN_HAL_CFG_FIXED_RATE;
4667 case WNI_CFG_RETRYRATE_POLICY:
4668 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4669 case WNI_CFG_RETRYRATE_SECONDARY:
4670 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4671 case WNI_CFG_RETRYRATE_TERTIARY:
4672 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4673 case WNI_CFG_FORCE_POLICY_PROTECTION:
4674 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4675 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4676 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4677 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4678 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4679 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4680 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4681 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4682 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4683 case WNI_CFG_MAX_BA_SESSIONS:
4684 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4685 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4686 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4687 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4688 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4689 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4690 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4691 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4692 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4693 case WNI_CFG_STATS_PERIOD:
4694 return QWLAN_HAL_CFG_STATS_PERIOD;
4695 case WNI_CFG_CFP_MAX_DURATION:
4696 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4697#if 0 /*This is not part of CFG*/
4698 case WNI_CFG_FRAME_TRANS_ENABLED:
4699 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4700#endif
4701 case WNI_CFG_DTIM_PERIOD:
4702 return QWLAN_HAL_CFG_DTIM_PERIOD;
4703 case WNI_CFG_EDCA_WME_ACBK:
4704 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4705 case WNI_CFG_EDCA_WME_ACBE:
4706 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4707 case WNI_CFG_EDCA_WME_ACVI:
4708 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4709 case WNI_CFG_EDCA_WME_ACVO:
4710 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4711#if 0
4712 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4713 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4714 case WNI_CFG_TELE_BCN_TRANS_LI:
4715 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4716 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4717 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4718 case WNI_CFG_TELE_BCN_MAX_LI:
4719 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4720 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4721 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4722#endif
4723 case WNI_CFG_ENABLE_CLOSE_LOOP:
4724 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004725 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4726 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 default:
4728 {
4729 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004730 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 wniCfgId);
4732 return VOS_STATUS_E_INVAL;
4733 }
4734 }
4735}
Jeff Johnson295189b2012-06-20 16:38:30 -07004736/*
4737 * FUNCTION: WDA_UpdateCfgCallback
4738 *
4739 */
4740void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4741{
4742 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4743 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4744 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004746 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 /*
4748 * currently there is no response message is expected between PE and
4749 * WDA, Failure return from WDI is a ASSERT condition
4750 */
4751 if(WDI_STATUS_SUCCESS != wdiStatus)
4752 {
4753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004754 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004755 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4756 }
4757
4758 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4759 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4760 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 return ;
4762}
Jeff Johnson295189b2012-06-20 16:38:30 -07004763/*
4764 * FUNCTION: WDA_UpdateCfg
4765 *
4766 */
4767VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4768{
4769
4770 WDI_Status status = WDI_STATUS_SUCCESS ;
4771 tANI_U32 val =0;
4772 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4773 tHalCfg *configData;
4774 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4775 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004777 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 if (NULL == pMac )
4779 {
4780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004781 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004782 return VOS_STATUS_E_FAILURE;
4783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 if(WDA_START_STATE != pWDA->wdaState)
4785 {
4786 return VOS_STATUS_E_FAILURE;
4787 }
4788
4789 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4790 {
4791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004792 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 VOS_ASSERT(0);
4794 return VOS_STATUS_E_FAILURE;
4795 }
4796
4797 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4798 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 if(NULL == wdiCfgReqParam)
4800 {
4801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004803 VOS_ASSERT(0);
4804 return VOS_STATUS_E_NOMEM;
4805 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004806 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4807 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 if(NULL == wdiCfgReqParam->pConfigBuffer)
4809 {
4810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004811 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 vos_mem_free(wdiCfgReqParam);
4813 VOS_ASSERT(0);
4814 return VOS_STATUS_E_NOMEM;
4815 }
4816
4817 /*convert the WNI CFG Id to HAL CFG Id*/
4818 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4819 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4820
4821 /*TODO: revisit this for handling string parameters */
4822 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4823 &val) != eSIR_SUCCESS)
4824 {
4825 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004826 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4828 vos_mem_free(wdiCfgReqParam);
4829 return eSIR_FAILURE;
4830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4832 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4833 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4834 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4835 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4836
4837 /* store Params pass it to WDI */
4838 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004839#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4840 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4841 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 if(IS_WDI_STATUS_FAILURE(status))
4843 {
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4845 "Failure in Update CFG WDI API, free all the memory " );
4846 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4847 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4848 pWDA->wdaWdiCfgApiMsgParam = NULL;
4849 /* Failure is not expected */
4850 VOS_ASSERT(0) ;
4851 }
4852#else
4853 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4854 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4855 pWDA->wdaWdiCfgApiMsgParam = NULL;
4856#endif
4857 return CONVERT_WDI2VOS_STATUS(status) ;
4858}
4859
Jeff Johnson295189b2012-06-20 16:38:30 -07004860VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4861 v_U8_t *pDefaultKeyId,
4862 v_U8_t *pNumKeys,
4863 WDI_KeysType *pWdiKeys )
4864{
4865 v_U32_t i, j, defKeyId = 0;
4866 v_U32_t val = SIR_MAC_KEY_LENGTH;
4867 VOS_STATUS status = WDI_STATUS_SUCCESS;
4868 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 if (NULL == pMac )
4870 {
4871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004872 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 return VOS_STATUS_E_FAILURE;
4874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4876 &defKeyId ))
4877 {
4878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4879 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4880 }
4881
4882 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 /* Need to extract ALL of the configured WEP Keys */
4884 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4885 {
4886 val = SIR_MAC_KEY_LENGTH;
4887 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4888 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4889 pWdiKeys[j].key,
4890 &val ))
4891 {
4892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004893 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 }
4895 else
4896 {
4897 pWdiKeys[j].keyId = (tANI_U8) i;
4898 /*
4899 * Actually, a DC (Don't Care) because
4900 * this is determined (and set) by PE/MLME
4901 */
4902 pWdiKeys[j].unicast = 0;
4903 /*
4904 * Another DC (Don't Care)
4905 */
4906 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4907 /* Another DC (Don't Care). Unused for WEP */
4908 pWdiKeys[j].paeRole = 0;
4909 /* Determined from wlan_cfgGetStr() above.*/
4910 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 j++;
4912 *pNumKeys = (tANI_U8) j;
4913 }
4914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 return status;
4916}
Jeff Johnson295189b2012-06-20 16:38:30 -07004917/*
4918 * FUNCTION: WDA_SetBssKeyReqCallback
4919 * send SET BSS key RSP back to PE
4920 */
4921void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4922{
4923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4924 tWDA_CbContext *pWDA;
4925 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004927 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 if(NULL == pWdaParams)
4929 {
4930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004931 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 VOS_ASSERT(0) ;
4933 return ;
4934 }
4935 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4936 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304937 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4938 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4940 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004941 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 return ;
4944}
Jeff Johnson295189b2012-06-20 16:38:30 -07004945/*
4946 * FUNCTION: WDA_ProcessSetBssKeyReq
4947 * Request to WDI for programming the BSS key( key for
4948 * broadcast/multicast frames Encryption)
4949 */
4950VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4951 tSetBssKeyParams *setBssKeyParams )
4952{
4953 WDI_Status status = WDI_STATUS_SUCCESS ;
4954 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4955 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4956 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4957 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004960 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 if(NULL == wdiSetBssKeyParam)
4962 {
4963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 VOS_ASSERT(0);
4966 return VOS_STATUS_E_NOMEM;
4967 }
4968 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4969 if(NULL == pWdaParams)
4970 {
4971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 VOS_ASSERT(0);
4974 vos_mem_free(wdiSetBssKeyParam);
4975 return VOS_STATUS_E_NOMEM;
4976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 /* copy set BSS params to WDI structure */
4979 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4980 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4981 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 if(setBssKeyParams->encType != eSIR_ED_NONE)
4983 {
4984 if( setBssKeyParams->numKeys == 0 &&
4985 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4986 setBssKeyParams->encType == eSIR_ED_WEP104))
4987 {
4988 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4990 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4991 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4992 }
4993 else
4994 {
4995 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4996 {
4997 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4998 setBssKeyParams->key[keyIndex].keyId;
4999 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5000 setBssKeyParams->key[keyIndex].unicast;
5001 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5002 setBssKeyParams->key[keyIndex].keyDirection;
5003 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5004 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5005 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5006 setBssKeyParams->key[keyIndex].paeRole;
5007 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5008 setBssKeyParams->key[keyIndex].keyLength;
5009 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5010 setBssKeyParams->key[keyIndex].key,
5011 SIR_MAC_MAX_KEY_LENGTH);
5012 }
5013 }
5014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005015 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5016 setBssKeyParams->singleTidRc;
5017 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 /* Store set key pointer, as this will be used for response */
5019 /* store Params pass it to WDI */
5020 pWdaParams->pWdaContext = pWDA;
5021 pWdaParams->wdaMsgParam = setBssKeyParams;
5022 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5024 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5025
5026 if(IS_WDI_STATUS_FAILURE(status))
5027 {
5028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5029 "Failure in Set BSS Key Req WDI API, free all the memory " );
5030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5031 vos_mem_free(pWdaParams) ;
5032 setBssKeyParams->status = eSIR_FAILURE ;
5033 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 return CONVERT_WDI2VOS_STATUS(status) ;
5036}
Jeff Johnson295189b2012-06-20 16:38:30 -07005037/*
5038 * FUNCTION: WDA_RemoveBssKeyReqCallback
5039 * send SET BSS key RSP back to PE
5040 */
5041void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5042{
5043 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5044 tWDA_CbContext *pWDA;
5045 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005047 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 if(NULL == pWdaParams)
5049 {
5050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005051 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 VOS_ASSERT(0) ;
5053 return ;
5054 }
5055 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5056 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5058 vos_mem_free(pWdaParams) ;
5059
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005060 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005062 return ;
5063}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305064
5065/*
5066 * FUNCTION: WDA_SpoofMacAddrRspCallback
5067 * recieves spoof mac addr response from FW
5068 */
5069void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5070{
5071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5072 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305073
Siddharth Bhal171788a2014-09-29 21:02:40 +05305074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5075 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305076
Siddharth Bhal171788a2014-09-29 21:02:40 +05305077 if(NULL == pWdaParams)
5078 {
5079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5080 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305081 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305082 return ;
5083 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305084 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305085
Siddharth Bhal029d6732014-10-09 21:31:23 +05305086 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305088 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305089 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305090 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5091 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305092
Siddharth Bhal171788a2014-09-29 21:02:40 +05305093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305094 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305095 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305096
5097 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305098}
5099
Jeff Johnson295189b2012-06-20 16:38:30 -07005100/*
5101 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5102 * Request to WDI to remove the BSS key( key for broadcast/multicast
5103 * frames Encryption)
5104 */
5105VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5106 tRemoveBssKeyParams *removeBssKeyParams )
5107{
5108 WDI_Status status = WDI_STATUS_SUCCESS ;
5109 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5110 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5111 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5112 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005114 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 if(NULL == wdiRemoveBssKeyParam)
5116 {
5117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 VOS_ASSERT(0);
5120 return VOS_STATUS_E_NOMEM;
5121 }
5122 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5123 if(NULL == pWdaParams)
5124 {
5125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 VOS_ASSERT(0);
5128 vos_mem_free(wdiRemoveBssKeyParam);
5129 return VOS_STATUS_E_NOMEM;
5130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 /* copy Remove BSS key params to WDI structure*/
5132 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5133 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5134 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5135 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5136 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 /* Store remove key pointer, as this will be used for response */
5138 /* store Params pass it to WDI */
5139 pWdaParams->pWdaContext = pWDA;
5140 pWdaParams->wdaMsgParam = removeBssKeyParams;
5141 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005142 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5143 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 if(IS_WDI_STATUS_FAILURE(status))
5145 {
5146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5147 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5149 vos_mem_free(pWdaParams) ;
5150 removeBssKeyParams->status = eSIR_FAILURE ;
5151 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5152 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005153 return CONVERT_WDI2VOS_STATUS(status) ;
5154}
Jeff Johnson295189b2012-06-20 16:38:30 -07005155/*
5156 * FUNCTION: WDA_SetBssKeyReqCallback
5157 * send SET BSS key RSP back to PE
5158 */
5159void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5160{
5161 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5162 tWDA_CbContext *pWDA;
5163 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005165 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 if(NULL == pWdaParams)
5167 {
5168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005169 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 VOS_ASSERT(0) ;
5171 return ;
5172 }
5173 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5174 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305175 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5176 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5178 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005179 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 return ;
5182}
Jeff Johnson295189b2012-06-20 16:38:30 -07005183/*
5184 * FUNCTION: WDA_ProcessSetStaKeyReq
5185 * Request to WDI for programming the STA key( key for Unicast frames
5186 * Encryption)
5187 */
5188VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5189 tSetStaKeyParams *setStaKeyParams )
5190{
5191 WDI_Status status = WDI_STATUS_SUCCESS ;
5192 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5193 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5194 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5195 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005198 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 if(NULL == wdiSetStaKeyParam)
5200 {
5201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005203 VOS_ASSERT(0);
5204 return VOS_STATUS_E_NOMEM;
5205 }
5206 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5207 if(NULL == pWdaParams)
5208 {
5209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005210 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005211 VOS_ASSERT(0);
5212 vos_mem_free(wdiSetStaKeyParam);
5213 return VOS_STATUS_E_NOMEM;
5214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005216 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005217 /* copy set STA key params to WDI structure */
5218 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5219 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5220 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5221 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 if(setStaKeyParams->encType != eSIR_ED_NONE)
5223 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005224 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005225 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5226 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5227 {
5228 WDA_GetWepKeysFromCfg( pWDA,
5229 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5230 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5231 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5232 }
5233 else
5234 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5236 keyIndex++)
5237 {
5238 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5239 setStaKeyParams->key[keyIndex].keyId;
5240 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5241 setStaKeyParams->key[keyIndex].unicast;
5242 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5243 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5245 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5246 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5247 setStaKeyParams->key[keyIndex].paeRole;
5248 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5249 setStaKeyParams->key[keyIndex].keyLength;
5250 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5251 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5252 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5253 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5254 {
5255 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5256 }
5257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5259 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 }
5261 }
5262 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5263 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 /* Store set key pointer, as this will be used for response */
5265 /* store Params pass it to WDI */
5266 pWdaParams->pWdaContext = pWDA;
5267 pWdaParams->wdaMsgParam = setStaKeyParams;
5268 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005269 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5270 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 if(IS_WDI_STATUS_FAILURE(status))
5272 {
5273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5274 "Failure in set STA Key Req WDI API, free all the memory " );
5275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5276 vos_mem_free(pWdaParams) ;
5277 setStaKeyParams->status = eSIR_FAILURE ;
5278 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005280 return CONVERT_WDI2VOS_STATUS(status) ;
5281}
Jeff Johnson295189b2012-06-20 16:38:30 -07005282/*
5283 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5284 * send SET Bcast STA key RSP back to PE
5285 */
5286void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5287{
5288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5289 tWDA_CbContext *pWDA;
5290 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005292 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 if(NULL == pWdaParams)
5294 {
5295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005296 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 VOS_ASSERT(0) ;
5298 return ;
5299 }
5300 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5301 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5303 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005304 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 return ;
5307}
5308
Jeff Johnson295189b2012-06-20 16:38:30 -07005309/*
5310 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5311 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5312 * Encryption)
5313 */
5314VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5315 tSetStaKeyParams *setStaKeyParams )
5316{
5317 WDI_Status status = WDI_STATUS_SUCCESS ;
5318 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5319 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5320 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5321 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005324 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 if(NULL == wdiSetStaKeyParam)
5326 {
5327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005328 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 VOS_ASSERT(0);
5330 return VOS_STATUS_E_NOMEM;
5331 }
5332 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5333 if(NULL == pWdaParams)
5334 {
5335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005337 VOS_ASSERT(0);
5338 vos_mem_free(wdiSetStaKeyParam);
5339 return VOS_STATUS_E_NOMEM;
5340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005341 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005342 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 /* copy set STA key params to WDI structure */
5344 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5345 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5346 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5347 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 if(setStaKeyParams->encType != eSIR_ED_NONE)
5349 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5351 keyIndex++)
5352 {
5353 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5354 setStaKeyParams->key[keyIndex].keyId;
5355 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5356 setStaKeyParams->key[keyIndex].unicast;
5357 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5358 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5360 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5361 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5362 setStaKeyParams->key[keyIndex].paeRole;
5363 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5364 setStaKeyParams->key[keyIndex].keyLength;
5365 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5366 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5369 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 }
5371 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 /* Store set key pointer, as this will be used for response */
5373 /* store Params pass it to WDI */
5374 pWdaParams->pWdaContext = pWDA;
5375 pWdaParams->wdaMsgParam = setStaKeyParams;
5376 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5378 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(IS_WDI_STATUS_FAILURE(status))
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5382 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5384 vos_mem_free(pWdaParams) ;
5385 setStaKeyParams->status = eSIR_FAILURE ;
5386 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 return CONVERT_WDI2VOS_STATUS(status) ;
5389}
Jeff Johnson295189b2012-06-20 16:38:30 -07005390/*
5391 * FUNCTION: WDA_RemoveStaKeyReqCallback
5392 * send SET BSS key RSP back to PE
5393 */
5394void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5395{
5396 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5397 tWDA_CbContext *pWDA;
5398 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005400 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 if(NULL == pWdaParams)
5402 {
5403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005404 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 VOS_ASSERT(0) ;
5406 return ;
5407 }
5408 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5409 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5411 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005412 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 return ;
5415}
5416
Jeff Johnson295189b2012-06-20 16:38:30 -07005417/*
5418 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5419 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5420 */
5421VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5422 tRemoveStaKeyParams *removeStaKeyParams )
5423{
5424 WDI_Status status = WDI_STATUS_SUCCESS ;
5425 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5426 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5427 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5428 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005430 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 if(NULL == wdiRemoveStaKeyParam)
5432 {
5433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 VOS_ASSERT(0);
5436 return VOS_STATUS_E_NOMEM;
5437 }
5438 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5439 if(NULL == pWdaParams)
5440 {
5441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 VOS_ASSERT(0);
5444 vos_mem_free(wdiRemoveStaKeyParam);
5445 return VOS_STATUS_E_NOMEM;
5446 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 /* copy remove STA key params to WDI structure*/
5448 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5449 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5450 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5451 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5452 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 /* Store remove key pointer, as this will be used for response */
5454 /* store Params pass it to WDI */
5455 pWdaParams->pWdaContext = pWDA;
5456 pWdaParams->wdaMsgParam = removeStaKeyParams;
5457 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5459 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 if(IS_WDI_STATUS_FAILURE(status))
5461 {
5462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5463 "Failure in remove STA Key Req WDI API, free all the memory " );
5464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5465 vos_mem_free(pWdaParams) ;
5466 removeStaKeyParams->status = eSIR_FAILURE ;
5467 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 return CONVERT_WDI2VOS_STATUS(status) ;
5470}
Jeff Johnson295189b2012-06-20 16:38:30 -07005471/*
5472 * FUNCTION: WDA_IsHandleSetLinkStateReq
5473 * Update the WDA state and return the status to handle this message or not
5474 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005475WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5476 tWDA_CbContext *pWDA,
5477 tLinkStateParams *linkStateParams)
5478{
5479 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 switch(linkStateParams->state)
5481 {
5482 case eSIR_LINK_PREASSOC_STATE:
5483 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5484 /*
5485 * set the WDA state to PRE ASSOC
5486 * copy the BSSID into pWDA to use it in join request and return,
5487 * No need to handle these messages.
5488 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005489 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5490 {
5491 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005493 }
5494 else
5495 {
5496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005497 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005498 VOS_ASSERT(0);
5499 }
5500
5501 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5502 {
5503 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005504 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005505 }
5506 else
5507 {
5508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005509 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005510 VOS_ASSERT(0);
5511 }
5512
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5514 *channel and after ) so reset the WDA state to ready when the second
5515 * time UMAC issue the link state with PREASSOC
5516 */
5517 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5518 {
5519 /* RESET WDA state back to WDA_READY_STATE */
5520 pWDA->wdaState = WDA_READY_STATE;
5521 }
5522 else
5523 {
5524 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5525 }
5526 //populate linkState info in WDACbCtxt
5527 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 default:
5530 if(pWDA->wdaState != WDA_READY_STATE)
5531 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005532 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5533 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5534 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5535 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5536 *the ASSERT in WDA_Stop during module unload.*/
5537 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5538 {
5539 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005540 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005541 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005542 else
5543 {
5544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005545 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005546 status = WDA_IGNORE_SET_LINK_STATE;
5547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 }
5549 break;
5550 }
5551
5552 return status;
5553}
Jeff Johnson295189b2012-06-20 16:38:30 -07005554/*
5555 * FUNCTION: WDA_SetLinkStateCallback
5556 * call back function for set link state from WDI
5557 */
5558void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5559{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305560 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005561 tLinkStateParams *linkStateParams;
5562 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005564 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305565 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 {
5567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005568 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 VOS_ASSERT(0) ;
5570 return ;
5571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305573 if (NULL == pWDA)
5574 {
5575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5576 "%s:pWDA is NULL", __func__);
5577 VOS_ASSERT(0);
5578 return ;
5579 }
5580
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 /*
5583 * In STA mode start the BA activity check timer after association
5584 * and in AP mode start BA activity check timer after BSS start */
5585 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5586 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005587 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5588 ((status == WDI_STATUS_SUCCESS) &&
5589 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 {
5591 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 /*
5595 * No respone required for WDA_SET_LINK_STATE so free the request
5596 * param here
5597 */
5598 if( pWdaParams != NULL )
5599 {
5600 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5601 {
5602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5603 }
5604 vos_mem_free(pWdaParams);
5605 }
5606 return ;
5607}
Jeff Johnson295189b2012-06-20 16:38:30 -07005608/*
5609 * FUNCTION: WDA_ProcessSetLinkState
5610 * Request to WDI to set the link status.
5611 */
5612VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5613 tLinkStateParams *linkStateParams)
5614{
5615 WDI_Status status = WDI_STATUS_SUCCESS ;
5616 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5617 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5618 sizeof(WDI_SetLinkReqParamsType)) ;
5619 tWDA_ReqParams *pWdaParams ;
5620 tpAniSirGlobal pMac;
5621 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5622
5623 if(NULL == pMac)
5624 {
5625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005626 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005628 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 return VOS_STATUS_E_FAILURE;
5630 }
5631
5632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005633 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 if(NULL == wdiSetLinkStateParam)
5635 {
5636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005638 VOS_ASSERT(0);
5639 return VOS_STATUS_E_NOMEM;
5640 }
5641 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5642 if(NULL == pWdaParams)
5643 {
5644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005645 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005646 VOS_ASSERT(0);
5647 vos_mem_free(wdiSetLinkStateParam);
5648 return VOS_STATUS_E_NOMEM;
5649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 if(WDA_IGNORE_SET_LINK_STATE ==
5651 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5652 {
5653 status = WDI_STATUS_E_FAILURE;
5654 }
5655 else
5656 {
5657 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5658 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5660 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5662 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 pWdaParams->pWdaContext = pWDA;
5664 /* Store remove key pointer, as this will be used for response */
5665 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005666 /* store Params pass it to WDI */
5667 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5668 /* Stop Timer only other than GO role and concurrent session */
5669 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005670 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5672 {
5673 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5674 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5676 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 if(IS_WDI_STATUS_FAILURE(status))
5678 {
5679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5680 "Failure in set link state Req WDI API, free all the memory " );
5681 }
5682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005683 if(IS_WDI_STATUS_FAILURE(status))
5684 {
5685 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005686 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 vos_mem_free(pWdaParams);
5688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 return CONVERT_WDI2VOS_STATUS(status) ;
5690}
Jeff Johnson295189b2012-06-20 16:38:30 -07005691/*
5692 * FUNCTION: WDA_GetStatsReqParamsCallback
5693 * send the response to PE with Stats received from WDI
5694 */
5695void WDA_GetStatsReqParamsCallback(
5696 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5697 void* pUserData)
5698{
5699 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5700 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5701
5702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005703 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 pGetPEStatsRspParams =
5705 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5706 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5707
5708 if(NULL == pGetPEStatsRspParams)
5709 {
5710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005711 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005712 VOS_ASSERT(0);
5713 return;
5714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005715 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5716 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5717 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5718 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005719
5720 //Fill the Session Id Properly in PE
5721 pGetPEStatsRspParams->sessionId = 0;
5722 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005723 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005724 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5725 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 vos_mem_copy( pGetPEStatsRspParams + 1,
5727 wdiGetStatsRsp + 1,
5728 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005729 /* send response to UMAC*/
5730 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5731
5732 return;
5733}
5734
Jeff Johnson295189b2012-06-20 16:38:30 -07005735/*
5736 * FUNCTION: WDA_ProcessGetStatsReq
5737 * Request to WDI to get the statistics
5738 */
5739VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5740 tAniGetPEStatsReq *pGetStatsParams)
5741{
5742 WDI_Status status = WDI_STATUS_SUCCESS ;
5743 WDI_GetStatsReqParamsType wdiGetStatsParam;
5744 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005746 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5748 pGetStatsParams->staId;
5749 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5750 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005752 status = WDI_GetStatsReq(&wdiGetStatsParam,
5753 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005754 if(IS_WDI_STATUS_FAILURE(status))
5755 {
5756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5757 "Failure in Get Stats Req WDI API, free all the memory " );
5758 pGetPEStatsRspParams =
5759 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5760 if(NULL == pGetPEStatsRspParams)
5761 {
5762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005764 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005765 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 return VOS_STATUS_E_NOMEM;
5767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005768 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5769 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5770 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5771 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5772 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5773 (void *)pGetPEStatsRspParams, 0) ;
5774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 /* Free the request message */
5776 vos_mem_free(pGetStatsParams);
5777 return CONVERT_WDI2VOS_STATUS(status);
5778}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005779
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005780#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005781/*
5782 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5783 * send the response to PE with roam Rssi received from WDI
5784 */
5785void WDA_GetRoamRssiReqParamsCallback(
5786 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5787 void* pUserData)
5788{
5789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5790 tWDA_CbContext *pWDA = NULL;
5791 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5792 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5794 "<------ %s " ,__func__);
5795 if(NULL == pWdaParams)
5796 {
5797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5798 "%s: pWdaParams received NULL", __func__);
5799 VOS_ASSERT(0) ;
5800 return ;
5801 }
5802 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5803 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5804
5805 if(NULL == pGetRoamRssiReqParams)
5806 {
5807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5808 "%s: pGetRoamRssiReqParams received NULL", __func__);
5809 VOS_ASSERT(0);
5810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5811 vos_mem_free(pWdaParams);
5812 return ;
5813 }
5814 pGetRoamRssiRspParams =
5815 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5816
5817 if(NULL == pGetRoamRssiRspParams)
5818 {
5819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5820 "%s: VOS MEM Alloc Failure", __func__);
5821 VOS_ASSERT(0);
5822 return;
5823 }
5824 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5825 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005826 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005827 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5828 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5829
5830 /* Assign get roam rssi req (backup) in to the response */
5831 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5832
5833 /* free WDI command buffer */
5834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5835 vos_mem_free(pWdaParams) ;
5836
5837 /* send response to UMAC*/
5838 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5839
5840 return;
5841}
5842
5843
5844
5845/*
5846 * FUNCTION: WDA_ProcessGetRoamRssiReq
5847 * Request to WDI to get the statistics
5848 */
5849VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5850 tAniGetRssiReq *pGetRoamRssiParams)
5851{
5852 WDI_Status status = WDI_STATUS_SUCCESS ;
5853 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5854 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5855 tWDA_ReqParams *pWdaParams = NULL;
5856
5857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5858 "------> %s " ,__func__);
5859 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5860 pGetRoamRssiParams->staId;
5861 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5862
5863 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5864 if(NULL == pWdaParams)
5865 {
5866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5867 "%s: VOS MEM Alloc Failure", __func__);
5868 VOS_ASSERT(0);
5869 return VOS_STATUS_E_NOMEM;
5870 }
5871
5872 /* Store Init Req pointer, as this will be used for response */
5873 pWdaParams->pWdaContext = pWDA;
5874
5875 /* Take Get roam Rssi req backup as it stores the callback to be called after
5876 receiving the response */
5877 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5878 pWdaParams->wdaWdiApiMsgParam = NULL;
5879
5880 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5881 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5882 if(IS_WDI_STATUS_FAILURE(status))
5883 {
5884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5885 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5886 pGetRoamRssiRspParams =
5887 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5888 if(NULL == pGetRoamRssiRspParams)
5889 {
5890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5891 "%s: VOS MEM Alloc Failure", __func__);
5892 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305893 vos_mem_free(pGetRoamRssiParams);
5894 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005895 return VOS_STATUS_E_NOMEM;
5896 }
5897 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5898 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5899 pGetRoamRssiRspParams->rssi = 0;
5900 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5901 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5902 (void *)pGetRoamRssiRspParams, 0) ;
5903 }
5904 return CONVERT_WDI2VOS_STATUS(status);
5905}
5906#endif
5907
5908
Jeff Johnson295189b2012-06-20 16:38:30 -07005909/*
5910 * FUNCTION: WDA_UpdateEDCAParamCallback
5911 * call back function for Update EDCA params from WDI
5912 */
5913void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5914{
5915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5916 tEdcaParams *pEdcaParams;
5917
5918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005919 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 if(NULL == pWdaParams)
5921 {
5922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005923 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 VOS_ASSERT(0) ;
5925 return ;
5926 }
5927 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5929 vos_mem_free(pWdaParams);
5930 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 return ;
5932}
Jeff Johnson295189b2012-06-20 16:38:30 -07005933/*
5934 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5935 * Request to WDI to Update the EDCA params.
5936 */
5937VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5938 tEdcaParams *pEdcaParams)
5939{
5940 WDI_Status status = WDI_STATUS_SUCCESS ;
5941 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5942 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5943 sizeof(WDI_UpdateEDCAParamsType)) ;
5944 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005946 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 if(NULL == wdiEdcaParam)
5948 {
5949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005952 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 return VOS_STATUS_E_NOMEM;
5954 }
5955 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5956 if(NULL == pWdaParams)
5957 {
5958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 VOS_ASSERT(0);
5961 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005962 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 return VOS_STATUS_E_NOMEM;
5964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005966 /*
5967 Since firmware is not using highperformance flag, we have removed
5968 this flag from wdiEDCAInfo structure to match sizeof the structure
5969 between host and firmware.In future if we are planning to use
5970 highperformance flag then Please define this flag in wdiEDCAInfo
5971 structure, update it here and send it to firmware. i.e.
5972 Following is the original line which we removed as part of the fix
5973 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5974 pEdcaParams->highPerformance;
5975 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5977 &pEdcaParams->acbe);
5978 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5979 &pEdcaParams->acbk);
5980 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5981 &pEdcaParams->acvi);
5982 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5983 &pEdcaParams->acvo);
5984 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 pWdaParams->pWdaContext = pWDA;
5986 /* Store remove key pointer, as this will be used for response */
5987 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 /* store Params pass it to WDI */
5989 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5991 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 if(IS_WDI_STATUS_FAILURE(status))
5993 {
5994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5995 "Failure in Update EDCA Params WDI API, free all the memory " );
5996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5997 vos_mem_free(pWdaParams);
5998 vos_mem_free(pEdcaParams);
5999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 return CONVERT_WDI2VOS_STATUS(status) ;
6001}
Jeff Johnson295189b2012-06-20 16:38:30 -07006002/*
6003 * FUNCTION: WDA_AddBAReqCallback
6004 * send ADD BA RSP back to PE
6005 */
6006void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6007 void* pUserData)
6008{
6009 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6010 tWDA_CbContext *pWDA;
6011 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006013 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306014 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 {
6016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006017 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 VOS_ASSERT(0) ;
6019 return ;
6020 }
6021 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306022 if (NULL == pWDA)
6023 {
6024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6025 "%s:pWDA is NULL", __func__);
6026 VOS_ASSERT(0);
6027 return ;
6028 }
6029
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6032 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006033 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 return ;
6036}
6037
Jeff Johnson295189b2012-06-20 16:38:30 -07006038/*
6039 * FUNCTION: WDA_ProcessAddBAReq
6040 * Request to WDI to Update the ADDBA REQ params.
6041 */
6042VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
6043 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
6044{
Jeff Johnson43971f52012-07-17 12:26:56 -07006045 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006046 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6047 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6048 sizeof(WDI_AddBAReqParamsType)) ;
6049 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006051 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 if(NULL == wdiAddBAReqParam)
6053 {
6054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006055 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 VOS_ASSERT(0);
6057 return VOS_STATUS_E_NOMEM;
6058 }
6059 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6060 if(NULL == pWdaParams)
6061 {
6062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 VOS_ASSERT(0);
6065 vos_mem_free(wdiAddBAReqParam);
6066 return VOS_STATUS_E_NOMEM;
6067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 do
6069 {
6070 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 wdiAddBaInfo->ucSTAIdx = staIdx ;
6072 wdiAddBaInfo->ucBaSessionID = baSessionID ;
6073 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 } while(0) ;
6075 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 pWdaParams->pWdaContext = pWDA;
6077 /* store Params pass it to WDI */
6078 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6079 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006080 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6081 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082
Jeff Johnson43971f52012-07-17 12:26:56 -07006083 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006084 {
6085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006086 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6087 status = CONVERT_WDI2VOS_STATUS(wstatus);
6088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 vos_mem_free(pWdaParams);
6090 pAddBAReqParams->status = eSIR_FAILURE;
6091 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6092 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006093 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006094}
Jeff Johnson295189b2012-06-20 16:38:30 -07006095/*
6096 * FUNCTION: WDA_AddBASessionReqCallback
6097 * send ADD BA SESSION RSP back to PE/(or TL)
6098 */
6099void WDA_AddBASessionReqCallback(
6100 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6101{
6102 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306104 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006105 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006107 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006108 if(NULL == pWdaParams)
6109 {
6110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006111 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 VOS_ASSERT(0) ;
6113 return ;
6114 }
6115 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306116 if (NULL == pWDA)
6117 {
6118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6119 "%s:pWDA is NULL", __func__);
6120 VOS_ASSERT(0);
6121 return ;
6122 }
6123
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006125 if( NULL == pAddBAReqParams )
6126 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006128 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6131 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 return ;
6133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6135 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 /*
6137 * if WDA in update TL state, update TL with BA session parama and send
6138 * another request to HAL(/WDI) (ADD_BA_REQ)
6139 */
6140
6141 if((VOS_STATUS_SUCCESS ==
6142 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6143 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6144 {
6145 /* Update TL with BA info received from HAL/WDI */
6146 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6147 wdiAddBaSession->usBaSessionID,
6148 wdiAddBaSession->ucSTAIdx,
6149 wdiAddBaSession->ucBaTID,
6150 wdiAddBaSession->ucBaBufferSize,
6151 wdiAddBaSession->ucWinSize,
6152 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6154 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6155 }
6156 else
6157 {
6158 pAddBAReqParams->status =
6159 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6160
6161 /* Setting Flag to indicate that Set BA is success */
6162 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6163 {
6164 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6165 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6166 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006168 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006170 /*Reset the WDA state to READY */
6171 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006172 return ;
6173}
6174
Jeff Johnson295189b2012-06-20 16:38:30 -07006175/*
6176 * FUNCTION: WDA_ProcessAddBASessionReq
6177 * Request to WDI to Update the ADDBA REQ params.
6178 */
6179VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6180 tAddBAParams *pAddBAReqParams)
6181{
6182 WDI_Status status = WDI_STATUS_SUCCESS ;
6183 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6184 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6185 sizeof(WDI_AddBASessionReqParamsType)) ;
6186 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006187 WLANTL_STAStateType tlSTAState = 0;
6188
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006190 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 if(NULL == wdiAddBASessionReqParam)
6192 {
6193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 VOS_ASSERT(0);
6196 return VOS_STATUS_E_NOMEM;
6197 }
6198 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6199 if(NULL == pWdaParams)
6200 {
6201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 VOS_ASSERT(0);
6204 vos_mem_free(wdiAddBASessionReqParam);
6205 return VOS_STATUS_E_NOMEM;
6206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 /*
6208 * Populate ADD BA parameters and pass these paarmeters to WDI.
6209 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6210 * the state to track if these is BA recipient case or BA initiator
6211 * case.
6212 */
6213 do
6214 {
6215 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6216 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6217 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6218 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6219 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6220 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6221 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006222 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6224 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6225 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6226 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6227 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 /* check the BA direction and update state accordingly */
6229 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6230 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6231 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6232
6233 }while(0) ;
6234 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 pWdaParams->pWdaContext = pWDA;
6236 /* Store ADD BA pointer, as this will be used for response */
6237 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6238 /* store Params pass it to WDI */
6239 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006240
6241 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6242 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6243 */
6244 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6245 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6246 {
6247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006248 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006249 status = WDI_STATUS_E_NOT_ALLOWED;
6250 pAddBAReqParams->status =
6251 CONVERT_WDI2SIR_STATUS(status) ;
6252 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6253 /*Reset the WDA state to READY */
6254 pWDA->wdaState = WDA_READY_STATE;
6255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6256 vos_mem_free(pWdaParams);
6257
6258 return CONVERT_WDI2VOS_STATUS(status) ;
6259 }
6260
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6262 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006263 if(IS_WDI_STATUS_FAILURE(status))
6264 {
6265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006266 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006268 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006269 pAddBAReqParams->status =
6270 CONVERT_WDI2SIR_STATUS(status) ;
6271 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006272 /*Reset the WDA state to READY */
6273 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 vos_mem_free(pWdaParams);
6276 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006278}
Jeff Johnson295189b2012-06-20 16:38:30 -07006279/*
6280 * FUNCTION: WDA_DelBANotifyTL
6281 * send DEL BA IND to TL
6282 */
6283void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6284 tDelBAParams *pDelBAReqParams)
6285{
6286 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6287 //tSirMsgQ msg;
6288 vos_msg_t vosMsg;
6289 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006290 if(NULL == pDelBAInd)
6291 {
6292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 VOS_ASSERT(0) ;
6295 return;
6296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6298 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6299 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6300 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006301
Jeff Johnson295189b2012-06-20 16:38:30 -07006302
6303 vosMsg.type = WDA_DELETEBA_IND;
6304 vosMsg.bodyptr = pDelBAInd;
6305 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6306 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6307 {
6308 vosStatus = VOS_STATUS_E_BADMSG;
6309 }
6310}
Jeff Johnson295189b2012-06-20 16:38:30 -07006311/*
6312 * FUNCTION: WDA_DelBAReqCallback
6313 * send DEL BA RSP back to PE
6314 */
6315void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6316{
6317 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6318 tWDA_CbContext *pWDA;
6319 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006321 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 if(NULL == pWdaParams)
6323 {
6324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006325 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 VOS_ASSERT(0) ;
6327 return ;
6328 }
6329 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306330
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 /* Notify TL about DEL BA in case of recipinet */
6333 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6334 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6335 {
6336 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 /*
6339 * No respone required for WDA_DELBA_IND so just free the request
6340 * param here
6341 */
6342 vos_mem_free(pDelBAReqParams);
6343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6344 vos_mem_free(pWdaParams);
6345 return ;
6346}
6347
Jeff Johnson295189b2012-06-20 16:38:30 -07006348/*
6349 * FUNCTION: WDA_ProcessDelBAReq
6350 * Request to WDI to Update the DELBA REQ params.
6351 */
6352VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6353 tDelBAParams *pDelBAReqParams)
6354{
6355 WDI_Status status = WDI_STATUS_SUCCESS ;
6356 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6357 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6358 sizeof(WDI_DelBAReqParamsType)) ;
6359 tWDA_ReqParams *pWdaParams ;
6360 tANI_U16 staIdx = 0;
6361 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006363 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 if(NULL == wdiDelBAReqParam)
6365 {
6366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 VOS_ASSERT(0);
6369 return VOS_STATUS_E_NOMEM;
6370 }
6371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6372 if(NULL == pWdaParams)
6373 {
6374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 VOS_ASSERT(0);
6377 vos_mem_free(wdiDelBAReqParam);
6378 return VOS_STATUS_E_NOMEM;
6379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6381 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6382 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6383 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006384 pWdaParams->pWdaContext = pWDA;
6385 /* Store DEL BA pointer, as this will be used for response */
6386 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 /* store Params pass it to WDI */
6388 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6390 * maintained in WDA, so that WDA can retry for another BA session
6391 */
6392 staIdx = pDelBAReqParams->staIdx;
6393 tid = pDelBAReqParams->baTID;
6394 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006395 status = WDI_DelBAReq(wdiDelBAReqParam,
6396 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006397 if(IS_WDI_STATUS_FAILURE(status))
6398 {
6399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6400 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6402 vos_mem_free(pWdaParams->wdaMsgParam);
6403 vos_mem_free(pWdaParams);
6404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006406}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006407
6408/*
6409 * FUNCTION: WDA_UpdateChReqCallback
6410 *
6411 */
6412void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6413{
Siddharth Bhala006c122014-05-03 12:13:27 +05306414 tWDA_ReqParams *pWdaParams;
6415 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6416 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6417 WDI_UpdateChannelReqinfoType *pChanInfoType;
6418 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006419
6420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6421 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306422 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006423 {
6424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306425 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006426 VOS_ASSERT(0);
6427 return;
6428 }
6429
Siddharth Bhala006c122014-05-03 12:13:27 +05306430 pWdaParams = (tWDA_ReqParams *)pUserData;
6431 pwdiUpdateChReqParam =
6432 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6433 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6434 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6435 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006436 /*
6437 * currently there is no response message is expected between PE and
6438 * WDA, Failure return from WDI is a ASSERT condition
6439 */
6440 vos_mem_free(pChanInfoType);
6441 vos_mem_free(pChanList);
6442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6443 vos_mem_free(pWdaParams);
6444
6445 return;
6446}
6447
6448/*
6449 * FUNCTION: WDA_ProcessUpdateChannelList
6450 * Request to WDI to Update the ChannelList params.
6451 */
6452VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6453 tSirUpdateChanList *pChanList)
6454{
6455 WDI_Status status = WDI_STATUS_SUCCESS;
6456 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6457 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6458 WDI_UpdateChannelReqinfoType *pChanInfoType;
6459 tWDA_ReqParams *pWdaParams;
6460 wpt_uint8 i;
6461
6462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6463 "------> %s " ,__func__);
6464 if(NULL == pChanList)
6465 {
6466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6467 "%s: NULL pChanList", __func__);
6468 VOS_ASSERT(0);
6469 return VOS_STATUS_E_INVAL;
6470 }
6471
6472 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6473 {
6474 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6475 "Update channel list capability Not Supported");
6476 vos_mem_free(pChanList);
6477 return VOS_STATUS_E_INVAL;
6478 }
6479
6480 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6481 sizeof(WDI_UpdateChReqParamsType));
6482 if(NULL == pwdiUpdateChReqParam)
6483 {
6484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6485 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6486 __func__);
6487 VOS_ASSERT(0);
6488 vos_mem_free(pChanList);
6489 return VOS_STATUS_E_NOMEM;
6490 }
6491 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6492 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6493 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6494 pChanList->numChan);
6495 if(NULL == pChanInfoType)
6496 {
6497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6498 "%s: VOS MEM Alloc Failure", __func__);
6499 VOS_ASSERT(0);
6500 vos_mem_free(pChanList);
6501 vos_mem_free(pwdiUpdateChReqParam);
6502 return VOS_STATUS_E_NOMEM;
6503 }
6504 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6505 * pChanList->numChan);
6506 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6507
6508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6509 if(NULL == pWdaParams)
6510 {
6511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6512 "%s: VOS MEM Alloc Failure", __func__);
6513 VOS_ASSERT(0);
6514 vos_mem_free(pChanList);
6515 vos_mem_free(pChanInfoType);
6516 vos_mem_free(pwdiUpdateChReqParam);
6517 return VOS_STATUS_E_NOMEM;
6518 }
6519 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6520
6521 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6522 {
6523 pChanInfoType->mhz =
6524 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6525
6526 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6527 pChanInfoType->band_center_freq2 = 0;
6528
6529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6530 "chan[%d] = %u", i, pChanInfoType->mhz);
6531 if (pChanList->chanParam[i].dfsSet)
6532 {
6533 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6535 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6536 pChanList->chanParam[i].dfsSet);
6537 }
6538
6539 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6540 {
6541 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6542 }
6543 else
6544 {
6545 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6546 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6547 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6548 }
6549
6550 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6551 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6552
6553 pChanInfoType++;
6554 }
6555
6556 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6557 pWdaParams->pWdaContext = pWDA;
6558 pWdaParams->wdaMsgParam = (void *)pChanList;
6559 /* store Params pass it to WDI */
6560 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6561 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6562 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6563 if(IS_WDI_STATUS_FAILURE(status))
6564 {
6565 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6566 "Failure in Update Channel REQ Params WDI API, free all the memory");
6567 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6568 vos_mem_free(pwdiUpdateChReqParam);
6569 vos_mem_free(pWdaParams->wdaMsgParam);
6570 vos_mem_free(pWdaParams);
6571 }
6572 return CONVERT_WDI2VOS_STATUS(status);
6573}
6574
Jeff Johnson295189b2012-06-20 16:38:30 -07006575/*
6576 * FUNCTION: WDA_AddTSReqCallback
6577 * send ADD TS RSP back to PE
6578 */
6579void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6580{
6581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306582 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 tAddTsParams *pAddTsReqParams;
6584
6585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006586 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006587 if(NULL == pWdaParams)
6588 {
6589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006590 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 VOS_ASSERT(0) ;
6592 return ;
6593 }
6594 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306595 if (NULL == pWDA)
6596 {
6597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6598 "%s:pWDA is NULL", __func__);
6599 VOS_ASSERT(0);
6600 return ;
6601 }
6602
Jeff Johnson295189b2012-06-20 16:38:30 -07006603 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6605 vos_mem_free(pWdaParams);
6606
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006607 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006608 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 return ;
6610}
6611
Jeff Johnson295189b2012-06-20 16:38:30 -07006612/*
6613 * FUNCTION: WDA_ProcessAddTSReq
6614 * Request to WDI to Update the ADD TS REQ params.
6615 */
6616VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6617 tAddTsParams *pAddTsReqParams)
6618{
6619 WDI_Status status = WDI_STATUS_SUCCESS ;
6620 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6621 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6622 sizeof(WDI_AddTSReqParamsType)) ;
6623 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006625 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006626 if(NULL == wdiAddTSReqParam)
6627 {
6628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006630 VOS_ASSERT(0);
6631 return VOS_STATUS_E_NOMEM;
6632 }
6633 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6634 if(NULL == pWdaParams)
6635 {
6636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 VOS_ASSERT(0);
6639 vos_mem_free(wdiAddTSReqParam);
6640 return VOS_STATUS_E_NOMEM;
6641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006642 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6643 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006644 //TS IE
6645 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6646 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6647 pAddTsReqParams->tspec.length;
6648
6649 //TS IE : TS INFO : TRAFFIC
6650 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6651 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6652 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6653 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6654 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6655 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6656 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6657 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6658 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6659 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6660 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6661 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6662 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6663 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6664 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6665 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6666
6667 //TS IE : TS INFO : SCHEDULE
6668 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6669 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6670 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6671 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006672 //TS IE
6673 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6674 pAddTsReqParams->tspec.nomMsduSz;
6675 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6676 pAddTsReqParams->tspec.maxMsduSz;
6677 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6678 pAddTsReqParams->tspec.minSvcInterval;
6679 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6680 pAddTsReqParams->tspec.maxSvcInterval;
6681 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6682 pAddTsReqParams->tspec.inactInterval;
6683 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6684 pAddTsReqParams->tspec.suspendInterval;
6685 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6686 pAddTsReqParams->tspec.svcStartTime;
6687 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6688 pAddTsReqParams->tspec.minDataRate;
6689 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6690 pAddTsReqParams->tspec.meanDataRate;
6691 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6692 pAddTsReqParams->tspec.peakDataRate;
6693 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6694 pAddTsReqParams->tspec.maxBurstSz;
6695 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6696 pAddTsReqParams->tspec.delayBound;
6697 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6698 pAddTsReqParams->tspec.minPhyRate;
6699 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6700 pAddTsReqParams->tspec.surplusBw;
6701 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6702 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 /* TODO: tAddTsParams doesn't have the following fields */
6704#if 0
6705 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6706 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6707 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6708 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6709#endif
6710 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6711
6712 pWdaParams->pWdaContext = pWDA;
6713 /* Store ADD TS pointer, as this will be used for response */
6714 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 /* store Params pass it to WDI */
6716 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 status = WDI_AddTSReq(wdiAddTSReqParam,
6718 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 if(IS_WDI_STATUS_FAILURE(status))
6720 {
6721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6722 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6724 vos_mem_free(pWdaParams);
6725 pAddTsReqParams->status = eSIR_FAILURE ;
6726 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006729}
6730
Jeff Johnson295189b2012-06-20 16:38:30 -07006731/*
6732 * FUNCTION: WDA_DelTSReqCallback
6733 * send DEL TS RSP back to PE
6734 */
6735void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6736{
6737 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6741 vos_mem_free(pWdaParams->wdaMsgParam) ;
6742 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 /*
6744 * No respone required for WDA_DEL_TS_REQ so just free the request
6745 * param here
6746 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 return ;
6748}
6749
Jeff Johnson295189b2012-06-20 16:38:30 -07006750/*
6751 * FUNCTION: WDA_ProcessDelTSReq
6752 * Request to WDI to Update the DELTS REQ params.
6753 */
6754VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6755 tDelTsParams *pDelTSReqParams)
6756{
6757 WDI_Status status = WDI_STATUS_SUCCESS ;
6758 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6759 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6760 sizeof(WDI_DelTSReqParamsType)) ;
6761 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006763 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006764 if(NULL == wdiDelTSReqParam)
6765 {
6766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006767 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 VOS_ASSERT(0);
6769 return VOS_STATUS_E_NOMEM;
6770 }
6771 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6772 if(NULL == pWdaParams)
6773 {
6774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 VOS_ASSERT(0);
6777 vos_mem_free(wdiDelTSReqParam);
6778 return VOS_STATUS_E_NOMEM;
6779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6781 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6782 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6783 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6784 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 pWdaParams->pWdaContext = pWDA;
6786 /* Store DEL TS pointer, as this will be used for response */
6787 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 /* store Params pass it to WDI */
6789 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 status = WDI_DelTSReq(wdiDelTSReqParam,
6791 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 if(IS_WDI_STATUS_FAILURE(status))
6793 {
6794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6795 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6797 vos_mem_free(pWdaParams->wdaMsgParam);
6798 vos_mem_free(pWdaParams);
6799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006801}
Jeff Johnson295189b2012-06-20 16:38:30 -07006802/*
6803 * FUNCTION: WDA_UpdateBeaconParamsCallback
6804 * Free the memory. No need to send any response to PE in this case
6805 */
6806void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6807{
6808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006810 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 if(NULL == pWdaParams)
6812 {
6813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006814 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 VOS_ASSERT(0) ;
6816 return ;
6817 }
6818 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6819 vos_mem_free(pWdaParams->wdaMsgParam) ;
6820 vos_mem_free(pWdaParams);
6821 /*
6822 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6823 * param here
6824 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 return ;
6826}
Jeff Johnson295189b2012-06-20 16:38:30 -07006827/*
6828 * FUNCTION: WDA_ProcessUpdateBeaconParams
6829 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6830 */
6831VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6832 tUpdateBeaconParams *pUpdateBeaconParams)
6833{
6834 WDI_Status status = WDI_STATUS_SUCCESS ;
6835 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6836 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6837 sizeof(WDI_UpdateBeaconParamsType)) ;
6838 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006840 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 if(NULL == wdiUpdateBeaconParams)
6842 {
6843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 VOS_ASSERT(0);
6846 return VOS_STATUS_E_NOMEM;
6847 }
6848 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6849 if(NULL == pWdaParams)
6850 {
6851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006852 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 VOS_ASSERT(0);
6854 vos_mem_free(wdiUpdateBeaconParams);
6855 return VOS_STATUS_E_NOMEM;
6856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6858 pUpdateBeaconParams->bssIdx;
6859 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6860 pUpdateBeaconParams->fShortPreamble;
6861 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6862 pUpdateBeaconParams->fShortSlotTime;
6863 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6864 pUpdateBeaconParams->beaconInterval;
6865 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6866 pUpdateBeaconParams->llaCoexist;
6867 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6868 pUpdateBeaconParams->llbCoexist;
6869 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6870 pUpdateBeaconParams->llgCoexist;
6871 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6872 pUpdateBeaconParams->ht20MhzCoexist;
6873 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6874 pUpdateBeaconParams->llnNonGFCoexist;
6875 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6876 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6877 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6878 pUpdateBeaconParams->fRIFSMode;
6879 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6880 pUpdateBeaconParams->paramChangeBitmap;
6881 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6882
6883 pWdaParams->pWdaContext = pWDA;
6884 /* Store UpdateBeacon Req pointer, as this will be used for response */
6885 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006886 /* store Params pass it to WDI */
6887 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6889 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6890 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 if(IS_WDI_STATUS_FAILURE(status))
6892 {
6893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6894 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6896 vos_mem_free(pWdaParams->wdaMsgParam);
6897 vos_mem_free(pWdaParams);
6898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006900}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006901#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006902/*
6903 * FUNCTION: WDA_TSMStatsReqCallback
6904 * send TSM Stats RSP back to PE
6905 */
6906void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6907{
6908 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6909 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006910 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6911 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006912
6913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006914 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006915 if(NULL == pWdaParams)
6916 {
6917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006918 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 VOS_ASSERT(0) ;
6920 return ;
6921 }
6922 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306923 if (NULL == pWDA)
6924 {
6925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6926 "%s:pWDA is NULL", __func__);
6927 VOS_ASSERT(0);
6928 return ;
6929 }
6930
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006931 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6932
6933 if(NULL == pGetTsmStatsReqParams)
6934 {
6935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6936 "%s: pGetTsmStatsReqParams received NULL", __func__);
6937 VOS_ASSERT(0);
6938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6939 vos_mem_free(pWdaParams);
6940 return;
6941 }
6942
6943 pTsmRspParams =
6944 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 if( NULL == pTsmRspParams )
6946 {
6947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006948 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006949 VOS_ASSERT( 0 );
6950 return ;
6951 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006952 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6953 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6954 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6955
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6957 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6958 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6959 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6960 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6961 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6962 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6963 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6964 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6965 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006966
6967 /* Assign get tsm stats req req (backup) in to the response */
6968 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6969
6970 /* free WDI command buffer */
6971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6972 vos_mem_free(pWdaParams);
6973
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006975 return ;
6976}
6977
6978
Jeff Johnson295189b2012-06-20 16:38:30 -07006979/*
6980 * FUNCTION: WDA_ProcessTsmStatsReq
6981 * Request to WDI to get the TSM Stats params.
6982 */
6983VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006984 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006985{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006986 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006988 tWDA_ReqParams *pWdaParams = NULL;
6989 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6990
Jeff Johnson295189b2012-06-20 16:38:30 -07006991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006992 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6994 sizeof(WDI_TSMStatsReqParamsType));
6995 if(NULL == wdiTSMReqParam)
6996 {
6997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 VOS_ASSERT(0);
7000 return VOS_STATUS_E_NOMEM;
7001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007002 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7003 if(NULL == pWdaParams)
7004 {
7005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007006 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 VOS_ASSERT(0);
7008 vos_mem_free(wdiTSMReqParam);
7009 return VOS_STATUS_E_NOMEM;
7010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007011 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7012 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7013 pTsmStats->bssId,
7014 sizeof(wpt_macAddr));
7015 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7016
7017 pWdaParams->pWdaContext = pWDA;
7018 /* Store TSM Stats pointer, as this will be used for response */
7019 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007020 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 status = WDI_TSMStatsReq(wdiTSMReqParam,
7022 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 if(IS_WDI_STATUS_FAILURE(status))
7024 {
7025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7026 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007027 vos_mem_free(pWdaParams);
7028
7029 pGetTsmStatsRspParams =
7030 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7031 if(NULL == pGetTsmStatsRspParams)
7032 {
7033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7034 "%s: VOS MEM Alloc Failure", __func__);
7035 VOS_ASSERT(0);
7036 vos_mem_free(pTsmStats);
7037 return VOS_STATUS_E_NOMEM;
7038 }
7039 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7040 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7041 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7042
7043 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 return CONVERT_WDI2VOS_STATUS(status) ;
7046}
7047#endif
7048/*
7049 * FUNCTION: WDA_SendBeaconParamsCallback
7050 * No need to send any response to PE in this case
7051 */
7052void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7053{
7054
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007056 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 return ;
7058}
Jeff Johnson295189b2012-06-20 16:38:30 -07007059/*
7060 * FUNCTION: WDA_ProcessSendBeacon
7061 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7062 * start beacon trasmission
7063 */
7064VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7065 tSendbeaconParams *pSendbeaconParams)
7066{
7067 WDI_Status status = WDI_STATUS_SUCCESS ;
7068 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007070 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7072 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7073 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7074 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7076 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307077 /* p2pIeOffset should be atleast greater than timIeOffset */
7078 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7079 (pSendbeaconParams->p2pIeOffset <
7080 pSendbeaconParams->timIeOffset))
7081 {
7082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7083 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7084 VOS_ASSERT( 0 );
7085 return WDI_STATUS_E_FAILURE;
7086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7088 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007089 /* Copy the beacon template to local buffer */
7090 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7091 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7092 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7093
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7095 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 if(IS_WDI_STATUS_FAILURE(status))
7097 {
7098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7099 "Failure in SEND BEACON REQ Params WDI API" );
7100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 vos_mem_free(pSendbeaconParams);
7102 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007103}
Jeff Johnson295189b2012-06-20 16:38:30 -07007104/*
7105 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7106 * No need to send any response to PE in this case
7107 */
7108void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7109{
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007111 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 return ;
7113}
7114
Jeff Johnson295189b2012-06-20 16:38:30 -07007115/*
7116 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7117 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7118 * send probe response
7119 */
7120VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7121 tSendProbeRespParams *pSendProbeRspParams)
7122{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007123 WDI_Status status = WDI_STATUS_SUCCESS;
7124 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7125 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007127 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007128
7129 if (!wdiSendProbeRspParam)
7130 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7131
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007133 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007134 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007135 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 /* Copy the Probe Response template to local buffer */
7138 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007139 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 pSendProbeRspParams->pProbeRespTemplate,
7141 pSendProbeRspParams->probeRespTemplateLen);
7142 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007143 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7145 WDI_PROBE_REQ_BITMAP_IE_LEN);
7146
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007147 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007148
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007149 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 if(IS_WDI_STATUS_FAILURE(status))
7152 {
7153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7154 "Failure in SEND Probe RSP Params WDI API" );
7155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007157 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007159}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007160#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007161/*
7162 * FUNCTION: WDA_SetMaxTxPowerCallBack
7163 * send the response to PE with power value received from WDI
7164 */
7165void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7166 void* pUserData)
7167{
7168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7169 tWDA_CbContext *pWDA = NULL;
7170 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7171
7172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007173 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007174 if(NULL == pWdaParams)
7175 {
7176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007177 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 VOS_ASSERT(0) ;
7179 return ;
7180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307182 if (NULL == pWDA)
7183 {
7184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7185 "%s:pWDA is NULL", __func__);
7186 VOS_ASSERT(0);
7187 return ;
7188 }
7189
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 if( NULL == pMaxTxPowerParams )
7192 {
7193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007194 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007195 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7197 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 return ;
7199 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007200
Jeff Johnson295189b2012-06-20 16:38:30 -07007201
7202 /*need to free memory for the pointers used in the
7203 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7205 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007207
Jeff Johnson295189b2012-06-20 16:38:30 -07007208
7209 /* send response to UMAC*/
7210 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7211
7212 return;
7213}
Jeff Johnson295189b2012-06-20 16:38:30 -07007214/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007215 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 * Request to WDI to send set Max Tx Power Request
7217 */
7218 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7219 tMaxTxPowerParams *MaxTxPowerParams)
7220{
7221 WDI_Status status = WDI_STATUS_SUCCESS;
7222 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7223 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007224
Jeff Johnson295189b2012-06-20 16:38:30 -07007225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007226 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007227
Jeff Johnson295189b2012-06-20 16:38:30 -07007228 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7229 sizeof(WDI_SetMaxTxPowerParamsType));
7230 if(NULL == wdiSetMaxTxPowerParams)
7231 {
7232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007233 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007234 VOS_ASSERT(0);
7235 return VOS_STATUS_E_NOMEM;
7236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7238 if(NULL == pWdaParams)
7239 {
7240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007242 vos_mem_free(wdiSetMaxTxPowerParams);
7243 VOS_ASSERT(0);
7244 return VOS_STATUS_E_NOMEM;
7245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007246 /* Copy.Max.Tx.Power Params to WDI structure */
7247 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7248 MaxTxPowerParams->bssId,
7249 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7251 MaxTxPowerParams->selfStaMacAddr,
7252 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007253 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7254 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 pWdaParams->pWdaContext = pWDA;
7257 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007258 /* store Params pass it to WDI */
7259 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7261 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007262 if(IS_WDI_STATUS_FAILURE(status))
7263 {
7264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7265 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7267 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007268 /* send response to UMAC*/
7269 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 }
7271 return CONVERT_WDI2VOS_STATUS(status);
7272
7273}
Jeff Johnson295189b2012-06-20 16:38:30 -07007274#endif
schang86c22c42013-03-13 18:41:24 -07007275
7276/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007277 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7278 * send the response to PE with power value received from WDI
7279 */
7280void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7281 *pwdiSetMaxTxPowerPerBandRsp,
7282 void* pUserData)
7283{
7284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7285 tWDA_CbContext *pWDA = NULL;
7286 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7287
7288 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7289 "<------ %s ", __func__);
7290 if (NULL == pWdaParams)
7291 {
7292 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7293 "%s: pWdaParams received NULL", __func__);
7294 VOS_ASSERT(0);
7295 return ;
7296 }
7297 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307298 if (NULL == pWDA)
7299 {
7300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7301 "%s:pWDA is NULL", __func__);
7302 VOS_ASSERT(0);
7303 return ;
7304 }
7305
Arif Hussaina5ebce02013-08-09 15:09:58 -07007306 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7307 if ( NULL == pMxTxPwrPerBandParams )
7308 {
7309 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7310 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7311 VOS_ASSERT(0);
7312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7313 vos_mem_free(pWdaParams);
7314 return;
7315 }
7316
7317 /*need to free memory for the pointers used in the
7318 WDA Process.Set Max Tx Power Req function*/
7319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7320 vos_mem_free(pWdaParams);
7321 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7322
7323 /* send response to UMAC*/
7324 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7325 pMxTxPwrPerBandParams, 0);
7326
7327 return;
7328}
7329
7330/*
7331 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7332 * Request to WDI to send set Max Tx Power Per band Request
7333 */
7334 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7335 tMaxTxPowerPerBandParams
7336 *MaxTxPowerPerBandParams)
7337{
7338 WDI_Status status = WDI_STATUS_SUCCESS;
7339 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7340 tWDA_ReqParams *pWdaParams = NULL;
7341
7342 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7343 "------> %s ", __func__);
7344
7345 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7346 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7347
7348 if (NULL == wdiSetMxTxPwrPerBandParams)
7349 {
7350 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7351 "%s: VOS MEM Alloc Failure", __func__);
7352 VOS_ASSERT(0);
7353 return VOS_STATUS_E_NOMEM;
7354 }
7355 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7356 if (NULL == pWdaParams)
7357 {
7358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7359 "%s: VOS MEM Alloc Failure", __func__);
7360 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7361 VOS_ASSERT(0);
7362 return VOS_STATUS_E_NOMEM;
7363 }
7364 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7365 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7366 MaxTxPowerPerBandParams->bandInfo;
7367 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7368 MaxTxPowerPerBandParams->power;
7369 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7370 pWdaParams->pWdaContext = pWDA;
7371 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7372 /* store Params pass it to WDI */
7373 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7374 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7375 WDA_SetMaxTxPowerPerBandCallBack,
7376 pWdaParams);
7377 if (IS_WDI_STATUS_FAILURE(status))
7378 {
7379 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7380 "Failure in SET MAX TX Power REQ Params WDI API,"
7381 " free all the memory");
7382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7383 vos_mem_free(pWdaParams);
7384 /* send response to UMAC*/
7385 WDA_SendMsg(pWDA,
7386 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7387 MaxTxPowerPerBandParams, 0);
7388 }
7389 return CONVERT_WDI2VOS_STATUS(status);
7390}
7391
7392/*
schang86c22c42013-03-13 18:41:24 -07007393 * FUNCTION: WDA_SetTxPowerCallBack
7394 * send the response to PE with power value received from WDI
7395 */
7396void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7397 void* pUserData)
7398{
7399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7400 tWDA_CbContext *pWDA = NULL;
7401 tSirSetTxPowerReq *pTxPowerParams = NULL;
7402
7403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7404 "<------ %s ", __func__);
7405 if(NULL == pWdaParams)
7406 {
7407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7408 "%s: pWdaParams received NULL", __func__);
7409 VOS_ASSERT(0) ;
7410 return ;
7411 }
7412 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307413 if (NULL == pWDA)
7414 {
7415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7416 "%s:pWDA is NULL", __func__);
7417 VOS_ASSERT(0);
7418 return ;
7419 }
7420
schang86c22c42013-03-13 18:41:24 -07007421 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7422 if(NULL == pTxPowerParams)
7423 {
7424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7425 "%s: pTxPowerParams received NULL " ,__func__);
7426 VOS_ASSERT(0);
7427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7428 vos_mem_free(pWdaParams);
7429 return ;
7430 }
7431
7432 /*need to free memory for the pointers used in the
7433 WDA Process.Set Max Tx Power Req function*/
7434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7435 vos_mem_free(pWdaParams);
7436
7437 /* send response to UMAC*/
7438 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7439 return;
7440}
7441
7442/*
7443 * FUNCTION: WDA_ProcessSetTxPowerReq
7444 * Request to WDI to send set Tx Power Request
7445 */
7446 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7447 tSirSetTxPowerReq *txPowerParams)
7448{
7449 WDI_Status status = WDI_STATUS_SUCCESS;
7450 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7451 tWDA_ReqParams *pWdaParams = NULL;
7452
7453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7454 "------> %s ", __func__);
7455
7456 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7457 sizeof(WDI_SetTxPowerParamsType));
7458 if(NULL == wdiSetTxPowerParams)
7459 {
7460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7461 "%s: VOS MEM Alloc Failure", __func__);
7462 VOS_ASSERT(0);
7463 return VOS_STATUS_E_NOMEM;
7464 }
7465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7466 if(NULL == pWdaParams)
7467 {
7468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7469 "%s: VOS MEM Alloc Failure", __func__);
7470 vos_mem_free(wdiSetTxPowerParams);
7471 VOS_ASSERT(0);
7472 return VOS_STATUS_E_NOMEM;
7473 }
7474 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7475 txPowerParams->bssIdx;
7476 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7477 txPowerParams->mwPower;
7478 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7479 pWdaParams->pWdaContext = pWDA;
7480 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7481 /* store Params pass it to WDI */
7482 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7483 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7484 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7485 if(IS_WDI_STATUS_FAILURE(status))
7486 {
7487 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7488 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7490 vos_mem_free(pWdaParams);
7491 /* send response to UMAC*/
7492 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7493 }
7494 return CONVERT_WDI2VOS_STATUS(status);
7495}
7496
Jeff Johnson295189b2012-06-20 16:38:30 -07007497/*
7498 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7499 * Free the memory. No need to send any response to PE in this case
7500 */
7501void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7502{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007503 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7504
Jeff Johnson295189b2012-06-20 16:38:30 -07007505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007506 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007507
7508 if(NULL == pWdaParams)
7509 {
7510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007511 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007512 VOS_ASSERT(0) ;
7513 return ;
7514 }
7515
7516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7517 vos_mem_free(pWdaParams->wdaMsgParam) ;
7518 vos_mem_free(pWdaParams);
7519
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 /*
7521 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7522 * so just free the request param here
7523 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 return ;
7525}
7526
Jeff Johnson295189b2012-06-20 16:38:30 -07007527/*
7528 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7529 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7530 */
7531VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7532 tP2pPsParams *pP2pPsConfigParams)
7533{
7534 WDI_Status status = WDI_STATUS_SUCCESS ;
7535 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7536 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7537 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007538 tWDA_ReqParams *pWdaParams = NULL;
7539
Jeff Johnson295189b2012-06-20 16:38:30 -07007540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007541 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007542 if(NULL == wdiSetP2PGONOAReqParam)
7543 {
7544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007545 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 VOS_ASSERT(0);
7547 return VOS_STATUS_E_NOMEM;
7548 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007549
7550 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7551 if(NULL == pWdaParams)
7552 {
7553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007554 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007555 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007556 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007557 VOS_ASSERT(0);
7558 return VOS_STATUS_E_NOMEM;
7559 }
7560
Jeff Johnson295189b2012-06-20 16:38:30 -07007561 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7562 pP2pPsConfigParams->opp_ps;
7563 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7564 pP2pPsConfigParams->ctWindow;
7565 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7566 pP2pPsConfigParams->count;
7567 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7568 pP2pPsConfigParams->duration;
7569 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7570 pP2pPsConfigParams->interval;
7571 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7572 pP2pPsConfigParams->single_noa_duration;
7573 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7574 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007575
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7577 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007578 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7579
Jeff Johnson295189b2012-06-20 16:38:30 -07007580 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007581 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7582 pWdaParams->pWdaContext = pWDA;
7583
Jeff Johnson295189b2012-06-20 16:38:30 -07007584 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007585 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7586
Jeff Johnson295189b2012-06-20 16:38:30 -07007587 if(IS_WDI_STATUS_FAILURE(status))
7588 {
7589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7590 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7592 vos_mem_free(pWdaParams->wdaMsgParam);
7593 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007595 return CONVERT_WDI2VOS_STATUS(status);
7596
Jeff Johnson295189b2012-06-20 16:38:30 -07007597}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307598
7599#ifdef FEATURE_WLAN_TDLS
7600/*
7601 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7602 * Free the memory. No need to send any response to PE in this case
7603 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307604void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7605 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307606{
7607 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7608 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307609 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307610
7611
7612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7613 "<------ %s " ,__func__);
7614 if(NULL == pWdaParams)
7615 {
7616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7617 "%s: pWdaParams received NULL", __func__);
7618 VOS_ASSERT(0) ;
7619 return ;
7620 }
7621 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7622
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307623 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307624 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7626 "%s:pWDA is NULL", __func__);
7627 VOS_ASSERT(0);
7628 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307629 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307630
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307631 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7632 if( NULL == pTdlsLinkEstablishParams )
7633 {
7634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7635 "%s: pTdlsLinkEstablishParams "
7636 "received NULL " ,__func__);
7637 VOS_ASSERT(0);
7638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7639 vos_mem_free(pWdaParams);
7640 return ;
7641 }
7642 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7643 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307644 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307645 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307646 /* send response to UMAC*/
7647 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7648
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307649 return ;
7650}
7651
7652VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7653 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7654{
7655 WDI_Status status = WDI_STATUS_SUCCESS ;
7656 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7657 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7658 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7659 tWDA_ReqParams *pWdaParams = NULL;
7660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7661 "------> %s " ,__func__);
7662 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7663 {
7664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7665 "%s: VOS MEM Alloc Failure", __func__);
7666 VOS_ASSERT(0);
7667 return VOS_STATUS_E_NOMEM;
7668 }
7669 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7670 if(NULL == pWdaParams)
7671 {
7672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7673 "%s: VOS MEM Alloc Failure", __func__);
7674 vos_mem_free(pTdlsLinkEstablishParams);
7675 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7676 VOS_ASSERT(0);
7677 return VOS_STATUS_E_NOMEM;
7678 }
7679 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307680 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307681 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307682 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307683 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307684 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307685 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307686 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307687 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307688 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307689 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7690 pTdlsLinkEstablishParams->isOffChannelSupported;
7691
7692 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7693 pTdlsLinkEstablishParams->validChannels,
7694 pTdlsLinkEstablishParams->validChannelsLen);
7695
7696 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7697 pTdlsLinkEstablishParams->validChannelsLen;
7698
7699 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7700 pTdlsLinkEstablishParams->validOperClasses,
7701 pTdlsLinkEstablishParams->validOperClassesLen);
7702 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7703 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307704
7705 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7706 /* Store msg pointer from PE, as this will be used for response */
7707 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7708 /* store Params pass it to WDI */
7709 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7710 pWdaParams->pWdaContext = pWDA;
7711
7712 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7713 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7714 WDA_SetTDLSLinkEstablishReqParamsCallback,
7715 pWdaParams);
7716 if(IS_WDI_STATUS_FAILURE(status))
7717 {
7718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7719 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7721 vos_mem_free(pWdaParams->wdaMsgParam);
7722 vos_mem_free(pWdaParams);
7723 }
7724 return CONVERT_WDI2VOS_STATUS(status);
7725}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307726
7727// tdlsoffchan
7728void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7729 void* pUserData)
7730{
7731 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7732 tWDA_CbContext *pWDA = NULL;
7733 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7734
7735
7736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7737 "<------ %s " ,__func__);
7738 if(NULL == pWdaParams)
7739 {
7740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7741 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307742 VOS_ASSERT(0) ;
7743 return ;
7744 }
7745 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7746
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307747 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05307748 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7750 "%s:pWDA is NULL", __func__);
7751 VOS_ASSERT(0);
7752 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307753 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307754
Atul Mittalc0f739f2014-07-31 13:47:47 +05307755 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307756 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307757 {
7758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7759 "%s: pTdlsChanSwitchParams "
7760 "received NULL " ,__func__);
7761 VOS_ASSERT(0);
7762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7763 vos_mem_free(pWdaParams);
7764 return ;
7765 }
7766 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7767 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7769 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307770 /* send response to UMAC*/
7771 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307772
7773 return ;
7774}
7775VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7776 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7777{
7778 WDI_Status status = WDI_STATUS_SUCCESS ;
7779 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7780 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7781 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7782 tWDA_ReqParams *pWdaParams = NULL;
7783
7784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7785 "Enter: %s ",__func__);
7786 if(NULL == wdiSetTDLSChanSwitchReqParam)
7787 {
7788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7789 "%s: VOS MEM Alloc Failure", __func__);
7790 VOS_ASSERT(0);
7791 return VOS_STATUS_E_NOMEM;
7792 }
7793
7794 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7795 if(NULL == pWdaParams)
7796 {
7797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7798 "%s: VOS MEM Alloc Failure", __func__);
7799 vos_mem_free(pTdlsChanSwitchParams);
7800 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7801 VOS_ASSERT(0);
7802 return VOS_STATUS_E_NOMEM;
7803 }
7804 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7805 pTdlsChanSwitchParams->staIdx;
7806 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7807 pTdlsChanSwitchParams->tdlsSwMode;
7808 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7809 pTdlsChanSwitchParams->operClass;
7810 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7811 pTdlsChanSwitchParams->tdlsOffCh;
7812 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7813 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7814
7815
7816 /* Store msg pointer from PE, as this will be used for response */
7817 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7818 /* store Params pass it to WDI */
7819 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7820 pWdaParams->pWdaContext = pWDA;
7821 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7822 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7823 WDA_SetTDLSChanSwitchReqParamsCallback,
7824 pWdaParams);
7825 if(IS_WDI_STATUS_FAILURE(status))
7826 {
7827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7828 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7830 vos_mem_free(pWdaParams->wdaMsgParam);
7831 vos_mem_free(pWdaParams);
7832 }
7833 return CONVERT_WDI2VOS_STATUS(status);
7834}
7835#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307836
7837
Jeff Johnson295189b2012-06-20 16:38:30 -07007838#ifdef WLAN_FEATURE_VOWIFI_11R
7839/*
7840 * FUNCTION: WDA_AggrAddTSReqCallback
7841 * send ADD AGGREGATED TS RSP back to PE
7842 */
7843void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7844{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307846 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007847 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007848 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007850 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007851 if(NULL == pWdaParams)
7852 {
7853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007854 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007855 VOS_ASSERT(0) ;
7856 return ;
7857 }
7858
7859 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307860 if (NULL == pWDA)
7861 {
7862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7863 "%s:pWDA is NULL", __func__);
7864 VOS_ASSERT(0);
7865 return ;
7866 }
7867
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007868 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007869
7870 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7871 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007872 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007874 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007875
7876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7877 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007878 return ;
7879}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007880/*
7881 * FUNCTION: WDA_ProcessAddTSReq
7882 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7883 */
7884VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7885 tAggrAddTsParams *pAggrAddTsReqParams)
7886{
7887 WDI_Status status = WDI_STATUS_SUCCESS ;
7888 int i;
7889 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007890 tWDA_ReqParams *pWdaParams = NULL;
7891
7892
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007894 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007895 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7896 sizeof(WDI_AggrAddTSReqParamsType)) ;
7897 if(NULL == wdiAggrAddTSReqParam)
7898 {
7899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 VOS_ASSERT(0);
7902 return VOS_STATUS_E_NOMEM;
7903 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007904
7905
7906 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7907 if(NULL == pWdaParams)
7908 {
7909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007910 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007911 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007912 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007913 VOS_ASSERT(0);
7914 return VOS_STATUS_E_NOMEM;
7915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7917 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7918 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7920 {
7921 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7922 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7923 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007924 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7925 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7926 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7927 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7928 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7929 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7930 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7931 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7932 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7933 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7934 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7935 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7936 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7937 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7938 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7939 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007940 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7941 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7943 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7944 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7945 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7946 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7947 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7948 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7949 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7950 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7951 pAggrAddTsReqParams->tspec[i].inactInterval;
7952 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7953 pAggrAddTsReqParams->tspec[i].suspendInterval;
7954 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7955 pAggrAddTsReqParams->tspec[i].svcStartTime;
7956 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7957 pAggrAddTsReqParams->tspec[i].minDataRate;
7958 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7959 pAggrAddTsReqParams->tspec[i].meanDataRate;
7960 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7961 pAggrAddTsReqParams->tspec[i].peakDataRate;
7962 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7963 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7964 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7965 pAggrAddTsReqParams->tspec[i].delayBound;
7966 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7967 pAggrAddTsReqParams->tspec[i].minPhyRate;
7968 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7969 pAggrAddTsReqParams->tspec[i].surplusBw;
7970 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7971 pAggrAddTsReqParams->tspec[i].mediumTime;
7972 }
7973
7974 /* TODO: tAggrAddTsParams doesn't have the following fields */
7975#if 0
7976 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7977 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7978 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7979 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7980#endif
7981 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7982
7983 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007984 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007985 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007986 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7987
7988 pWdaParams->pWdaContext = pWDA;
7989
Jeff Johnson295189b2012-06-20 16:38:30 -07007990 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007991 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7992
Jeff Johnson295189b2012-06-20 16:38:30 -07007993 if(IS_WDI_STATUS_FAILURE(status))
7994 {
7995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7996 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7998 vos_mem_free(pWdaParams);
7999
8000 /* send the failure response back to PE*/
8001 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8002 {
8003 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8004 }
8005
8006 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8007 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 return CONVERT_WDI2VOS_STATUS(status) ;
8010}
8011#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008012/*
Mihir Shetea4306052014-03-25 00:02:54 +05308013 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008014 * send Enter IMPS RSP back to PE
8015 */
Mihir Shetea4306052014-03-25 00:02:54 +05308016void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008017{
Mihir Shetea4306052014-03-25 00:02:54 +05308018 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308019 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308020
Jeff Johnson295189b2012-06-20 16:38:30 -07008021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308022 "<------ %s status=%d" ,__func__,status);
8023 if(NULL == pWdaParams)
8024 {
8025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8026 "%s: pWdaParams received NULL", __func__);
8027 VOS_ASSERT(0);
8028 return;
8029 }
8030
8031 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308032 if (NULL == pWDA)
8033 {
8034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8035 "%s:pWDA is NULL", __func__);
8036 VOS_ASSERT(0);
8037 return ;
8038 }
Mihir Shetea4306052014-03-25 00:02:54 +05308039
8040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8041 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008042 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008043 return ;
8044}
Mihir Shetea4306052014-03-25 00:02:54 +05308045
8046
8047/*
8048 * FUNCTION: WDA_EnterImpsReqCallback
8049 * Free memory and send Enter IMPS RSP back to PE.
8050 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8051 */
8052void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8053{
8054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308055 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308056
8057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8058 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8059
8060 if(NULL == pWdaParams)
8061 {
8062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8063 "%s: pWdaParams received NULL", __func__);
8064 VOS_ASSERT(0);
8065 return;
8066 }
8067
8068 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308069 if (NULL == pWDA)
8070 {
8071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8072 "%s:pWDA is NULL", __func__);
8073 VOS_ASSERT(0);
8074 return ;
8075 }
8076
Mihir Shetea4306052014-03-25 00:02:54 +05308077
8078 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8079 {
8080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8081 vos_mem_free(pWdaParams);
8082 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8083 CONVERT_WDI2SIR_STATUS(wdiStatus));
8084 }
8085
8086 return;
8087}
Jeff Johnson295189b2012-06-20 16:38:30 -07008088/*
8089 * FUNCTION: WDA_ProcessEnterImpsReq
8090 * Request to WDI to Enter IMPS power state.
8091 */
8092VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8093{
8094 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308095 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8096 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008098 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308099
8100
8101 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8102 if (NULL == wdiEnterImpsReqParams)
8103 {
8104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8105 "%s: VOS MEM Alloc Failure", __func__);
8106 VOS_ASSERT(0);
8107 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8108 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8109 return VOS_STATUS_E_NOMEM;
8110 }
8111
8112 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,
8116 "%s: VOS MEM Alloc Failure", __func__);
8117 VOS_ASSERT(0);
8118 vos_mem_free(wdiEnterImpsReqParams);
8119 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8120 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8121 return VOS_STATUS_E_NOMEM;
8122 }
8123
8124 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8125 wdiEnterImpsReqParams->pUserData = pWdaParams;
8126
8127 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8128 pWdaParams->wdaMsgParam = NULL;
8129 pWdaParams->pWdaContext = pWDA;
8130
8131 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8132 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8133 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008134 if(IS_WDI_STATUS_FAILURE(status))
8135 {
8136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8137 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308138 vos_mem_free(wdiEnterImpsReqParams);
8139 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008140 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 return CONVERT_WDI2VOS_STATUS(status) ;
8143}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308144
8145/*
8146 * FUNCTION: WDA_ExitImpsRespCallback
8147 * send Exit IMPS RSP back to PE
8148 */
8149void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8150{
8151 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8152 tWDA_CbContext *pWDA;
8153
8154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8155 "<------ %s " ,__func__);
8156
8157 if (NULL == pWdaParams)
8158 {
8159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8160 "%s: pWdaParams received NULL", __func__);
8161 VOS_ASSERT(0);
8162 return;
8163 }
8164 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8165
8166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8167 vos_mem_free(pWdaParams);
8168
8169 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8170 return;
8171}
8172
Jeff Johnson295189b2012-06-20 16:38:30 -07008173/*
8174 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 */
8176void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8177{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008180 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308181 if(NULL == pWdaParams)
8182 {
8183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8184 "%s: pWdaParams received NULL", __func__);
8185 VOS_ASSERT(0);
8186 return;
8187 }
8188
8189 if (IS_WDI_STATUS_FAILURE(status))
8190 {
8191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8192 vos_mem_free(pWdaParams);
8193 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8194 {
8195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8196 FL("reload wlan driver"));
8197 wpalWlanReload();
8198 }
8199 }
8200 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008201}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308202
Jeff Johnson295189b2012-06-20 16:38:30 -07008203/*
8204 * FUNCTION: WDA_ProcessExitImpsReq
8205 * Request to WDI to Exit IMPS power state.
8206 */
8207VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8208{
8209 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308210 tWDA_ReqParams *pWdaParams;
8211 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8212
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008214 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308215 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8216 sizeof(WDI_ExitImpsReqParamsType));
8217 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008218 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8220 "%s: VOS MEM Alloc Failure", __func__);
8221 VOS_ASSERT(0);
8222 return VOS_STATUS_E_NOMEM;
8223 }
8224 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8225 if(NULL == pWdaParams)
8226 {
8227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8228 "%s: VOS MEM Alloc Failure", __func__);
8229 VOS_ASSERT(0);
8230 vos_mem_free(wdiExitImpsReqParams);
8231 return VOS_STATUS_E_NOMEM;
8232 }
8233 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8234 wdiExitImpsReqParams->pUserData = pWdaParams;
8235
8236 /* Store param pointer as passed in by caller */
8237 /* store Params pass it to WDI */
8238 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8239 pWdaParams->pWdaContext = pWDA;
8240 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8241 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8242 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8243 pWdaParams);
8244 if (IS_WDI_STATUS_FAILURE(status))
8245 {
8246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8247 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8249 vos_mem_free(pWdaParams);
8250 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008252 return CONVERT_WDI2VOS_STATUS(status) ;
8253}
Jeff Johnson295189b2012-06-20 16:38:30 -07008254/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008255 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 * send Enter BMPS RSP back to PE
8257 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008258void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008259{
8260 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308261 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008262 tEnterBmpsParams *pEnterBmpsRspParams;
8263
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008265 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008266 if(NULL == pWdaParams)
8267 {
8268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008269 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008270 VOS_ASSERT(0) ;
8271 return ;
8272 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008273
8274 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308275 if (NULL == pWDA)
8276 {
8277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8278 "%s:pWDA is NULL", __func__);
8279 VOS_ASSERT(0);
8280 return ;
8281 }
8282
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008283 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8284
8285 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008286 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008287
8288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008289 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008290 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8291
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 return ;
8293}
Jeff Johnson295189b2012-06-20 16:38:30 -07008294/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008295 * FUNCTION: WDA_EnterBmpsReqCallback
8296 * Free memory and send Enter BMPS RSP back to PE.
8297 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8298 */
8299void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8300{
8301 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308302 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008303 tEnterBmpsParams *pEnterBmpsRspParams;
8304
8305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8306 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8307
8308 if(NULL == pWdaParams)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8311 "%s: pWdaParams received NULL", __func__);
8312 VOS_ASSERT(0);
8313 return;
8314 }
8315
8316 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308317 if (NULL == pWDA)
8318 {
8319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8320 "%s:pWDA is NULL", __func__);
8321 VOS_ASSERT(0);
8322 return ;
8323 }
8324
Yue Ma7f44bbe2013-04-12 11:47:39 -07008325 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8326 pEnterBmpsRspParams->status = wdiStatus;
8327
8328 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8329 {
8330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8331 vos_mem_free(pWdaParams);
8332 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8333 }
8334
8335 return;
8336}
8337/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008338 * FUNCTION: WDA_ProcessEnterBmpsReq
8339 * Request to WDI to Enter BMPS power state.
8340 */
8341VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8342 tEnterBmpsParams *pEnterBmpsReqParams)
8343{
8344 WDI_Status status = WDI_STATUS_SUCCESS;
8345 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8346 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008348 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8350 {
8351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008352 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 VOS_ASSERT(0);
8354 return VOS_STATUS_E_FAILURE;
8355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008356 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8357 if (NULL == wdiEnterBmpsReqParams)
8358 {
8359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008362 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8363 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 return VOS_STATUS_E_NOMEM;
8365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008366 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8367 if (NULL == pWdaParams)
8368 {
8369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 VOS_ASSERT(0);
8372 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008373 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8374 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 return VOS_STATUS_E_NOMEM;
8376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8378 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8379 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8380 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008381 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008382 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8383 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8384 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008385 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8386 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008387
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 /* Store param pointer as passed in by caller */
8389 /* store Params pass it to WDI */
8390 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008391 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008393 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008394 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008395 if (IS_WDI_STATUS_FAILURE(status))
8396 {
8397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8398 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008400 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008402 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 return CONVERT_WDI2VOS_STATUS(status);
8405}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008406
8407
8408static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8409 WDI_Status wdiStatus,
8410 tExitBmpsParams *pExitBmpsReqParams)
8411{
8412 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8413
8414 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8415}
8416
8417
Jeff Johnson295189b2012-06-20 16:38:30 -07008418/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008419 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 * send Exit BMPS RSP back to PE
8421 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008422void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008423{
8424 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308425 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008426 tExitBmpsParams *pExitBmpsRspParams;
8427
Jeff Johnson295189b2012-06-20 16:38:30 -07008428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008429 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 if(NULL == pWdaParams)
8431 {
8432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008433 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008434 VOS_ASSERT(0) ;
8435 return ;
8436 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008437
8438 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308439 if (NULL == pWDA)
8440 {
8441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8442 "%s:pWDA is NULL", __func__);
8443 VOS_ASSERT(0);
8444 return ;
8445 }
8446
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008447 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8448
8449 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008450 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008451
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8453 vos_mem_free(pWdaParams) ;
8454
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008455 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008456 return ;
8457}
Jeff Johnson295189b2012-06-20 16:38:30 -07008458/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008459 * FUNCTION: WDA_ExitBmpsReqCallback
8460 * Free memory and send Exit BMPS RSP back to PE.
8461 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8462 */
8463void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8464{
8465 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308466 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008467 tExitBmpsParams *pExitBmpsRspParams;
8468
8469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8470 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8471
8472 if(NULL == pWdaParams)
8473 {
8474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8475 "%s: pWdaParams received NULL", __func__);
8476 VOS_ASSERT(0);
8477 return;
8478 }
8479
8480 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308481 if (NULL == pWDA)
8482 {
8483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8484 "%s:pWDA is NULL", __func__);
8485 VOS_ASSERT(0);
8486 return ;
8487 }
8488
Yue Ma7f44bbe2013-04-12 11:47:39 -07008489 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8490 pExitBmpsRspParams->status = wdiStatus;
8491
8492 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8493 {
8494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8495 vos_mem_free(pWdaParams);
8496 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8497 }
8498
8499 return;
8500}
8501/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008502 * FUNCTION: WDA_ProcessExitBmpsReq
8503 * Request to WDI to Exit BMPS power state.
8504 */
8505VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8506 tExitBmpsParams *pExitBmpsReqParams)
8507{
8508 WDI_Status status = WDI_STATUS_SUCCESS ;
8509 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8510 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8511 sizeof(WDI_ExitBmpsReqParamsType)) ;
8512 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008514 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008515 if(NULL == wdiExitBmpsReqParams)
8516 {
8517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008519 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008520 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008521 return VOS_STATUS_E_NOMEM;
8522 }
8523 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8524 if(NULL == pWdaParams)
8525 {
8526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008527 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008528 VOS_ASSERT(0);
8529 vos_mem_free(wdiExitBmpsReqParams);
8530 return VOS_STATUS_E_NOMEM;
8531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008532 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008533
8534 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8535
Yue Ma7f44bbe2013-04-12 11:47:39 -07008536 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8537 wdiExitBmpsReqParams->pUserData = pWdaParams;
8538
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 /* Store param pointer as passed in by caller */
8540 /* store Params pass it to WDI */
8541 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8542 pWdaParams->pWdaContext = pWDA;
8543 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008544 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008545 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008546 if(IS_WDI_STATUS_FAILURE(status))
8547 {
8548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8549 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8551 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008552 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008554 return CONVERT_WDI2VOS_STATUS(status) ;
8555}
Jeff Johnson295189b2012-06-20 16:38:30 -07008556/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008557 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008558 * send Enter UAPSD RSP back to PE
8559 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008560void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008561{
8562 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308563 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008564 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008566 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 if(NULL == pWdaParams)
8568 {
8569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008570 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008571 VOS_ASSERT(0) ;
8572 return ;
8573 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008574
8575 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308576 if (NULL == pWDA)
8577 {
8578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8579 "%s:pWDA is NULL", __func__);
8580 VOS_ASSERT(0);
8581 return ;
8582 }
8583
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008584 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8585
8586 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008587 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008588
Jeff Johnson295189b2012-06-20 16:38:30 -07008589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8590 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008591 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 return ;
8593}
Jeff Johnson295189b2012-06-20 16:38:30 -07008594/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008595 * FUNCTION: WDA_EnterUapsdReqCallback
8596 * Free memory and send Enter UAPSD RSP back to PE.
8597 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8598 */
8599void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8600{
8601 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8602 tWDA_CbContext *pWDA;
8603 tUapsdParams *pEnterUapsdRsqParams;
8604
8605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8606 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8607
8608 if(NULL == pWdaParams)
8609 {
8610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8611 "%s: pWdaParams received NULL", __func__);
8612 VOS_ASSERT(0);
8613 return;
8614 }
8615
8616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308617 if (NULL == pWDA)
8618 {
8619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8620 "%s:pWDA is NULL", __func__);
8621 VOS_ASSERT(0);
8622 return ;
8623 }
8624
Yue Ma7f44bbe2013-04-12 11:47:39 -07008625 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8626 pEnterUapsdRsqParams->status = wdiStatus;
8627
8628 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8629 {
8630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8631 vos_mem_free(pWdaParams);
8632 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8633 }
8634
8635 return;
8636}
8637/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008638 * FUNCTION: WDA_ProcessEnterUapsdReq
8639 * Request to WDI to Enter UAPSD power state.
8640 */
8641VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8642 tUapsdParams *pEnterUapsdReqParams)
8643{
8644 WDI_Status status = WDI_STATUS_SUCCESS ;
8645 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8646 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8647 sizeof(WDI_EnterUapsdReqParamsType)) ;
8648 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008650 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008651 if(NULL == wdiEnterUapsdReqParams)
8652 {
8653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008654 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 VOS_ASSERT(0);
8656 return VOS_STATUS_E_NOMEM;
8657 }
8658 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8659 if(NULL == pWdaParams)
8660 {
8661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008662 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008663 VOS_ASSERT(0);
8664 vos_mem_free(wdiEnterUapsdReqParams);
8665 return VOS_STATUS_E_NOMEM;
8666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008667 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8668 pEnterUapsdReqParams->beDeliveryEnabled;
8669 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8670 pEnterUapsdReqParams->beTriggerEnabled;
8671 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8672 pEnterUapsdReqParams->bkDeliveryEnabled;
8673 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8674 pEnterUapsdReqParams->bkTriggerEnabled;
8675 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8676 pEnterUapsdReqParams->viDeliveryEnabled;
8677 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8678 pEnterUapsdReqParams->viTriggerEnabled;
8679 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8680 pEnterUapsdReqParams->voDeliveryEnabled;
8681 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8682 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008683 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008684
Yue Ma7f44bbe2013-04-12 11:47:39 -07008685 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8686 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008687
Jeff Johnson295189b2012-06-20 16:38:30 -07008688 /* Store param pointer as passed in by caller */
8689 /* store Params pass it to WDI */
8690 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8691 pWdaParams->pWdaContext = pWDA;
8692 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008693 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008694 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008695 if(IS_WDI_STATUS_FAILURE(status))
8696 {
8697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8698 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8699 vos_mem_free(pWdaParams->wdaMsgParam) ;
8700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8701 vos_mem_free(pWdaParams) ;
8702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 return CONVERT_WDI2VOS_STATUS(status) ;
8704}
Jeff Johnson295189b2012-06-20 16:38:30 -07008705/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008706 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008707 * send Exit UAPSD RSP back to PE
8708 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008709void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008710{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008711
8712 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8713 tWDA_CbContext *pWDA;
8714 tExitUapsdParams *pExitUapsdRspParams;
8715
Jeff Johnson295189b2012-06-20 16:38:30 -07008716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008717 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008718 if(NULL == pWdaParams)
8719 {
8720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008721 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008722 VOS_ASSERT(0);
8723 return;
8724 }
8725
8726 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8727 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8728
8729 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008730 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008731
8732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8733 vos_mem_free(pWdaParams) ;
8734
8735 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008736 return ;
8737}
Jeff Johnson295189b2012-06-20 16:38:30 -07008738/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008739 * FUNCTION: WDA_ExitUapsdReqCallback
8740 * Free memory and send Exit UAPSD RSP back to PE.
8741 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8742 */
8743void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8744{
8745 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308746 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008747 tExitUapsdParams *pExitUapsdRspParams;
8748
8749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8750 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8751
8752 if(NULL == pWdaParams)
8753 {
8754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8755 "%s: pWdaParams received NULL", __func__);
8756 VOS_ASSERT(0);
8757 return;
8758 }
8759
8760 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308761 if (NULL == pWDA)
8762 {
8763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8764 "%s:pWDA is NULL", __func__);
8765 VOS_ASSERT(0);
8766 return ;
8767 }
8768
Yue Ma7f44bbe2013-04-12 11:47:39 -07008769 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8770 pExitUapsdRspParams->status = wdiStatus;
8771
8772 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8773 {
8774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8775 vos_mem_free(pWdaParams);
8776 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8777 }
8778
8779 return;
8780}
8781/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 * FUNCTION: WDA_ProcessExitUapsdReq
8783 * Request to WDI to Exit UAPSD power state.
8784 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008785VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8786 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008787{
8788 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008789 tWDA_ReqParams *pWdaParams ;
8790 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8791 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8792 sizeof(WDI_ExitUapsdReqParamsType)) ;
8793
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__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008796
8797 if(NULL == wdiExitUapsdReqParams)
8798 {
8799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008800 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008801 VOS_ASSERT(0);
8802 return VOS_STATUS_E_NOMEM;
8803 }
8804 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8805 if(NULL == pWdaParams)
8806 {
8807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008808 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008809 VOS_ASSERT(0);
8810 vos_mem_free(wdiExitUapsdReqParams);
8811 return VOS_STATUS_E_NOMEM;
8812 }
8813
8814 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008815 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8816 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008817
8818 /* Store param pointer as passed in by caller */
8819 /* store Params pass it to WDI */
8820 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8821 pWdaParams->pWdaContext = pWDA;
8822 pWdaParams->wdaMsgParam = pExitUapsdParams;
8823
Yue Ma7f44bbe2013-04-12 11:47:39 -07008824 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008825 if(IS_WDI_STATUS_FAILURE(status))
8826 {
8827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8828 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008829 vos_mem_free(pWdaParams->wdaMsgParam) ;
8830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8831 vos_mem_free(pWdaParams) ;
8832
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008834 return CONVERT_WDI2VOS_STATUS(status) ;
8835}
8836
Jeff Johnson295189b2012-06-20 16:38:30 -07008837/*
8838 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8839 *
8840 */
8841void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8842{
8843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008845 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008846 if(NULL == pWdaParams)
8847 {
8848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008849 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 VOS_ASSERT(0) ;
8851 return ;
8852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008853 if( pWdaParams != NULL )
8854 {
8855 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8856 {
8857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8858 }
8859 if( pWdaParams->wdaMsgParam != NULL )
8860 {
8861 vos_mem_free(pWdaParams->wdaMsgParam) ;
8862 }
8863 vos_mem_free(pWdaParams) ;
8864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008865 return ;
8866}
Jeff Johnson295189b2012-06-20 16:38:30 -07008867/*
8868 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8869 * Request to WDI to set the power save params at start.
8870 */
8871VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8872 tSirPowerSaveCfg *pPowerSaveCfg)
8873{
8874 WDI_Status status = WDI_STATUS_SUCCESS ;
8875 tHalCfg *tlvStruct = NULL ;
8876 tANI_U8 *tlvStructStart = NULL ;
8877 v_PVOID_t *configParam;
8878 tANI_U32 configParamSize;
8879 tANI_U32 *configDataValue;
8880 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8881 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008883 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008884 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8885 {
8886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008887 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008888 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008889 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 return VOS_STATUS_E_FAILURE;
8891 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008892 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8893 if (NULL == wdiPowerSaveCfg)
8894 {
8895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008897 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008898 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008899 return VOS_STATUS_E_NOMEM;
8900 }
8901 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8902 if(NULL == pWdaParams)
8903 {
8904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008905 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008906 VOS_ASSERT(0);
8907 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008908 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 return VOS_STATUS_E_NOMEM;
8910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008911 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8912 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008913 if(NULL == configParam)
8914 {
8915 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008916 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008917 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008918 vos_mem_free(pWdaParams);
8919 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008920 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008921 return VOS_STATUS_E_NOMEM;
8922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008923 vos_mem_set(configParam, configParamSize, 0);
8924 wdiPowerSaveCfg->pConfigBuffer = configParam;
8925 tlvStruct = (tHalCfg *)configParam;
8926 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8928 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8929 tlvStruct->length = sizeof(tANI_U32);
8930 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8931 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008932 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8933 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008934 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8935 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8936 tlvStruct->length = sizeof(tANI_U32);
8937 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8938 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008939 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8940 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008941 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8942 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8943 tlvStruct->length = sizeof(tANI_U32);
8944 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8945 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008946 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8947 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008948 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8949 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8950 tlvStruct->length = sizeof(tANI_U32);
8951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8952 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8954 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8956 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8957 tlvStruct->length = sizeof(tANI_U32);
8958 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8959 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008960 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8961 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8963 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8964 tlvStruct->length = sizeof(tANI_U32);
8965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8966 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008967 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8968 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8970 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8971 tlvStruct->length = sizeof(tANI_U32);
8972 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8973 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008974 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8975 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008976 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8977 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8978 tlvStruct->length = sizeof(tANI_U32);
8979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8980 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8981 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8982 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8984 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8985 tlvStruct->length = sizeof(tANI_U32);
8986 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8987 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8988 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8989 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8991 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8992 tlvStruct->length = sizeof(tANI_U32);
8993 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8994 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008995 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8996 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8998 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8999 tlvStruct->length = sizeof(tANI_U32);
9000 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9001 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9003 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009004 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 /* store Params pass it to WDI */
9007 pWdaParams->wdaMsgParam = configParam;
9008 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9009 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9011 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009012 if(IS_WDI_STATUS_FAILURE(status))
9013 {
9014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9015 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9016 vos_mem_free(pWdaParams->wdaMsgParam);
9017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9018 vos_mem_free(pWdaParams);
9019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009020 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009021 return CONVERT_WDI2VOS_STATUS(status);
9022}
Jeff Johnson295189b2012-06-20 16:38:30 -07009023/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009024 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009025 *
9026 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009027void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009028{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9030
Jeff Johnson295189b2012-06-20 16:38:30 -07009031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009032 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009033
9034 if(NULL == pWdaParams)
9035 {
9036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9037 "%s: pWdaParams received NULL", __func__);
9038 VOS_ASSERT(0);
9039 return ;
9040 }
9041
9042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009043 vos_mem_free(pWdaParams);
9044
Jeff Johnson295189b2012-06-20 16:38:30 -07009045 return ;
9046}
Jeff Johnson295189b2012-06-20 16:38:30 -07009047/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009048 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9049 * Free memory.
9050 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9051 */
9052void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9053{
9054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9055
9056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9057 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9058
9059 if(NULL == pWdaParams)
9060 {
9061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9062 "%s: pWdaParams received NULL", __func__);
9063 VOS_ASSERT(0);
9064 return;
9065 }
9066
9067 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9068 {
9069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9070 vos_mem_free(pWdaParams);
9071 }
9072
9073 return;
9074}
9075/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 * FUNCTION: WDA_SetUapsdAcParamsReq
9077 * Request to WDI to set the UAPSD params for an ac (sta mode).
9078 */
9079VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9080 tUapsdInfo *pUapsdInfo)
9081{
9082 WDI_Status status = WDI_STATUS_SUCCESS;
9083 tWDA_CbContext *pWDA = NULL ;
9084 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9085 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9086 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9087 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009089 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009090 if(NULL == wdiUapsdParams)
9091 {
9092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009093 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 VOS_ASSERT(0);
9095 return VOS_STATUS_E_NOMEM;
9096 }
9097 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9098 if(NULL == pWdaParams)
9099 {
9100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009101 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 VOS_ASSERT(0);
9103 vos_mem_free(wdiUapsdParams);
9104 return VOS_STATUS_E_NOMEM;
9105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9107 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9108 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9109 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9110 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9111 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009112 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9113 wdiUapsdParams->pUserData = pWdaParams;
9114
Jeff Johnson295189b2012-06-20 16:38:30 -07009115 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009116 pWdaParams->pWdaContext = pWDA;
9117 /* Store param pointer as passed in by caller */
9118 pWdaParams->wdaMsgParam = pUapsdInfo;
9119 /* store Params pass it to WDI */
9120 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009121 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009122 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009124 if(IS_WDI_STATUS_FAILURE(status))
9125 {
9126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9127 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9129 vos_mem_free(pWdaParams);
9130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009131 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9132 return VOS_STATUS_SUCCESS;
9133 else
9134 return VOS_STATUS_E_FAILURE;
9135
Jeff Johnson295189b2012-06-20 16:38:30 -07009136}
9137/*
9138 * FUNCTION: WDA_ClearUapsdAcParamsReq
9139 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9140 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9141 * and again enter the UPASD with the modified params. Hence the disable
9142 * function was kept empty.
9143 *
9144 */
9145VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9146{
9147 /* do nothing */
9148 return VOS_STATUS_SUCCESS;
9149}
Jeff Johnson295189b2012-06-20 16:38:30 -07009150/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009151 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 *
9153 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009154void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009155{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009156 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9157
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009159 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009160
9161 if(NULL == pWdaParams)
9162 {
9163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009164 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009165 VOS_ASSERT(0) ;
9166 return ;
9167 }
9168
9169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9170 vos_mem_free(pWdaParams->wdaMsgParam);
9171 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009172
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 //print a msg, nothing else to do
9174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009175 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009176 return ;
9177}
Jeff Johnson295189b2012-06-20 16:38:30 -07009178/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009179 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9180 * Free memory.
9181 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9182 */
9183void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9184{
9185 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9186
9187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9188 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9189
9190 if(NULL == pWdaParams)
9191 {
9192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9193 "%s: pWdaParams received NULL", __func__);
9194 VOS_ASSERT(0);
9195 return;
9196 }
9197
9198 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9199 {
9200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9201 vos_mem_free(pWdaParams->wdaMsgParam);
9202 vos_mem_free(pWdaParams);
9203 }
9204
9205 return;
9206}
9207/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009208 * FUNCTION: WDA_UpdateUapsdParamsReq
9209 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9210 */
9211VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9212 tUpdateUapsdParams* pUpdateUapsdInfo)
9213{
9214 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009215 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009216 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9217 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9218 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009219 tWDA_ReqParams *pWdaParams = NULL;
9220
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009222 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009223 if(NULL == wdiUpdateUapsdParams)
9224 {
9225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 VOS_ASSERT(0);
9228 return VOS_STATUS_E_NOMEM;
9229 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009230 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9231 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9232 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009233 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9234 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009235
9236 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9237 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009238 {
9239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009240 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009242 vos_mem_free(pUpdateUapsdInfo);
9243 vos_mem_free(wdiUpdateUapsdParams);
9244 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009246 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009247 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009249 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9250 pWdaParams->pWdaContext = pWDA;
9251
Jeff Johnson43971f52012-07-17 12:26:56 -07009252 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009253 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009254 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009255
Jeff Johnson43971f52012-07-17 12:26:56 -07009256 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 {
9258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9259 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009260 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9262 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009263 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009265 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009266}
Jeff Johnson295189b2012-06-20 16:38:30 -07009267/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009268 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 *
9270 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009271void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009272{
9273 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009275 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 if(WDI_STATUS_SUCCESS != wdiStatus)
9277 {
9278 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009279 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009281 if(NULL == pWdaParams)
9282 {
9283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009284 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009285 VOS_ASSERT(0) ;
9286 return ;
9287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9289 vos_mem_free(pWdaParams->wdaMsgParam);
9290 vos_mem_free(pWdaParams);
9291 return ;
9292}
Jeff Johnson295189b2012-06-20 16:38:30 -07009293/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009294 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9295 * Free memory.
9296 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9297 */
9298void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9299{
9300 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9301
9302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9303 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9304
9305 if(NULL == pWdaParams)
9306 {
9307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9308 "%s: pWdaParams received NULL", __func__);
9309 VOS_ASSERT(0);
9310 return;
9311 }
9312
9313 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9314 {
9315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9316 vos_mem_free(pWdaParams->wdaMsgParam);
9317 vos_mem_free(pWdaParams);
9318 }
9319
9320 return;
9321}
9322/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9324 *
9325 */
9326VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9327 tSirWlanSetRxpFilters *pWlanSuspendParam)
9328{
Jeff Johnson295189b2012-06-20 16:38:30 -07009329 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009330 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309331 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009332 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309333 /* Sanity Check
9334 * This is very unlikely and add assert to collect more info next time */
9335 if(NULL == pWlanSuspendParam)
9336 {
9337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9338 "%s: pWlanSuspendParam received NULL", __func__);
9339 VOS_ASSERT(0) ;
9340 return VOS_STATUS_E_FAULT;
9341 }
9342 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9343 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009345 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009346 if(NULL == wdiRxpFilterParams)
9347 {
9348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 VOS_ASSERT(0);
9351 vos_mem_free(pWlanSuspendParam);
9352 return VOS_STATUS_E_NOMEM;
9353 }
9354 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9355 if(NULL == pWdaParams)
9356 {
9357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009358 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009359 VOS_ASSERT(0);
9360 vos_mem_free(wdiRxpFilterParams);
9361 vos_mem_free(pWlanSuspendParam);
9362 return VOS_STATUS_E_NOMEM;
9363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009364 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9365 pWlanSuspendParam->setMcstBcstFilter;
9366 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9367 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9368
Yue Ma7f44bbe2013-04-12 11:47:39 -07009369 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9370 wdiRxpFilterParams->pUserData = pWdaParams;
9371
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 pWdaParams->pWdaContext = pWDA;
9373 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9374 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009375 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009376 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009377 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009378 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 {
9380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9381 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009382 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9384 vos_mem_free(pWdaParams->wdaMsgParam);
9385 vos_mem_free(pWdaParams);
9386 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009387 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009388}
Jeff Johnson295189b2012-06-20 16:38:30 -07009389/*
9390 * FUNCTION: WDA_WdiIndicationCallback
9391 *
9392 */
9393void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9394 void* pUserData)
9395{
9396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009397 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009398}
Jeff Johnson295189b2012-06-20 16:38:30 -07009399/*
9400 * FUNCTION: WDA_ProcessWlanSuspendInd
9401 *
9402 */
9403VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9404 tSirWlanSuspendParam *pWlanSuspendParam)
9405{
9406 WDI_Status wdiStatus;
9407 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009409 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9411 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9412 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9413 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009415 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9416 if(WDI_STATUS_PENDING == wdiStatus)
9417 {
9418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009419 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009420 }
9421 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9422 {
9423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009424 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009425 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 vos_mem_free(pWlanSuspendParam);
9427 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9428}
9429
Chet Lanctot186b5732013-03-18 10:26:30 -07009430#ifdef WLAN_FEATURE_11W
9431/*
9432 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9433 *
9434 */
9435VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9436 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9437{
9438 WDI_Status wdiStatus;
9439 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9441 "------> %s ", __func__);
9442
9443 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9444 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9445 sizeof(tSirMacAddr));
9446
9447 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9448 wdiExclUnencryptParams.pUserData = pWDA;
9449
9450 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9451 if(WDI_STATUS_PENDING == wdiStatus)
9452 {
9453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9454 "Pending received for %s:%d ", __func__, __LINE__ );
9455 }
9456 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9457 {
9458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9459 "Failure in %s:%d ", __func__, __LINE__ );
9460 }
9461 vos_mem_free(pExclUnencryptParam);
9462 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9463}
9464#endif
9465
Jeff Johnson295189b2012-06-20 16:38:30 -07009466/*
9467 * FUNCTION: WDA_ProcessWlanResumeCallback
9468 *
9469 */
9470void WDA_ProcessWlanResumeCallback(
9471 WDI_SuspendResumeRspParamsType *resumeRspParams,
9472 void* pUserData)
9473{
9474 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009476 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009477 if(NULL == pWdaParams)
9478 {
9479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009480 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009481 VOS_ASSERT(0) ;
9482 return ;
9483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9485 {
9486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009487 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9490 vos_mem_free(pWdaParams->wdaMsgParam);
9491 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 return ;
9493}
Jeff Johnson295189b2012-06-20 16:38:30 -07009494/*
9495 * FUNCTION: WDA_ProcessWlanResumeReq
9496 *
9497 */
9498VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9499 tSirWlanResumeParam *pWlanResumeParam)
9500{
9501 WDI_Status wdiStatus;
9502 WDI_ResumeParamsType *wdiResumeParams =
9503 (WDI_ResumeParamsType *)vos_mem_malloc(
9504 sizeof(WDI_ResumeParamsType) ) ;
9505 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009507 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 if(NULL == wdiResumeParams)
9509 {
9510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009511 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009512 VOS_ASSERT(0);
9513 return VOS_STATUS_E_NOMEM;
9514 }
9515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9516 if(NULL == pWdaParams)
9517 {
9518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009520 VOS_ASSERT(0);
9521 vos_mem_free(wdiResumeParams);
9522 return VOS_STATUS_E_NOMEM;
9523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9525 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009527 wdiResumeParams->wdiReqStatusCB = NULL;
9528 pWdaParams->wdaMsgParam = pWlanResumeParam;
9529 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9530 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009531 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9532 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9533 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9535 {
9536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9537 "Failure in Host Resume REQ WDI API, free all the memory " );
9538 VOS_ASSERT(0);
9539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9540 vos_mem_free(pWdaParams->wdaMsgParam);
9541 vos_mem_free(pWdaParams);
9542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9544}
9545
Jeff Johnson295189b2012-06-20 16:38:30 -07009546/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009547 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009548 *
9549 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009550void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009551{
9552 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009554 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009555 if(NULL == pWdaParams)
9556 {
9557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009558 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 VOS_ASSERT(0) ;
9560 return ;
9561 }
9562
9563 vos_mem_free(pWdaParams->wdaMsgParam) ;
9564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9565 vos_mem_free(pWdaParams) ;
9566 /*
9567 * No respone required for SetBeaconFilter req so just free the request
9568 * param here
9569 */
9570
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 return ;
9572}
Jeff Johnson295189b2012-06-20 16:38:30 -07009573/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009574 * FUNCTION: WDA_SetBeaconFilterReqCallback
9575 * Free memory.
9576 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9577 */
9578void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9579{
9580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9581
9582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9583 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9584
9585 if(NULL == pWdaParams)
9586 {
9587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9588 "%s: pWdaParams received NULL", __func__);
9589 VOS_ASSERT(0);
9590 return;
9591 }
9592
9593 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9594 {
9595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9596 vos_mem_free(pWdaParams->wdaMsgParam);
9597 vos_mem_free(pWdaParams);
9598 }
9599
9600 return;
9601}
9602/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 * FUNCTION: WDA_SetBeaconFilterReq
9604 * Request to WDI to send the beacon filtering related information.
9605 */
9606VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9607 tBeaconFilterMsg* pBeaconFilterInfo)
9608{
9609 WDI_Status status = WDI_STATUS_SUCCESS;
9610 tANI_U8 *dstPtr, *srcPtr;
9611 tANI_U8 filterLength;
9612 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9613 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9614 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9615 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009617 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009618 if(NULL == wdiBeaconFilterInfo)
9619 {
9620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009622 VOS_ASSERT(0);
9623 return VOS_STATUS_E_NOMEM;
9624 }
9625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9626 if(NULL == pWdaParams)
9627 {
9628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 VOS_ASSERT(0);
9631 vos_mem_free(wdiBeaconFilterInfo);
9632 return VOS_STATUS_E_NOMEM;
9633 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9635 pBeaconFilterInfo->beaconInterval;
9636 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9637 pBeaconFilterInfo->capabilityInfo;
9638 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9639 pBeaconFilterInfo->capabilityMask;
9640 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009641
9642 //Fill the BssIdx
9643 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9644
Jeff Johnson295189b2012-06-20 16:38:30 -07009645 //Fill structure with info contained in the beaconFilterTable
9646 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9647 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9648 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9649 if(WDI_BEACON_FILTER_LEN < filterLength)
9650 {
9651 filterLength = WDI_BEACON_FILTER_LEN;
9652 }
9653 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009654 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9655 wdiBeaconFilterInfo->pUserData = pWdaParams;
9656
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 /* Store param pointer as passed in by caller */
9658 /* store Params pass it to WDI */
9659 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9660 pWdaParams->pWdaContext = pWDA;
9661 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9662
Jeff Johnson295189b2012-06-20 16:38:30 -07009663 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009664 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 if(IS_WDI_STATUS_FAILURE(status))
9666 {
9667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9668 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9669 vos_mem_free(pWdaParams->wdaMsgParam) ;
9670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9671 vos_mem_free(pWdaParams) ;
9672 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009673 return CONVERT_WDI2VOS_STATUS(status) ;
9674}
Jeff Johnson295189b2012-06-20 16:38:30 -07009675/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009676 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 *
9678 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009679void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009680{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9682
Jeff Johnson295189b2012-06-20 16:38:30 -07009683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009684 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009685
9686 if(NULL == pWdaParams)
9687 {
9688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009689 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009690 VOS_ASSERT(0) ;
9691 return ;
9692 }
9693
9694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9695 vos_mem_free(pWdaParams->wdaMsgParam);
9696 vos_mem_free(pWdaParams);
9697
Jeff Johnson295189b2012-06-20 16:38:30 -07009698 //print a msg, nothing else to do
9699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009700 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 return ;
9702}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009703/*
9704 * FUNCTION: WDA_RemBeaconFilterReqCallback
9705 * Free memory.
9706 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9707 */
9708void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9709{
9710 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9711
9712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9713 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9714
9715 if(NULL == pWdaParams)
9716 {
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9718 "%s: pWdaParams received NULL", __func__);
9719 VOS_ASSERT(0);
9720 return;
9721 }
9722
9723 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9724 {
9725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9726 vos_mem_free(pWdaParams->wdaMsgParam);
9727 vos_mem_free(pWdaParams);
9728 }
9729
9730 return;
9731}
Jeff Johnson295189b2012-06-20 16:38:30 -07009732 // TODO: PE does not have this feature for now implemented,
9733 // but the support for removing beacon filter exists between
9734 // HAL and FW. This function can be called whenever PE defines
9735 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009736/*
9737 * FUNCTION: WDA_RemBeaconFilterReq
9738 * Request to WDI to send the removal of beacon filtering related information.
9739 */
9740VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9741 tRemBeaconFilterMsg* pBeaconFilterInfo)
9742{
9743 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009744 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009745 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9746 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9747 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009748 tWDA_ReqParams *pWdaParams ;
9749
Jeff Johnson295189b2012-06-20 16:38:30 -07009750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009751 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009752 if(NULL == wdiBeaconFilterInfo)
9753 {
9754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009755 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009756 VOS_ASSERT(0);
9757 return VOS_STATUS_E_NOMEM;
9758 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009759 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9760 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009761 {
9762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009764 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009765 vos_mem_free(wdiBeaconFilterInfo);
9766 vos_mem_free(pBeaconFilterInfo);
9767 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009768 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009769
9770 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9771 pBeaconFilterInfo->ucIeCount;
9772 //Fill structure with info contained in the ucRemIeId
9773 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9774 pBeaconFilterInfo->ucRemIeId,
9775 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9776 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9777 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009778
9779 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009780 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009781 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009782 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9783
9784 pWdaParams->pWdaContext = pWDA;
9785
Jeff Johnson43971f52012-07-17 12:26:56 -07009786 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009787 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009788 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009789 {
9790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9791 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009792 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9794 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009795 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009796 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009797 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009798}
Jeff Johnson295189b2012-06-20 16:38:30 -07009799/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009800 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009801 *
9802 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009803void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009804{
9805 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009807 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009808 if(NULL == pWdaParams)
9809 {
9810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009811 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009812 VOS_ASSERT(0) ;
9813 return ;
9814 }
9815
9816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9817 vos_mem_free(pWdaParams) ;
9818
Jeff Johnson295189b2012-06-20 16:38:30 -07009819 return ;
9820}
Jeff Johnson295189b2012-06-20 16:38:30 -07009821/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009822 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9823 * Free memory.
9824 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9825 */
9826void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9827{
9828 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9829
9830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9831 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9832
9833 if(NULL == pWdaParams)
9834 {
9835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9836 "%s: pWdaParams received NULL", __func__);
9837 VOS_ASSERT(0);
9838 return;
9839 }
9840
9841 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9842 {
9843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9844 vos_mem_free(pWdaParams);
9845 }
9846
9847 return;
9848}
9849/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 * FUNCTION: WDA_SetRSSIThresholdsReq
9851 * Request to WDI to set the RSSI thresholds (sta mode).
9852 */
9853VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9854{
9855 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009856 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009857 tWDA_CbContext *pWDA = NULL ;
9858 v_PVOID_t pVosContext = NULL;
9859 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9860 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9861 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9862 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009864 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009865 if(NULL == wdiRSSIThresholdsInfo)
9866 {
9867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009868 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009869 VOS_ASSERT(0);
9870 return VOS_STATUS_E_NOMEM;
9871 }
9872 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9873 if(NULL == pWdaParams)
9874 {
9875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009876 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009877 VOS_ASSERT(0);
9878 vos_mem_free(wdiRSSIThresholdsInfo);
9879 return VOS_STATUS_E_NOMEM;
9880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9883 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9884 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9886 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9887 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009888 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9889 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9890 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009891 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9892 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9894 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9895
Jeff Johnson295189b2012-06-20 16:38:30 -07009896 /* Store param pointer as passed in by caller */
9897 /* store Params pass it to WDI */
9898 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9899 pWdaParams->pWdaContext = pWDA;
9900 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009901 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009902 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009903 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009904 {
9905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9906 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009907 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9909 vos_mem_free(pWdaParams) ;
9910 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009911 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009912
9913}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009914/*
Yue Madb90ac12013-04-04 13:39:13 -07009915 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009916 *
9917 */
Yue Madb90ac12013-04-04 13:39:13 -07009918void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009919{
9920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9921
9922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009923 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009924 if(NULL == pWdaParams)
9925 {
9926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009927 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 VOS_ASSERT(0) ;
9929 return ;
9930 }
9931
9932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9933 vos_mem_free(pWdaParams->wdaMsgParam);
9934 vos_mem_free(pWdaParams) ;
9935
9936 //print a msg, nothing else to do
9937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009938 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 return ;
9940}
Jeff Johnson295189b2012-06-20 16:38:30 -07009941/*
Yue Madb90ac12013-04-04 13:39:13 -07009942 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009943 * Free memory.
9944 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009945 */
9946void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9947{
9948 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9949
9950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9951 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9952
9953 if(NULL == pWdaParams)
9954 {
9955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9956 "%s: Invalid pWdaParams pointer", __func__);
9957 VOS_ASSERT(0);
9958 return;
9959 }
9960
9961 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9962 {
9963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9964 vos_mem_free(pWdaParams->wdaMsgParam);
9965 vos_mem_free(pWdaParams);
9966 }
9967
9968 return;
9969}
9970/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009971 * FUNCTION: WDA_ProcessHostOffloadReq
9972 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9973 * to broadcast traffic (sta mode).
9974 */
9975VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9976 tSirHostOffloadReq *pHostOffloadParams)
9977{
9978 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009979 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9981 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9982 sizeof(WDI_HostOffloadReqParamsType)) ;
9983 tWDA_ReqParams *pWdaParams ;
9984
9985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009986 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009987
9988 if(NULL == wdiHostOffloadInfo)
9989 {
9990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009992 VOS_ASSERT(0);
9993 return VOS_STATUS_E_NOMEM;
9994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9996 if(NULL == pWdaParams)
9997 {
9998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009999 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 VOS_ASSERT(0);
10001 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010002 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 return VOS_STATUS_E_NOMEM;
10004 }
10005
10006 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10007 pHostOffloadParams->offloadType;
10008 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10009 pHostOffloadParams->enableOrDisable;
10010
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010011 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10012 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10013
Jeff Johnson295189b2012-06-20 16:38:30 -070010014 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10015 {
10016 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10017 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10018 pHostOffloadParams->params.hostIpv4Addr,
10019 4);
10020 break;
10021 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10022 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10023 pHostOffloadParams->params.hostIpv6Addr,
10024 16);
10025 break;
10026 case SIR_IPV6_NS_OFFLOAD:
10027 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10028 pHostOffloadParams->params.hostIpv6Addr,
10029 16);
10030
10031#ifdef WLAN_NS_OFFLOAD
10032 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10033 {
10034 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10035 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10036 16);
10037 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10038 }
10039 else
10040 {
10041 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10042 }
10043
10044 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10045 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10046 16);
10047 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10048 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10049 6);
10050
10051 //Only two are supported so let's go through them without a loop
10052 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10053 {
10054 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10055 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10056 16);
10057 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10058 }
10059 else
10060 {
10061 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10062 }
10063
10064 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10065 {
10066 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10067 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10068 16);
10069 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10070 }
10071 else
10072 {
10073 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10074 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010075 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10076 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010077 break;
10078#endif //WLAN_NS_OFFLOAD
10079 default:
10080 {
10081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10082 "No Handling for Offload Type %x in WDA "
10083 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10084 //WDA_VOS_ASSERT(0) ;
10085 }
10086 }
Yue Madb90ac12013-04-04 13:39:13 -070010087 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10088 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010089
Jeff Johnson295189b2012-06-20 16:38:30 -070010090 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010091 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 /* store Params pass it to WDI */
10093 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10094 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010095
Jeff Johnson295189b2012-06-20 16:38:30 -070010096
Jeff Johnson43971f52012-07-17 12:26:56 -070010097 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010098 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010099
Jeff Johnson43971f52012-07-17 12:26:56 -070010100 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 {
10102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010103 "Failure in host offload REQ WDI API, free all the memory %d",
10104 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010105 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10107 vos_mem_free(pWdaParams->wdaMsgParam);
10108 vos_mem_free(pWdaParams) ;
10109 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010110 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010111
10112}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010113/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010114 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 *
10116 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010117void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010118{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010119 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10120
Jeff Johnson295189b2012-06-20 16:38:30 -070010121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010122 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010123
10124 if(NULL == pWdaParams)
10125 {
10126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010127 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010128 VOS_ASSERT(0) ;
10129 return ;
10130 }
10131
10132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10133 vos_mem_free(pWdaParams->wdaMsgParam);
10134 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010135
Jeff Johnson295189b2012-06-20 16:38:30 -070010136 //print a msg, nothing else to do
10137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010138 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010139 return ;
10140}
Jeff Johnson295189b2012-06-20 16:38:30 -070010141/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010142 * FUNCTION: WDA_KeepAliveReqCallback
10143 * Free memory.
10144 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10145 */
10146void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10147{
10148 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10149
10150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10151 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10152
10153 if(NULL == pWdaParams)
10154 {
10155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10156 "%s: pWdaParams received NULL", __func__);
10157 VOS_ASSERT(0);
10158 return;
10159 }
10160
10161 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10162 {
10163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10164 vos_mem_free(pWdaParams->wdaMsgParam);
10165 vos_mem_free(pWdaParams);
10166 }
10167
10168 return;
10169}
10170/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 * FUNCTION: WDA_ProcessKeepAliveReq
10172 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10173 * wakeup due to broadcast traffic (sta mode).
10174 */
10175VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10176 tSirKeepAliveReq *pKeepAliveParams)
10177{
10178 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010179 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010180 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10181 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10182 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010183 tWDA_ReqParams *pWdaParams;
10184
Jeff Johnson295189b2012-06-20 16:38:30 -070010185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 if(NULL == wdiKeepAliveInfo)
10188 {
10189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010191 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010192 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 return VOS_STATUS_E_NOMEM;
10194 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010195
10196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10197 if(NULL == pWdaParams)
10198 {
10199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010200 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010201 VOS_ASSERT(0);
10202 vos_mem_free(wdiKeepAliveInfo);
10203 vos_mem_free(pKeepAliveParams);
10204 return VOS_STATUS_E_NOMEM;
10205 }
10206
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10208 pKeepAliveParams->packetType;
10209 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10210 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010211
10212 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10213 pKeepAliveParams->bssId,
10214 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010215
10216 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10217 {
10218 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10219 pKeepAliveParams->hostIpv4Addr,
10220 SIR_IPV4_ADDR_LEN);
10221 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10222 pKeepAliveParams->destIpv4Addr,
10223 SIR_IPV4_ADDR_LEN);
10224 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10225 pKeepAliveParams->destMacAddr,
10226 SIR_MAC_ADDR_LEN);
10227 }
10228 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10229 {
10230 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10231 SIR_IPV4_ADDR_LEN,
10232 0);
10233 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10234 SIR_IPV4_ADDR_LEN,
10235 0);
10236 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10237 SIR_MAC_ADDR_LEN,
10238 0);
10239 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010240 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10241 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010242
Jeff Johnson295189b2012-06-20 16:38:30 -070010243 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010244 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010246 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10247 pWdaParams->pWdaContext = pWDA;
10248
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10250 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10251 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10252 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10253 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10255 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10256 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10257 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10258 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10260 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10261 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10262 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10263 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10264 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10265 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10266 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10268 "TimePeriod %d PacketType %d",
10269 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10270 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010271 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010272 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010273
Jeff Johnson43971f52012-07-17 12:26:56 -070010274 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 {
10276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10277 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010278 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010279 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10280 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010281 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010283 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010284
10285}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010286/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010287 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 *
10289 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010290void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010291 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10292 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010293{
10294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010296 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010297 if(NULL == pWdaParams)
10298 {
10299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010300 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010301 VOS_ASSERT(0) ;
10302 return ;
10303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10305 vos_mem_free(pWdaParams->wdaMsgParam);
10306 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 return ;
10308}
Jeff Johnson295189b2012-06-20 16:38:30 -070010309/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010310 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10311 * Free memory.
10312 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10313 */
10314void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10315{
10316 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10317
10318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10319 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10320
10321 if(NULL == pWdaParams)
10322 {
10323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10324 "%s: pWdaParams received NULL", __func__);
10325 VOS_ASSERT(0);
10326 return;
10327 }
10328
10329 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10330 {
10331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10332 vos_mem_free(pWdaParams->wdaMsgParam);
10333 vos_mem_free(pWdaParams);
10334 }
10335
10336 return;
10337}
10338
10339/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10341 * Request to WDI to add WOWL Bcast pattern
10342 */
10343VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10344 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10345{
10346 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010347 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010348 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10349 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10350 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10351 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010353 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010354 if(NULL == wdiWowlAddBcPtrnInfo)
10355 {
10356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010358 VOS_ASSERT(0);
10359 return VOS_STATUS_E_NOMEM;
10360 }
10361 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10362 if(NULL == pWdaParams)
10363 {
10364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 VOS_ASSERT(0);
10367 vos_mem_free(wdiWowlAddBcPtrnInfo);
10368 return VOS_STATUS_E_NOMEM;
10369 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10371 pWowlAddBcPtrnParams->ucPatternId;
10372 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10373 pWowlAddBcPtrnParams->ucPatternByteOffset;
10374 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10375 pWowlAddBcPtrnParams->ucPatternMaskSize;
10376 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10377 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010378 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10379 {
10380 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10381 pWowlAddBcPtrnParams->ucPattern,
10382 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10383 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10384 pWowlAddBcPtrnParams->ucPatternMask,
10385 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10386 }
10387 else
10388 {
10389 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10390 pWowlAddBcPtrnParams->ucPattern,
10391 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10392 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10393 pWowlAddBcPtrnParams->ucPatternMask,
10394 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10395
10396 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10397 pWowlAddBcPtrnParams->ucPatternExt,
10398 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10399 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10400 pWowlAddBcPtrnParams->ucPatternMaskExt,
10401 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10402 }
10403
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010404 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10405 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10406
Yue Ma7f44bbe2013-04-12 11:47:39 -070010407 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10408 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 /* Store param pointer as passed in by caller */
10410 /* store Params pass it to WDI */
10411 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10412 pWdaParams->pWdaContext = pWDA;
10413 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010414 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010415 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010416 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 {
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10419 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010420 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010421 vos_mem_free(pWdaParams->wdaMsgParam) ;
10422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10423 vos_mem_free(pWdaParams) ;
10424 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010425 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010426
10427}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010428/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010429 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010430 *
10431 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010432void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010433 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10434 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010435{
10436 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010438 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010439 if(NULL == pWdaParams)
10440 {
10441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010442 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010443 VOS_ASSERT(0) ;
10444 return ;
10445 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10447 vos_mem_free(pWdaParams->wdaMsgParam);
10448 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010449 return ;
10450}
Jeff Johnson295189b2012-06-20 16:38:30 -070010451/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010452 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10453 * Free memory.
10454 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10455 */
10456void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10457{
10458 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10459
10460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10461 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10462
10463 if(NULL == pWdaParams)
10464 {
10465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10466 "%s: pWdaParams received NULL", __func__);
10467 VOS_ASSERT(0);
10468 return;
10469 }
10470
10471 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10472 {
10473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10474 vos_mem_free(pWdaParams->wdaMsgParam);
10475 vos_mem_free(pWdaParams);
10476 }
10477
10478 return;
10479}
10480/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10482 * Request to WDI to delete WOWL Bcast pattern
10483 */
10484VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10485 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10486{
10487 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010488 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010489 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10490 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10491 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10492 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010494 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010495 if(NULL == wdiWowlDelBcPtrnInfo)
10496 {
10497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 VOS_ASSERT(0);
10500 return VOS_STATUS_E_NOMEM;
10501 }
10502 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10503 if(NULL == pWdaParams)
10504 {
10505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010506 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010507 VOS_ASSERT(0);
10508 vos_mem_free(wdiWowlDelBcPtrnInfo);
10509 return VOS_STATUS_E_NOMEM;
10510 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010511 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10512 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010513
10514 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10515 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10516
Yue Ma7f44bbe2013-04-12 11:47:39 -070010517 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10518 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010519 /* Store param pointer as passed in by caller */
10520 /* store Params pass it to WDI */
10521 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10522 pWdaParams->pWdaContext = pWDA;
10523 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010524 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010525 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010526 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010527 {
10528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10529 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010530 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010531 vos_mem_free(pWdaParams->wdaMsgParam) ;
10532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10533 vos_mem_free(pWdaParams) ;
10534 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010535 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010536
10537}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010538/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010539 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010540 *
10541 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010542void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010543{
10544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010545 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010546 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010548 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010549 if(NULL == pWdaParams)
10550 {
10551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010552 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010553 VOS_ASSERT(0) ;
10554 return ;
10555 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010556 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010557 if (NULL == pWDA)
10558 {
10559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10560 "%s:pWDA is NULL", __func__);
10561 VOS_ASSERT(0);
10562 return ;
10563 }
10564
Jeff Johnson295189b2012-06-20 16:38:30 -070010565 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10566
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010567 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10568
Jeff Johnson295189b2012-06-20 16:38:30 -070010569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10570 vos_mem_free(pWdaParams) ;
10571
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010572 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010573 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010574 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010575 return ;
10576}
Jeff Johnson295189b2012-06-20 16:38:30 -070010577/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010578 * FUNCTION: WDA_WowlEnterReqCallback
10579 * Free memory and send WOWL Enter RSP back to PE.
10580 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10581 */
10582void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10583{
10584 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010585 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010586 tSirHalWowlEnterParams *pWowlEnterParams;
10587
10588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10589 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10590
10591 if(NULL == pWdaParams)
10592 {
10593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10594 "%s: pWdaParams received NULL", __func__);
10595 VOS_ASSERT(0);
10596 return;
10597 }
10598
10599 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010600 if (NULL == pWDA)
10601 {
10602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10603 "%s:pWDA is NULL", __func__);
10604 VOS_ASSERT(0);
10605 return ;
10606 }
10607
Yue Ma7f44bbe2013-04-12 11:47:39 -070010608 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10609 pWowlEnterParams->status = wdiStatus;
10610
10611 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10612 {
10613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10614 vos_mem_free(pWdaParams);
10615 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10616 }
10617
10618 return;
10619}
10620/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010621 * FUNCTION: WDA_ProcessWowlEnterReq
10622 * Request to WDI to enter WOWL
10623 */
10624VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10625 tSirHalWowlEnterParams *pWowlEnterParams)
10626{
10627 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010628 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010629 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10630 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10631 sizeof(WDI_WowlEnterReqParamsType)) ;
10632 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010634 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010635 if(NULL == wdiWowlEnterInfo)
10636 {
10637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010638 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 VOS_ASSERT(0);
10640 return VOS_STATUS_E_NOMEM;
10641 }
10642 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10643 if(NULL == pWdaParams)
10644 {
10645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010646 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 VOS_ASSERT(0);
10648 vos_mem_free(wdiWowlEnterInfo);
10649 return VOS_STATUS_E_NOMEM;
10650 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010651
10652 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10653
Jeff Johnson295189b2012-06-20 16:38:30 -070010654 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10655 pWowlEnterParams->magicPtrn,
10656 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010657 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10658 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010659 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10660 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010661 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10662 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010663 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10664 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010665 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10666 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010667 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10668 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010669 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10670 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010671 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10672 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010673#ifdef WLAN_WAKEUP_EVENTS
10674 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10675 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10676
10677 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10678 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10679
10680 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10681 pWowlEnterParams->ucWowNetScanOffloadMatch;
10682
10683 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10684 pWowlEnterParams->ucWowGTKRekeyError;
10685
10686 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10687 pWowlEnterParams->ucWoWBSSConnLoss;
10688#endif // WLAN_WAKEUP_EVENTS
10689
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010690 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10691 pWowlEnterParams->bssIdx;
10692
Yue Ma7f44bbe2013-04-12 11:47:39 -070010693 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10694 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 /* Store param pointer as passed in by caller */
10696 /* store Params pass it to WDI */
10697 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10698 pWdaParams->pWdaContext = pWDA;
10699 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010700 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010701 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010702 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010703 {
10704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10705 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010706 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010707 vos_mem_free(pWdaParams->wdaMsgParam) ;
10708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10709 vos_mem_free(pWdaParams) ;
10710 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010711 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010712
10713}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010714/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010715 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 *
10717 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010718void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010719{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010721 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010722 tSirHalWowlExitParams *pWowlExitParams;
10723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010724 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010725 if(NULL == pWdaParams)
10726 {
10727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010728 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010729 VOS_ASSERT(0) ;
10730 return ;
10731 }
10732 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010733 if (NULL == pWDA)
10734 {
10735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10736 "%s:pWDA is NULL", __func__);
10737 VOS_ASSERT(0);
10738 return ;
10739 }
10740
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010741 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10742
10743 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010744 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010745
10746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10747 vos_mem_free(pWdaParams) ;
10748
Jeff Johnson295189b2012-06-20 16:38:30 -070010749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010750 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010751 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010752 return ;
10753}
Jeff Johnson295189b2012-06-20 16:38:30 -070010754/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010755 * FUNCTION: WDA_WowlExitReqCallback
10756 * Free memory and send WOWL Exit RSP back to PE.
10757 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10758 */
10759void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10760{
10761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010762 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010763 tSirHalWowlExitParams *pWowlExitParams;
10764
10765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10766 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10767
10768 if(NULL == pWdaParams)
10769 {
10770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10771 "%s: pWdaParams received NULL", __func__);
10772 VOS_ASSERT(0);
10773 return;
10774 }
10775
10776 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010777 if (NULL == pWDA)
10778 {
10779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10780 "%s:pWDA is NULL", __func__);
10781 VOS_ASSERT(0);
10782 return ;
10783 }
10784
Yue Ma7f44bbe2013-04-12 11:47:39 -070010785 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10786 pWowlExitParams->status = wdiStatus;
10787
10788 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10789 {
10790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10791 vos_mem_free(pWdaParams);
10792 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10793 }
10794
10795 return;
10796}
10797/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 * FUNCTION: WDA_ProcessWowlExitReq
10799 * Request to WDI to add WOWL Bcast pattern
10800 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010801VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10802 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010803{
10804 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010805 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010806 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10807 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10808 sizeof(WDI_WowlExitReqParamsType)) ;
10809 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010811 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010812 if(NULL == wdiWowlExitInfo)
10813 {
10814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010815 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010816 VOS_ASSERT(0);
10817 return VOS_STATUS_E_NOMEM;
10818 }
10819 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10820 if(NULL == pWdaParams)
10821 {
10822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010823 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010824 VOS_ASSERT(0);
10825 vos_mem_free(wdiWowlExitInfo);
10826 return VOS_STATUS_E_NOMEM;
10827 }
10828
10829 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10830 pWowlExitParams->bssIdx;
10831
Yue Ma7f44bbe2013-04-12 11:47:39 -070010832 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10833 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010834
10835 /* Store param pointer as passed in by caller */
10836 /* store Params pass it to WDI */
10837 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10838 pWdaParams->pWdaContext = pWDA;
10839 pWdaParams->wdaMsgParam = pWowlExitParams;
10840
10841 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010842 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010843
Jeff Johnson43971f52012-07-17 12:26:56 -070010844 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 {
10846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10847 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010848 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10850 vos_mem_free(pWdaParams->wdaMsgParam);
10851 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010852 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010853 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010854}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010855/*
10856 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10857 * Request to WDI to determine whether a given station is capable of
10858 * using HW-based frame translation
10859 */
10860v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10861 tANI_U8 staIdx)
10862{
10863 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10864}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010865
10866/*
10867 * FUNCTION: WDA_IsSelfSTA
10868 * Request to WDI to determine whether a given STAID is self station
10869 * index.
10870 */
10871v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10872{
10873
10874 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10875
Girish Gowli05cf44e2014-06-12 21:53:37 +053010876 if (NULL != pWDA)
10877 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10878 else
10879 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010880}
Jeff Johnson295189b2012-06-20 16:38:30 -070010881/*
10882 * FUNCTION: WDA_NvDownloadReqCallback
10883 * send NV Download RSP back to PE
10884 */
10885void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10886 void* pUserData)
10887{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010888
10889 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010890 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010891
Jeff Johnson295189b2012-06-20 16:38:30 -070010892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010893 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010894
10895 if(NULL == pWdaParams)
10896 {
10897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010898 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010899 VOS_ASSERT(0) ;
10900 return ;
10901 }
10902
10903 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010904 if (NULL == pWDA)
10905 {
10906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10907 "%s:pWDA is NULL", __func__);
10908 VOS_ASSERT(0);
10909 return ;
10910 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010911
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10914 vos_mem_free(pWdaParams);
10915
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010917 return ;
10918}
Jeff Johnson295189b2012-06-20 16:38:30 -070010919/*
10920 * FUNCTION: WDA_ProcessNvDownloadReq
10921 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10922 */
10923VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10924{
10925 /* Initialize the local Variables*/
10926 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10927 v_VOID_t *pNvBuffer=NULL;
10928 v_SIZE_t bufferSize = 0;
10929 WDI_Status status = WDI_STATUS_E_FAILURE;
10930 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010931 tWDA_ReqParams *pWdaParams ;
10932
Jeff Johnson295189b2012-06-20 16:38:30 -070010933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010934 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010935 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070010936 {
10937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010938 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010939 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010940 return VOS_STATUS_E_FAILURE;
10941 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010942
Jeff Johnson295189b2012-06-20 16:38:30 -070010943 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010944 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10945
Jeff Johnson295189b2012-06-20 16:38:30 -070010946 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10947 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 if(NULL == wdiNvDownloadReqParam)
10949 {
10950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010952 VOS_ASSERT(0);
10953 return VOS_STATUS_E_NOMEM;
10954 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010955 /* Copy Params to wdiNvDownloadReqParam*/
10956 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10957 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010958
10959 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10960 if(NULL == pWdaParams)
10961 {
10962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010963 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010964 VOS_ASSERT(0);
10965 vos_mem_free(wdiNvDownloadReqParam);
10966 return VOS_STATUS_E_NOMEM;
10967 }
10968
Jeff Johnson295189b2012-06-20 16:38:30 -070010969 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010970 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10971 pWdaParams->wdaMsgParam = NULL;
10972 pWdaParams->pWdaContext = pWDA;
10973
10974
Jeff Johnson295189b2012-06-20 16:38:30 -070010975 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010976
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010978 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10979
Jeff Johnson295189b2012-06-20 16:38:30 -070010980 if(IS_WDI_STATUS_FAILURE(status))
10981 {
10982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10983 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10985 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010988}
10989/*
10990 * FUNCTION: WDA_FlushAcReqCallback
10991 * send Flush AC RSP back to TL
10992 */
10993void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10994{
10995 vos_msg_t wdaMsg = {0} ;
10996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10997 tFlushACReq *pFlushACReqParams;
10998 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011000 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011001 if(NULL == pWdaParams)
11002 {
11003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011004 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011005 VOS_ASSERT(0) ;
11006 return ;
11007 }
11008
11009 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11010 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11011 if(NULL == pFlushACRspParams)
11012 {
11013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011015 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011016 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011017 return ;
11018 }
11019 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11020 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11021 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11022 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11023 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011024 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011025 vos_mem_free(pWdaParams->wdaMsgParam) ;
11026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11027 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011028 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11029 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11030 // POST message to TL
11031 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11032
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 return ;
11034}
Jeff Johnson295189b2012-06-20 16:38:30 -070011035/*
11036 * FUNCTION: WDA_ProcessFlushAcReq
11037 * Request to WDI to Update the DELBA REQ params.
11038 */
11039VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11040 tFlushACReq *pFlushAcReqParams)
11041{
11042 WDI_Status status = WDI_STATUS_SUCCESS ;
11043 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11044 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11045 sizeof(WDI_FlushAcReqParamsType)) ;
11046 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011047 if(NULL == wdiFlushAcReqParam)
11048 {
11049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 VOS_ASSERT(0);
11052 return VOS_STATUS_E_NOMEM;
11053 }
11054 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11055 if(NULL == pWdaParams)
11056 {
11057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 VOS_ASSERT(0);
11060 vos_mem_free(wdiFlushAcReqParam);
11061 return VOS_STATUS_E_NOMEM;
11062 }
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 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11066 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11067 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11068 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 /* Store Flush AC pointer, as this will be used for response */
11070 /* store Params pass it to WDI */
11071 pWdaParams->pWdaContext = pWDA;
11072 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11073 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11075 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011076 if(IS_WDI_STATUS_FAILURE(status))
11077 {
11078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11079 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11080 vos_mem_free(pWdaParams->wdaMsgParam) ;
11081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11082 vos_mem_free(pWdaParams) ;
11083 //TODO: respond to TL with failure
11084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011085 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011086}
Jeff Johnson295189b2012-06-20 16:38:30 -070011087/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011088 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 *
11090 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011091void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011092{
11093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011094 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011095 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011096
11097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011098 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011099 if(NULL == pWdaParams)
11100 {
11101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011102 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 VOS_ASSERT(0) ;
11104 return ;
11105 }
11106 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011107 if (NULL == pWDA)
11108 {
11109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11110 "%s:pWDA is NULL", __func__);
11111 VOS_ASSERT(0);
11112 return ;
11113 }
11114
Jeff Johnson295189b2012-06-20 16:38:30 -070011115 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11116 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11117 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11118 {
11119 pWDA->wdaAmpSessionOn = VOS_FALSE;
11120 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011121 vos_mem_free(pWdaParams->wdaMsgParam) ;
11122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11123 vos_mem_free(pWdaParams) ;
11124 /*
11125 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11126 * param here
11127 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 return ;
11129}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011130/*
11131 * FUNCTION: WDA_BtAmpEventReqCallback
11132 * Free memory.
11133 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11134 */
11135void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11136{
11137 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011138 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011139 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011140
Yue Ma7f44bbe2013-04-12 11:47:39 -070011141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11142 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11143
11144 if(NULL == pWdaParams)
11145 {
11146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11147 "%s: pWdaParams received NULL", __func__);
11148 VOS_ASSERT(0);
11149 return;
11150 }
11151
11152 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011153 if (NULL == pWDA)
11154 {
11155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11156 "%s:pWDA is NULL", __func__);
11157 VOS_ASSERT(0);
11158 return ;
11159 }
11160
Yue Ma7f44bbe2013-04-12 11:47:39 -070011161 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11162
11163 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11164 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11165 {
11166 pWDA->wdaAmpSessionOn = VOS_FALSE;
11167 }
11168
11169 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11170 {
11171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11172 vos_mem_free(pWdaParams->wdaMsgParam);
11173 vos_mem_free(pWdaParams);
11174 }
11175
11176 return;
11177}
Jeff Johnson295189b2012-06-20 16:38:30 -070011178/*
11179 * FUNCTION: WDA_ProcessBtAmpEventReq
11180 * Request to WDI to Update with BT AMP events.
11181 */
11182VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11183 tSmeBtAmpEvent *pBtAmpEventParams)
11184{
11185 WDI_Status status = WDI_STATUS_SUCCESS ;
11186 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11187 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11188 sizeof(WDI_BtAmpEventParamsType)) ;
11189 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011191 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 if(NULL == wdiBtAmpEventParam)
11193 {
11194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011195 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011196 VOS_ASSERT(0);
11197 return VOS_STATUS_E_NOMEM;
11198 }
11199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11200 if(NULL == pWdaParams)
11201 {
11202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011204 VOS_ASSERT(0);
11205 vos_mem_free(wdiBtAmpEventParam);
11206 return VOS_STATUS_E_NOMEM;
11207 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011208 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11209 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011210 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11211 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 /* Store BT AMP event pointer, as this will be used for response */
11213 /* store Params pass it to WDI */
11214 pWdaParams->pWdaContext = pWDA;
11215 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11216 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011217 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011218 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011219 if(IS_WDI_STATUS_FAILURE(status))
11220 {
11221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11222 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11223 vos_mem_free(pWdaParams->wdaMsgParam) ;
11224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11225 vos_mem_free(pWdaParams) ;
11226 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011227 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11228 {
11229 pWDA->wdaAmpSessionOn = VOS_TRUE;
11230 }
11231 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011232}
11233
Jeff Johnson295189b2012-06-20 16:38:30 -070011234/*
11235 * FUNCTION: WDA_FTMCommandReqCallback
11236 * Handle FTM CMD response came from HAL
11237 * Route responce to HDD FTM
11238 */
11239void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11240 void *usrData)
11241{
11242 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11244 {
11245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011246 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011247 return;
11248 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011249 /* Release Current FTM Command Request */
11250 vos_mem_free(pWDA->wdaFTMCmdReq);
11251 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 /* Post FTM Responce to HDD FTM */
11253 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011254 return;
11255}
Jeff Johnson295189b2012-06-20 16:38:30 -070011256/*
11257 * FUNCTION: WDA_ProcessFTMCommand
11258 * Send FTM command to WDI
11259 */
11260VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11261 tPttMsgbuffer *pPTTFtmCmd)
11262{
11263 WDI_Status status = WDI_STATUS_SUCCESS;
11264 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011265 ftmCMDReq = (WDI_FTMCommandReqType *)
11266 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11267 if(NULL == ftmCMDReq)
11268 {
11269 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11270 "WDA FTM Command buffer alloc fail");
11271 return VOS_STATUS_E_NOMEM;
11272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011273 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11274 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011275 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011276 /* Send command to WDI */
11277 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 return status;
11279}
Jeff Johnsone7245742012-09-05 17:12:55 -070011280#ifdef FEATURE_OEM_DATA_SUPPORT
11281/*
11282 * FUNCTION: WDA_StartOemDataReqCallback
11283 *
11284 */
11285void WDA_StartOemDataReqCallback(
11286 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11287 void* pUserData)
11288{
11289 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011290 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011291 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011292 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011293
Jeff Johnsone7245742012-09-05 17:12:55 -070011294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011295 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011296
11297 if(NULL == pWdaParams)
11298 {
11299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011300 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011301 VOS_ASSERT(0) ;
11302 return ;
11303 }
11304 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11305
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011306 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011307 {
11308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011309 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011310 VOS_ASSERT(0);
11311 return ;
11312 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011313
Jeff Johnsone7245742012-09-05 17:12:55 -070011314 /*
11315 * Allocate memory for response params sent to PE
11316 */
11317 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11318
11319 // Check if memory is allocated for OemdataMeasRsp Params.
11320 if(NULL == pOemDataRspParams)
11321 {
11322 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11323 "OEM DATA WDA callback alloc fail");
11324 VOS_ASSERT(0) ;
11325 return;
11326 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011327
Jeff Johnsone7245742012-09-05 17:12:55 -070011328 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11330 vos_mem_free(pWdaParams->wdaMsgParam);
11331 vos_mem_free(pWdaParams) ;
11332
Jeff Johnsone7245742012-09-05 17:12:55 -070011333 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011334 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011335 * Also, here success always means that we have atleast one BSSID.
11336 */
11337 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11338
11339 //enable Tx
11340 status = WDA_ResumeDataTx(pWDA);
11341 if(status != VOS_STATUS_SUCCESS)
11342 {
11343 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11344 }
11345 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11346 return ;
11347}
11348/*
11349 * FUNCTION: WDA_ProcessStartOemDataReq
11350 * Send Start Oem Data Req to WDI
11351 */
11352VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11353 tStartOemDataReq *pOemDataReqParams)
11354{
11355 WDI_Status status = WDI_STATUS_SUCCESS;
11356 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011357 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011358
11359 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11360
11361 if(NULL == wdiOemDataReqParams)
11362 {
11363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011365 VOS_ASSERT(0);
11366 return VOS_STATUS_E_NOMEM;
11367 }
11368
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011369 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11370 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11371 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11372 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011373
11374 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11375
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011376 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11377 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011378 {
11379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011380 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011381 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011382 vos_mem_free(pOemDataReqParams);
11383 VOS_ASSERT(0);
11384 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011385 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011386
Bernald44a1ae2013-01-09 08:30:39 -080011387 pWdaParams->pWdaContext = (void*)pWDA;
11388 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11389 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011390
11391 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11392 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011393
11394 if(IS_WDI_STATUS_FAILURE(status))
11395 {
11396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11397 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11399 vos_mem_free(pWdaParams->wdaMsgParam);
11400 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011401 }
11402 return CONVERT_WDI2VOS_STATUS(status) ;
11403}
11404#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011405/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011406 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 *
11408 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011409void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011410{
11411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011413 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011414 if(NULL == pWdaParams)
11415 {
11416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011417 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 VOS_ASSERT(0) ;
11419 return ;
11420 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011421
11422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11423 vos_mem_free(pWdaParams->wdaMsgParam);
11424 vos_mem_free(pWdaParams);
11425
11426 return ;
11427}
11428/*
11429 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11430 * Free memory.
11431 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11432 */
11433void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11434{
11435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11436
11437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11438 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11439
11440 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011441 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11443 "%s: pWdaParams received NULL", __func__);
11444 VOS_ASSERT(0);
11445 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011446 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011447
11448 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011449 {
11450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011451 vos_mem_free(pWdaParams->wdaMsgParam);
11452 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011453 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011454
11455 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011456}
Jeff Johnson295189b2012-06-20 16:38:30 -070011457#ifdef WLAN_FEATURE_GTK_OFFLOAD
11458/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011459 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011460 *
11461 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011462void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011463 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011464{
11465 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11466
11467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011468 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011469 if(NULL == pWdaParams)
11470 {
11471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11472 "%s: pWdaParams received NULL", __func__);
11473 VOS_ASSERT(0);
11474 return;
11475 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011476
Jeff Johnson295189b2012-06-20 16:38:30 -070011477 vos_mem_free(pWdaParams->wdaMsgParam) ;
11478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11479 vos_mem_free(pWdaParams) ;
11480
11481 //print a msg, nothing else to do
11482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011483 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011484
11485 return ;
11486}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011487/*
11488 * FUNCTION: WDA_GTKOffloadReqCallback
11489 * Free memory.
11490 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11491 */
11492void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11493{
11494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011495
Yue Ma7f44bbe2013-04-12 11:47:39 -070011496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11497 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11498
11499 if(NULL == pWdaParams)
11500 {
11501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11502 "%s: pWdaParams received NULL", __func__);
11503 VOS_ASSERT(0);
11504 return;
11505 }
11506
11507 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11508 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011509 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11510 sizeof(WDI_GtkOffloadReqMsg));
11511 vos_mem_zero(pWdaParams->wdaMsgParam,
11512 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11514 vos_mem_free(pWdaParams->wdaMsgParam);
11515 vos_mem_free(pWdaParams);
11516 }
11517
11518 return;
11519}
Jeff Johnson295189b2012-06-20 16:38:30 -070011520/*
11521 * FUNCTION: WDA_ProcessGTKOffloadReq
11522 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11523 * to broadcast traffic (sta mode).
11524 */
11525VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11526 tpSirGtkOffloadParams pGtkOffloadParams)
11527{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011528 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11530 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11531 sizeof(WDI_GtkOffloadReqMsg)) ;
11532 tWDA_ReqParams *pWdaParams ;
11533
11534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011535 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011536
11537 if(NULL == wdiGtkOffloadReqMsg)
11538 {
11539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 VOS_ASSERT(0);
11542 return VOS_STATUS_E_NOMEM;
11543 }
11544
11545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11546 if(NULL == pWdaParams)
11547 {
11548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011550 VOS_ASSERT(0);
11551 vos_mem_free(wdiGtkOffloadReqMsg);
11552 return VOS_STATUS_E_NOMEM;
11553 }
11554
11555 //
11556 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11557 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011558
11559 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011560 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011561
Jeff Johnson295189b2012-06-20 16:38:30 -070011562 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11563 // Copy KCK
11564 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11565 // Copy KEK
11566 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11567 // Copy KeyReplayCounter
11568 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11569 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11570
Yue Ma7f44bbe2013-04-12 11:47:39 -070011571 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11572 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011573
Jeff Johnson295189b2012-06-20 16:38:30 -070011574
11575 /* Store Params pass it to WDI */
11576 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11577 pWdaParams->pWdaContext = pWDA;
11578 /* Store param pointer as passed in by caller */
11579 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11580
Yue Ma7f44bbe2013-04-12 11:47:39 -070011581 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011582
11583 if(IS_WDI_STATUS_FAILURE(status))
11584 {
11585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11586 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011587 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11588 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11590 vos_mem_free(pWdaParams->wdaMsgParam);
11591 vos_mem_free(pWdaParams);
11592 }
11593
11594 return CONVERT_WDI2VOS_STATUS(status) ;
11595}
11596
11597/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011598 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011599 *
11600 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011601void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011602 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011603{
11604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11605 tWDA_CbContext *pWDA;
11606 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011607 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011608 vos_msg_t vosMsg;
11609
11610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011611 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011612
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011613 if(NULL == pWdaParams)
11614 {
11615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11616 "%s: pWdaParams received NULL", __func__);
11617 VOS_ASSERT(0);
11618 return;
11619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011620
Nirav Shah374de6e2014-02-13 16:40:01 +053011621 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11622 if(NULL == pGtkOffloadGetInfoRsp)
11623 {
11624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11625 "%s: vos_mem_malloc failed ", __func__);
11626 VOS_ASSERT(0);
11627 return;
11628 }
11629
Jeff Johnson295189b2012-06-20 16:38:30 -070011630 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11631 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11632
11633 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11634 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11635
11636 /* Message Header */
11637 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011638 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011639
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011640 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11641 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11642 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11643 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11644 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011645
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011646 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11647 pwdiGtkOffloadGetInfoRsparams->bssId,
11648 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011649 /* VOS message wrapper */
11650 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11651 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11652 vosMsg.bodyval = 0;
11653
11654 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11655 {
11656 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011657 vos_mem_zero(pGtkOffloadGetInfoRsp,
11658 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011659 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11660 }
11661
11662 vos_mem_free(pWdaParams->wdaMsgParam) ;
11663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11664 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011665
11666 return;
11667}
11668/*
11669 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11670 * Free memory and send RSP back to SME.
11671 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11672 */
11673void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11674{
11675 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11676 vos_msg_t vosMsg;
11677
11678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11679 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11680
11681 if(NULL == pWdaParams)
11682 {
11683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11684 "%s: pWdaParams received NULL", __func__);
11685 VOS_ASSERT(0);
11686 return;
11687 }
11688
11689 /* VOS message wrapper */
11690 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11691 vosMsg.bodyptr = NULL;
11692 vosMsg.bodyval = 0;
11693
11694 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11695 {
11696 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11697 vos_mem_free(pWdaParams->wdaMsgParam);
11698 vos_mem_free(pWdaParams);
11699 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11700 }
11701
11702 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011703}
11704#endif
11705
11706/*
11707 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11708 * Request to WDI to set Tx Per Tracking configurations
11709 */
11710VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11711{
11712 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011713 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11715 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11716 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11717 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011719 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011720 if(NULL == pwdiSetTxPerTrackingReqParams)
11721 {
11722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011723 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011724 vos_mem_free(pTxPerTrackingParams);
11725 VOS_ASSERT(0);
11726 return VOS_STATUS_E_NOMEM;
11727 }
11728 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11729 if(NULL == pWdaParams)
11730 {
11731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011733 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11734 vos_mem_free(pTxPerTrackingParams);
11735 VOS_ASSERT(0);
11736 return VOS_STATUS_E_NOMEM;
11737 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011738 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11739 pTxPerTrackingParams->ucTxPerTrackingEnable;
11740 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11741 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11742 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11743 pTxPerTrackingParams->ucTxPerTrackingRatio;
11744 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11745 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011746 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11747 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011748 /* Store param pointer as passed in by caller */
11749 /* store Params pass it to WDI
11750 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11751 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11752 pWdaParams->pWdaContext = pWDA;
11753 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011754 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011755 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011756 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011757 {
11758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11759 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011760 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011761 vos_mem_free(pWdaParams->wdaMsgParam) ;
11762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11763 vos_mem_free(pWdaParams) ;
11764 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011765 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011766
11767}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011768/*
11769 * FUNCTION: WDA_HALDumpCmdCallback
11770 * Send the VOS complete .
11771 */
11772void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11773 void* pUserData)
11774{
11775 tANI_U8 *buffer = NULL;
11776 tWDA_CbContext *pWDA = NULL;
11777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 if(NULL == pWdaParams)
11779 {
11780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011781 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 VOS_ASSERT(0) ;
11783 return ;
11784 }
11785
11786 pWDA = pWdaParams->pWdaContext;
11787 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 if(wdiRspParams->usBufferLen > 0)
11789 {
11790 /*Copy the Resp data to UMAC supplied buffer*/
11791 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11792 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11794 vos_mem_free(pWdaParams);
11795
11796 /* Indicate VOSS about the start complete */
11797 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011798 return ;
11799}
11800
Jeff Johnson295189b2012-06-20 16:38:30 -070011801/*
11802 * FUNCTION: WDA_ProcessHALDumpCmdReq
11803 * Send Dump command to WDI
11804 */
11805VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11806 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11807 tANI_U32 arg4, tANI_U8 *pBuffer)
11808{
11809 WDI_Status status = WDI_STATUS_SUCCESS;
11810 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11811 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11812 tWDA_ReqParams *pWdaParams ;
11813 pVosContextType pVosContext = NULL;
11814 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011815 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11816 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011817 if(pVosContext)
11818 {
11819 if (pVosContext->isLogpInProgress)
11820 {
11821 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11822 "%s:LOGP in Progress. Ignore!!!", __func__);
11823 return VOS_STATUS_E_BUSY;
11824 }
11825 }
11826 else
11827 {
11828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11829 "%s: VOS Context Null", __func__);
11830 return VOS_STATUS_E_RESOURCES;
11831 }
11832
Jeff Johnson295189b2012-06-20 16:38:30 -070011833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11834 if(NULL == pWdaParams)
11835 {
11836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011838 return VOS_STATUS_E_NOMEM;
11839 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011840 /* Allocate memory WDI request structure*/
11841 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11842 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11843 if(NULL == wdiHALDumpCmdReqParam)
11844 {
11845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11846 "WDA HAL DUMP Command buffer alloc fail");
11847 vos_mem_free(pWdaParams);
11848 return WDI_STATUS_E_FAILURE;
11849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011850 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011851 /* Extract the arguments */
11852 wdiHalDumpCmdInfo->command = cmd;
11853 wdiHalDumpCmdInfo->argument1 = arg1;
11854 wdiHalDumpCmdInfo->argument2 = arg2;
11855 wdiHalDumpCmdInfo->argument3 = arg3;
11856 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011857 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011858 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11859
11860 /* Response message will be passed through the buffer */
11861 pWdaParams->wdaMsgParam = (void *)pBuffer;
11862
11863 /* store Params pass it to WDI */
11864 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011865 /* Send command to WDI */
11866 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011867 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011868 if ( vStatus != VOS_STATUS_SUCCESS )
11869 {
11870 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11871 {
11872 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011873 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011874 }
11875 else
11876 {
11877 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011878 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 }
11880 VOS_ASSERT(0);
11881 }
11882 return status;
11883}
Jeff Johnson295189b2012-06-20 16:38:30 -070011884#ifdef WLAN_FEATURE_GTK_OFFLOAD
11885/*
11886 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11887 * Request to WDI to get GTK Offload Information
11888 */
11889VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11890 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11891{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011892 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011893 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11894 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11895 tWDA_ReqParams *pWdaParams ;
11896
11897 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11898 {
11899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011901 VOS_ASSERT(0);
11902 return VOS_STATUS_E_NOMEM;
11903 }
11904
11905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11906 if(NULL == pWdaParams)
11907 {
11908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011910 VOS_ASSERT(0);
11911 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11912 return VOS_STATUS_E_NOMEM;
11913 }
11914
Yue Ma7f44bbe2013-04-12 11:47:39 -070011915 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11916 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011917
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 /* Store Params pass it to WDI */
11919 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11920 pWdaParams->pWdaContext = pWDA;
11921 /* Store param pointer as passed in by caller */
11922 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11923
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011924 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011925 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011926
Yue Ma7f44bbe2013-04-12 11:47:39 -070011927 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011928
11929 if(IS_WDI_STATUS_FAILURE(status))
11930 {
11931 /* failure returned by WDI API */
11932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11933 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11935 vos_mem_free(pWdaParams) ;
11936 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11937 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11938 }
11939
11940 return CONVERT_WDI2VOS_STATUS(status) ;
11941}
11942#endif // WLAN_FEATURE_GTK_OFFLOAD
11943
11944/*
Yue Mab9c86f42013-08-14 15:59:08 -070011945 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11946 *
11947 */
11948VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11949 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11950{
11951 WDI_Status wdiStatus;
11952 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11953
11954 addPeriodicTxPtrnParams =
11955 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11956
11957 if (NULL == addPeriodicTxPtrnParams)
11958 {
11959 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11960 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11961 __func__);
11962
11963 return VOS_STATUS_E_NOMEM;
11964 }
11965
11966 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11967 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11968
11969 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11970 addPeriodicTxPtrnParams->pUserData = pWDA;
11971
11972 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11973
11974 if (WDI_STATUS_PENDING == wdiStatus)
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 != wdiStatus)
11980 {
11981 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11982 "Failure in %s:%d", __func__, __LINE__ );
11983 }
11984
11985 vos_mem_free(addPeriodicTxPtrnParams);
11986
11987 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11988}
11989
11990/*
11991 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11992 *
11993 */
11994VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11995 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11996{
11997 WDI_Status wdiStatus;
11998 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11999
12000 delPeriodicTxPtrnParams =
12001 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12002
12003 if (NULL == delPeriodicTxPtrnParams)
12004 {
12005 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12006 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12007 __func__);
12008
12009 return VOS_STATUS_E_NOMEM;
12010 }
12011
12012 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12013 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12014
12015 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12016 delPeriodicTxPtrnParams->pUserData = pWDA;
12017
12018 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12019
12020 if (WDI_STATUS_PENDING == wdiStatus)
12021 {
12022 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12023 "Pending received for %s:%d", __func__, __LINE__ );
12024 }
12025 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12026 {
12027 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12028 "Failure in %s:%d", __func__, __LINE__ );
12029 }
12030
12031 vos_mem_free(delPeriodicTxPtrnParams);
12032
12033 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12034}
12035
Rajeev79dbe4c2013-10-05 11:03:42 +053012036#ifdef FEATURE_WLAN_BATCH_SCAN
12037/*
12038 * FUNCTION: WDA_ProcessStopBatchScanInd
12039 *
12040 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12041 *
12042 * PARAM:
12043 * pWDA: pointer to WDA context
12044 * pReq: pointer to stop batch scan request
12045 */
12046VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12047 tSirStopBatchScanInd *pReq)
12048{
12049 WDI_Status wdiStatus;
12050 WDI_StopBatchScanIndType wdiReq;
12051
12052 wdiReq.param = pReq->param;
12053
12054 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12055
12056 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12057 {
12058 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12059 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12060 }
12061
12062 vos_mem_free(pReq);
12063
12064 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12065}
12066/*==========================================================================
12067 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12068
12069 DESCRIPTION
12070 API to pull batch scan result from FW
12071
12072 PARAMETERS
12073 pWDA: Pointer to WDA context
12074 pGetBatchScanReq: Pointer to get batch scan result indication
12075
12076 RETURN VALUE
12077 NONE
12078
12079===========================================================================*/
12080VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12081 tSirTriggerBatchScanResultInd *pReq)
12082{
12083 WDI_Status wdiStatus;
12084 WDI_TriggerBatchScanResultIndType wdiReq;
12085
12086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12087 "------> %s " ,__func__);
12088
12089 wdiReq.param = pReq->param;
12090
12091 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12092
12093 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12094 {
12095 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12096 "Trigger batch scan result ind failed %s:%d",
12097 __func__, wdiStatus);
12098 }
12099
12100 vos_mem_free(pReq);
12101
12102 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12103}
12104
12105/*==========================================================================
12106 FUNCTION WDA_SetBatchScanRespCallback
12107
12108 DESCRIPTION
12109 API to process set batch scan response from FW
12110
12111 PARAMETERS
12112 pRsp: Pointer to set batch scan response
12113 pUserData: Pointer to user data
12114
12115 RETURN VALUE
12116 NONE
12117
12118===========================================================================*/
12119void WDA_SetBatchScanRespCallback
12120(
12121 WDI_SetBatchScanRspType *pRsp,
12122 void* pUserData
12123)
12124{
12125 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12126 tpAniSirGlobal pMac;
12127 void *pCallbackContext;
12128 tWDA_CbContext *pWDA = NULL ;
12129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12130
12131
12132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12133 "<------ %s " ,__func__);
12134 if (NULL == pWdaParams)
12135 {
12136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12137 "%s: pWdaParams received NULL", __func__);
12138 VOS_ASSERT(0) ;
12139 return ;
12140 }
12141
12142 /*extract WDA context*/
12143 pWDA = pWdaParams->pWdaContext;
12144 if (NULL == pWDA)
12145 {
12146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12147 "%s:pWDA is NULL can't invole HDD callback",
12148 __func__);
12149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12150 vos_mem_free(pWdaParams->wdaMsgParam);
12151 vos_mem_free(pWdaParams);
12152 VOS_ASSERT(0);
12153 return;
12154 }
12155
12156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12157 vos_mem_free(pWdaParams->wdaMsgParam);
12158 vos_mem_free(pWdaParams);
12159
12160 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12161 if (NULL == pMac)
12162 {
12163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12164 "%s:pMac is NULL", __func__);
12165 VOS_ASSERT(0);
12166 return;
12167 }
12168
12169 pHddSetBatchScanRsp =
12170 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12171 if (NULL == pHddSetBatchScanRsp)
12172 {
12173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12174 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12175 VOS_ASSERT(0);
12176 return;
12177 }
12178
12179 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12180
12181 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12182 /*call hdd callback with set batch scan response data*/
12183 if(pMac->pmc.setBatchScanReqCallback)
12184 {
12185 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12186 }
12187 else
12188 {
12189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12190 "%s:HDD callback is null", __func__);
12191 VOS_ASSERT(0);
12192 }
12193
12194 vos_mem_free(pHddSetBatchScanRsp);
12195 return ;
12196}
12197
12198/*==========================================================================
12199 FUNCTION WDA_ProcessSetBatchScanReq
12200
12201 DESCRIPTION
12202 API to send set batch scan request to WDI
12203
12204 PARAMETERS
12205 pWDA: Pointer to WDA context
12206 pSetBatchScanReq: Pointer to set batch scan req
12207
12208 RETURN VALUE
12209 NONE
12210
12211===========================================================================*/
12212VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12213 tSirSetBatchScanReq *pSetBatchScanReq)
12214{
12215 WDI_Status status;
12216 tWDA_ReqParams *pWdaParams ;
12217 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12218
12219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12220 "------> %s " ,__func__);
12221
12222 pWdiSetBatchScanReq =
12223 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12224 if (NULL == pWdiSetBatchScanReq)
12225 {
12226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12227 "%s: VOS MEM Alloc Failure", __func__);
12228 vos_mem_free(pSetBatchScanReq);
12229 VOS_ASSERT(0);
12230 return VOS_STATUS_E_NOMEM;
12231 }
12232
12233 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12234 if (NULL == pWdaParams)
12235 {
12236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12237 "%s: VOS MEM Alloc Failure", __func__);
12238 VOS_ASSERT(0);
12239 vos_mem_free(pSetBatchScanReq);
12240 vos_mem_free(pWdiSetBatchScanReq);
12241 return VOS_STATUS_E_NOMEM;
12242 }
12243
12244 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12245 pWdiSetBatchScanReq->numberOfScansToBatch =
12246 pSetBatchScanReq->numberOfScansToBatch;
12247 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12248 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12249 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12250
12251 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12252 pWdaParams->pWdaContext = pWDA;
12253 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12254
12255 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12256 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12257 if (IS_WDI_STATUS_FAILURE(status))
12258 {
12259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12260 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12262 vos_mem_free(pWdaParams->wdaMsgParam);
12263 vos_mem_free(pWdaParams);
12264 }
12265 return CONVERT_WDI2VOS_STATUS(status);
12266}
12267
12268#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012269/*
12270 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12271 *
12272 * DESCRIPTION: This function sends start/update OBSS scan
12273 * inidcation message to WDI
12274 *
12275 * PARAM:
12276 * pWDA: pointer to WDA context
12277 * pReq: pointer to start OBSS scan request
12278 */
12279VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12280 tSirHT40OBSSScanInd *pReq)
12281{
12282 WDI_Status status;
12283 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12284 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012285
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12287 "------> %s " ,__func__);
12288 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12289 wdiOBSSScanParams.pUserData = pWDA;
12290
12291 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12292 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12293 pWdiOBSSScanInd->scanType = pReq->scanType;
12294 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12295 pReq->OBSSScanActiveDwellTime;
12296 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12297 pReq->OBSSScanPassiveDwellTime;
12298 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12299 pReq->BSSChannelWidthTriggerScanInterval;
12300 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12301 pReq->BSSWidthChannelTransitionDelayFactor;
12302 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12303 pReq->OBSSScanActiveTotalPerChannel;
12304 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12305 pReq->OBSSScanPassiveTotalPerChannel;
12306 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12307 pReq->OBSSScanActivityThreshold;
12308 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12309 vos_mem_copy(pWdiOBSSScanInd->channels,
12310 pReq->channels,
12311 pReq->channelCount);
12312 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12313 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12314 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12315 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12316 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12317
12318 vos_mem_copy(pWdiOBSSScanInd->ieField,
12319 pReq->ieField,
12320 pReq->ieFieldLen);
12321
12322 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12323 if (WDI_STATUS_PENDING == status)
12324 {
12325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12326 "Pending received for %s:%d ",__func__,__LINE__ );
12327 }
12328 else if (WDI_STATUS_SUCCESS_SYNC != status)
12329 {
12330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12331 "Failure in %s:%d ",__func__,__LINE__ );
12332 }
12333 return CONVERT_WDI2VOS_STATUS(status) ;
12334}
12335/*
12336 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12337 *
12338 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12339 *
12340 * PARAM:
12341 * pWDA: pointer to WDA context
12342 * pReq: pointer to stop batch scan request
12343 */
12344VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12345 tANI_U8 *bssIdx)
12346{
12347 WDI_Status status;
12348
12349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12350 "------> %s " ,__func__);
12351
12352 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12353 if (WDI_STATUS_PENDING == status)
12354 {
12355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12356 "Pending received for %s:%d ",__func__,__LINE__ );
12357 }
12358 else if (WDI_STATUS_SUCCESS_SYNC != status)
12359 {
12360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12361 "Failure in %s:%d ",__func__,__LINE__ );
12362 }
12363 return CONVERT_WDI2VOS_STATUS(status) ;
12364}
Yue Mab9c86f42013-08-14 15:59:08 -070012365/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012366 * FUNCTION: WDA_ProcessRateUpdateInd
12367 *
12368 */
12369VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12370 tSirRateUpdateInd *pRateUpdateParams)
12371{
12372 WDI_Status wdiStatus;
12373 WDI_RateUpdateIndParams rateUpdateParams;
12374
12375 vos_mem_copy(rateUpdateParams.bssid,
12376 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12377
12378 rateUpdateParams.ucastDataRateTxFlag =
12379 pRateUpdateParams->ucastDataRateTxFlag;
12380 rateUpdateParams.reliableMcastDataRateTxFlag =
12381 pRateUpdateParams->reliableMcastDataRateTxFlag;
12382 rateUpdateParams.mcastDataRate24GHzTxFlag =
12383 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12384 rateUpdateParams.mcastDataRate5GHzTxFlag =
12385 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12386
12387 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12388 rateUpdateParams.reliableMcastDataRate =
12389 pRateUpdateParams->reliableMcastDataRate;
12390 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12391 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12392
12393 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12394 rateUpdateParams.pUserData = pWDA;
12395
12396 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12397
12398 if (WDI_STATUS_PENDING == wdiStatus)
12399 {
12400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12401 "Pending received for %s:%d", __func__, __LINE__ );
12402 }
12403 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12404 {
12405 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12406 "Failure in %s:%d", __func__, __LINE__ );
12407 }
12408
12409 vos_mem_free(pRateUpdateParams);
12410
12411 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12412}
12413
12414/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012415 * -------------------------------------------------------------------------
12416 * DATA interface with WDI for Mgmt Frames
12417 * -------------------------------------------------------------------------
12418 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012419/*
12420 * FUNCTION: WDA_TxComplete
12421 * Callback function for the WDA_TxPacket
12422 */
12423VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12424 VOS_STATUS status )
12425{
12426
12427 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12428 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012429 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012430
12431 if(NULL == wdaContext)
12432 {
12433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12434 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012435 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012436 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012437 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012438 return VOS_STATUS_E_FAILURE;
12439 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012440
12441 /*Check if frame was timed out or not*/
12442 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12443 (v_PVOID_t)&uUserData);
12444
12445 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12446 {
12447 /*Discard frame - no further processing is needed*/
12448 vos_pkt_return_packet(pData);
12449 return VOS_STATUS_SUCCESS;
12450 }
12451
Jeff Johnson295189b2012-06-20 16:38:30 -070012452 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12453 if( NULL!=wdaContext->pTxCbFunc)
12454 {
12455 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012456 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012457 {
12458 wdaContext->pTxCbFunc(pMac, pData);
12459 }
12460 else
12461 {
12462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012463 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012464 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012465 //Return from here since we reaching here because the packet already timeout
12466 return status;
12467 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012468 }
12469
12470 /*
12471 * Trigger the event to bring the HAL TL Tx complete function to come
12472 * out of wait
12473 * Let the coe above to complete the packet first. When this event is set,
12474 * the thread waiting for the event may run and set Vospacket_freed causing the original
12475 * packet not being freed.
12476 */
12477 status = vos_event_set(&wdaContext->txFrameEvent);
12478 if(!VOS_IS_STATUS_SUCCESS(status))
12479 {
12480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012481 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012482 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 return status;
12484}
Jeff Johnson295189b2012-06-20 16:38:30 -070012485/*
12486 * FUNCTION: WDA_TxPacket
12487 * Forward TX management frame to WDI
12488 */
12489VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12490 void *pFrmBuf,
12491 tANI_U16 frmLen,
12492 eFrameType frmType,
12493 eFrameTxDir txDir,
12494 tANI_U8 tid,
12495 pWDATxRxCompFunc pCompFunc,
12496 void *pData,
12497 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012498 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012499{
12500 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12501 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12502 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12503 tANI_U8 eventIdx = 0;
12504 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12505 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012506 if((NULL == pWDA)||(NULL == pFrmBuf))
12507 {
12508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012509 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012510 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012511 VOS_ASSERT(0);
12512 return VOS_STATUS_E_FAILURE;
12513 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012514
Jeff Johnson295189b2012-06-20 16:38:30 -070012515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012516 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012517 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12518 if(NULL == pMac)
12519 {
12520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012521 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012522 VOS_ASSERT(0);
12523 return VOS_STATUS_E_FAILURE;
12524 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012525
Jeff Johnson295189b2012-06-20 16:38:30 -070012526 /* store the call back function in WDA context */
12527 pWDA->pTxCbFunc = pCompFunc;
12528 /* store the call back for the function of ackTxComplete */
12529 if( pAckTxComp )
12530 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012531 if( NULL != pWDA->pAckTxCbFunc )
12532 {
12533 /* Already TxComp is active no need to active again */
12534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012535 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012536 pWDA->pAckTxCbFunc( pMac, 0);
12537 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012538
Jeff Johnsone7245742012-09-05 17:12:55 -070012539 if( VOS_STATUS_SUCCESS !=
12540 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12541 {
12542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12543 "Tx Complete timeout Timer Stop Failed ");
12544 }
12545 else
12546 {
12547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012548 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012549 }
12550 }
12551
12552 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12553 pWDA->pAckTxCbFunc = pAckTxComp;
12554 if( VOS_STATUS_SUCCESS !=
12555 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12556 {
12557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12558 "Tx Complete Timer Start Failed ");
12559 pWDA->pAckTxCbFunc = NULL;
12560 return eHAL_STATUS_FAILURE;
12561 }
12562 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012563 /* Reset the event to be not signalled */
12564 status = vos_event_reset(&pWDA->txFrameEvent);
12565 if(!VOS_IS_STATUS_SUCCESS(status))
12566 {
12567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012568 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012569 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12570 if( pAckTxComp )
12571 {
12572 pWDA->pAckTxCbFunc = NULL;
12573 if( VOS_STATUS_SUCCESS !=
12574 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12575 {
12576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12577 "Tx Complete timeout Timer Stop Failed ");
12578 }
12579 }
12580 return VOS_STATUS_E_FAILURE;
12581 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012582
12583 /* If Peer Sta mask is set don't overwrite to self sta */
12584 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012585 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012586 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012587 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012588 else
12589 {
Ganesh K08bce952012-12-13 15:04:41 -080012590 /* Get system role, use the self station if in unknown role or STA role */
12591 systemRole = wdaGetGlobalSystemRole(pMac);
12592 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12593 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012594#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012595 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012596#endif
Ganesh K08bce952012-12-13 15:04:41 -080012597 ))
12598 {
12599 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12600 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012601 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012602
Jeff Johnsone7245742012-09-05 17:12:55 -070012603 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12604 disassoc frame reaches the HW, HAL has already deleted the peer station */
12605 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012606 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012607 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012608 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012609 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012610 /*Send Probe request frames on self sta idx*/
12611 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012613 /* Since we donot want probe responses to be retried, send probe responses
12614 through the NO_ACK queues */
12615 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12616 {
12617 //probe response is sent out using self station and no retries options.
12618 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12619 }
12620 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12621 {
12622 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12623 }
12624 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012625 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012626
12627 /*Set frame tag to 0
12628 We will use the WDA user data in order to tag a frame as expired*/
12629 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12630 (v_PVOID_t)0);
12631
12632
12633 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12634 frmLen, ucTypeSubType, tid,
12635 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12636 {
12637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012638 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012639 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012640 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 -070012641 if( pAckTxComp )
12642 {
12643 pWDA->pAckTxCbFunc = NULL;
12644 if( VOS_STATUS_SUCCESS !=
12645 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12646 {
12647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12648 "Tx Complete timeout Timer Stop Failed ");
12649 }
12650 }
12651 return VOS_STATUS_E_FAILURE;
12652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012653 /*
12654 * Wait for the event to be set by the TL, to get the response of TX
12655 * complete, this event should be set by the Callback function called by TL
12656 */
12657 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12658 &eventIdx);
12659 if(!VOS_IS_STATUS_SUCCESS(status))
12660 {
12661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12662 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012663 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012664
12665 /*Tag Frame as timed out for later deletion*/
12666 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12667 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070012668 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12669 after the packet gets completed(packet freed once)*/
12670
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012671 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012672 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012673
Jeff Johnson295189b2012-06-20 16:38:30 -070012674 /* check whether the packet was freed already,so need not free again when
12675 * TL calls the WDA_Txcomplete routine
12676 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012677 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12678 /*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 -070012679 {
12680 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012681 } */
12682
Jeff Johnson295189b2012-06-20 16:38:30 -070012683 if( pAckTxComp )
12684 {
12685 pWDA->pAckTxCbFunc = NULL;
12686 if( VOS_STATUS_SUCCESS !=
12687 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12688 {
12689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12690 "Tx Complete timeout Timer Stop Failed ");
12691 }
12692 }
12693 status = VOS_STATUS_E_FAILURE;
12694 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012695#ifdef WLAN_DUMP_MGMTFRAMES
12696 if (VOS_IS_STATUS_SUCCESS(status))
12697 {
12698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12699 "%s() TX packet : SubType %d", __func__,pFc->subType);
12700 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12701 pData, frmLen);
12702 }
12703#endif
12704
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012705 if (VOS_IS_STATUS_SUCCESS(status))
12706 {
12707 if (pMac->fEnableDebugLog & 0x1)
12708 {
12709 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12710 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12711 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12712 {
12713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12714 pFc->type, pFc->subType);
12715 }
12716 }
12717 }
12718
12719
Jeff Johnson295189b2012-06-20 16:38:30 -070012720 return status;
12721}
Jeff Johnson295189b2012-06-20 16:38:30 -070012722/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012723 * FUNCTION: WDA_ProcessDHCPStartInd
12724 * Forward DHCP Start to WDI
12725 */
12726static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12727 tAniDHCPInd *dhcpStartInd)
12728{
12729 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012730 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012731
c_hpothu0b0cab72014-02-13 21:52:40 +053012732 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12733 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012734 sizeof(tSirMacAddr));
12735
c_hpothu0b0cab72014-02-13 21:52:40 +053012736 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012737
c_hpothu0b0cab72014-02-13 21:52:40 +053012738 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012739 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12741 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012742 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012743 else if (WDI_STATUS_SUCCESS_SYNC != status)
12744 {
12745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12746 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12747 }
12748
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012749 vos_mem_free(dhcpStartInd);
12750 return CONVERT_WDI2VOS_STATUS(status) ;
12751}
12752
12753 /*
12754 * FUNCTION: WDA_ProcessDHCPStopInd
12755 * Forward DHCP Stop to WDI
12756 */
12757 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12758 tAniDHCPInd *dhcpStopInd)
12759 {
12760 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012761 WDI_DHCPInd wdiDHCPInd;
12762
12763 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12764 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12765
12766 status = WDI_dhcpStopInd(&wdiDHCPInd);
12767
12768 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012769 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12771 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012772 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012773 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012774 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12776 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012777 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012778
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012779 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012780
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012781 return CONVERT_WDI2VOS_STATUS(status) ;
12782 }
12783
12784/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012785 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12786 *
12787 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12788 *
12789 * PARAM:
12790 * pWDA: pointer to WDA context
12791 * pReq: pointer to stop batch scan request
12792 */
12793VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12794 tpSpoofMacAddrReqParams pReq)
12795{
12796 WDI_Status wdiStatus;
12797 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12798 tWDA_ReqParams *pWdaParams;
12799
12800 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12801 sizeof(WDI_SpoofMacAddrInfoType));
12802 if(NULL == WDI_SpoofMacAddrInfoParams) {
12803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12804 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12805 VOS_ASSERT(0);
12806 return VOS_STATUS_E_NOMEM;
12807 }
12808 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12809 if(NULL == pWdaParams) {
12810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12811 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012812 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012813 VOS_ASSERT(0);
12814 return VOS_STATUS_E_NOMEM;
12815 }
12816
12817 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12818 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12819
12820 pWdaParams->pWdaContext = pWDA;
12821 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012822 pWdaParams->wdaMsgParam = (void *)pReq;
12823
12824 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12825 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12826
Siddharth Bhal171788a2014-09-29 21:02:40 +053012827 /* store Params pass it to WDI */
12828 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12829
12830 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012831 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12832 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012833
12834 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12835 {
12836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12837 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12839 vos_mem_free(pWdaParams->wdaMsgParam);
12840 vos_mem_free(pWdaParams);
12841 }
12842
12843 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12844}
12845
12846/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012847 * FUNCTION: WDA_McProcessMsg
12848 * Trigger DAL-AL to start CFG download
12849 */
12850VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12851{
12852 VOS_STATUS status = VOS_STATUS_SUCCESS;
12853 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012854 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070012855 {
12856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012857 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 VOS_ASSERT(0);
12859 return VOS_STATUS_E_FAILURE;
12860 }
12861
12862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012863 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012864
12865 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12866 if(NULL == pWDA )
12867 {
12868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012869 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012870 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012871 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012872 return VOS_STATUS_E_FAILURE;
12873 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 /* Process all the WDA messages.. */
12875 switch( pMsg->type )
12876 {
12877 case WNI_CFG_DNLD_REQ:
12878 {
12879 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012880 /* call WDA complete event if config download success */
12881 if( VOS_IS_STATUS_SUCCESS(status) )
12882 {
12883 vos_WDAComplete_cback(pVosContext);
12884 }
12885 else
12886 {
12887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12888 "WDA Config Download failure" );
12889 }
12890 break ;
12891 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012892 /*
12893 * Init SCAN request from PE, convert it into DAL format
12894 * and send it to DAL
12895 */
12896 case WDA_INIT_SCAN_REQ:
12897 {
12898 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12899 break ;
12900 }
12901 /* start SCAN request from PE */
12902 case WDA_START_SCAN_REQ:
12903 {
12904 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12905 break ;
12906 }
12907 /* end SCAN request from PE */
12908 case WDA_END_SCAN_REQ:
12909 {
12910 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12911 break ;
12912 }
12913 /* end SCAN request from PE */
12914 case WDA_FINISH_SCAN_REQ:
12915 {
12916 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12917 break ;
12918 }
12919 /* join request from PE */
12920 case WDA_CHNL_SWITCH_REQ:
12921 {
12922 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12923 {
12924 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12925 }
12926 else
12927 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012928 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12929 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12930 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12931 {
12932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12933 "call ProcessChannelSwitchReq_V1" );
12934 WDA_ProcessChannelSwitchReq_V1(pWDA,
12935 (tSwitchChannelParams*)pMsg->bodyptr) ;
12936 }
12937 else
12938 {
12939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12940 "call ProcessChannelSwitchReq" );
12941 WDA_ProcessChannelSwitchReq(pWDA,
12942 (tSwitchChannelParams*)pMsg->bodyptr) ;
12943 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012944 }
12945 break ;
12946 }
12947 /* ADD BSS request from PE */
12948 case WDA_ADD_BSS_REQ:
12949 {
12950 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12951 break ;
12952 }
12953 case WDA_ADD_STA_REQ:
12954 {
12955 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12956 break ;
12957 }
12958 case WDA_DELETE_BSS_REQ:
12959 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012960 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12961 break ;
12962 }
12963 case WDA_DELETE_STA_REQ:
12964 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012965 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12966 break ;
12967 }
12968 case WDA_CONFIG_PARAM_UPDATE_REQ:
12969 {
12970 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12971 break ;
12972 }
12973 case WDA_SET_BSSKEY_REQ:
12974 {
12975 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12976 break ;
12977 }
12978 case WDA_SET_STAKEY_REQ:
12979 {
12980 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12981 break ;
12982 }
12983 case WDA_SET_STA_BCASTKEY_REQ:
12984 {
12985 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12986 break ;
12987 }
12988 case WDA_REMOVE_BSSKEY_REQ:
12989 {
12990 WDA_ProcessRemoveBssKeyReq(pWDA,
12991 (tRemoveBssKeyParams *)pMsg->bodyptr);
12992 break ;
12993 }
12994 case WDA_REMOVE_STAKEY_REQ:
12995 {
12996 WDA_ProcessRemoveStaKeyReq(pWDA,
12997 (tRemoveStaKeyParams *)pMsg->bodyptr);
12998 break ;
12999 }
13000 case WDA_REMOVE_STA_BCASTKEY_REQ:
13001 {
13002 /* TODO: currently UMAC is not sending this request, Add the code for
13003 handling this request when UMAC supports */
13004 break;
13005 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013006#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013007 case WDA_TSM_STATS_REQ:
13008 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013009 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013010 break;
13011 }
13012#endif
13013 case WDA_UPDATE_EDCA_PROFILE_IND:
13014 {
13015 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13016 break;
13017 }
13018 case WDA_ADD_TS_REQ:
13019 {
13020 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13021 break;
13022 }
13023 case WDA_DEL_TS_REQ:
13024 {
13025 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13026 break;
13027 }
13028 case WDA_ADDBA_REQ:
13029 {
13030 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13031 break;
13032 }
13033 case WDA_DELBA_IND:
13034 {
13035 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13036 break;
13037 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013038 case WDA_UPDATE_CHAN_LIST_REQ:
13039 {
13040 WDA_ProcessUpdateChannelList(pWDA,
13041 (tSirUpdateChanList *)pMsg->bodyptr);
13042 break;
13043 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013044 case WDA_SET_LINK_STATE:
13045 {
13046 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13047 break;
13048 }
13049 case WDA_GET_STATISTICS_REQ:
13050 {
13051 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13052 break;
13053 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013054#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013055 case WDA_GET_ROAM_RSSI_REQ:
13056 {
13057 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13058 break;
13059 }
13060#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013061 case WDA_PWR_SAVE_CFG:
13062 {
13063 if(pWDA->wdaState == WDA_READY_STATE)
13064 {
13065 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13066 }
13067 else
13068 {
13069 if(NULL != pMsg->bodyptr)
13070 {
13071 vos_mem_free(pMsg->bodyptr);
13072 }
13073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13074 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13075 }
13076 break;
13077 }
13078 case WDA_ENTER_IMPS_REQ:
13079 {
13080 if(pWDA->wdaState == WDA_READY_STATE)
13081 {
13082 WDA_ProcessEnterImpsReq(pWDA);
13083 }
13084 else
13085 {
13086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13087 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13088 }
13089 break;
13090 }
13091 case WDA_EXIT_IMPS_REQ:
13092 {
13093 if(pWDA->wdaState == WDA_READY_STATE)
13094 {
13095 WDA_ProcessExitImpsReq(pWDA);
13096 }
13097 else
13098 {
13099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13100 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13101 }
13102 break;
13103 }
13104 case WDA_ENTER_BMPS_REQ:
13105 {
13106 if(pWDA->wdaState == WDA_READY_STATE)
13107 {
13108 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13109 }
13110 else
13111 {
13112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13113 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13114 }
13115 break;
13116 }
13117 case WDA_EXIT_BMPS_REQ:
13118 {
13119 if(pWDA->wdaState == WDA_READY_STATE)
13120 {
13121 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13122 }
13123 else
13124 {
13125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13126 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13127 }
13128 break;
13129 }
13130 case WDA_ENTER_UAPSD_REQ:
13131 {
13132 if(pWDA->wdaState == WDA_READY_STATE)
13133 {
13134 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13135 }
13136 else
13137 {
13138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13139 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13140 }
13141 break;
13142 }
13143 case WDA_EXIT_UAPSD_REQ:
13144 {
13145 if(pWDA->wdaState == WDA_READY_STATE)
13146 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013147 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013148 }
13149 else
13150 {
13151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13152 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13153 }
13154 break;
13155 }
13156 case WDA_UPDATE_UAPSD_IND:
13157 {
13158 if(pWDA->wdaState == WDA_READY_STATE)
13159 {
13160 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13161 }
13162 else
13163 {
13164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13165 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13166 }
13167 break;
13168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 case WDA_REGISTER_PE_CALLBACK :
13170 {
13171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13172 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13173 /*TODO: store the PE callback */
13174 /* Do Nothing? MSG Body should be freed at here */
13175 if(NULL != pMsg->bodyptr)
13176 {
13177 vos_mem_free(pMsg->bodyptr);
13178 }
13179 break;
13180 }
13181 case WDA_SYS_READY_IND :
13182 {
13183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13184 "Handling msg type WDA_SYS_READY_IND " );
13185 pWDA->wdaState = WDA_READY_STATE;
13186 if(NULL != pMsg->bodyptr)
13187 {
13188 vos_mem_free(pMsg->bodyptr);
13189 }
13190 break;
13191 }
13192 case WDA_BEACON_FILTER_IND :
13193 {
13194 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13195 break;
13196 }
13197 case WDA_BTC_SET_CFG:
13198 {
13199 /*TODO: handle this while dealing with BTC */
13200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13201 "Handling msg type WDA_BTC_SET_CFG " );
13202 /* Do Nothing? MSG Body should be freed at here */
13203 if(NULL != pMsg->bodyptr)
13204 {
13205 vos_mem_free(pMsg->bodyptr);
13206 }
13207 break;
13208 }
13209 case WDA_SIGNAL_BT_EVENT:
13210 {
13211 /*TODO: handle this while dealing with BTC */
13212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13213 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13214 /* Do Nothing? MSG Body should be freed at here */
13215 if(NULL != pMsg->bodyptr)
13216 {
13217 vos_mem_free(pMsg->bodyptr);
13218 }
13219 break;
13220 }
13221 case WDA_CFG_RXP_FILTER_REQ:
13222 {
13223 WDA_ProcessConfigureRxpFilterReq(pWDA,
13224 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13225 break;
13226 }
13227 case WDA_SET_HOST_OFFLOAD:
13228 {
13229 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13230 break;
13231 }
13232 case WDA_SET_KEEP_ALIVE:
13233 {
13234 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13235 break;
13236 }
13237#ifdef WLAN_NS_OFFLOAD
13238 case WDA_SET_NS_OFFLOAD:
13239 {
13240 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13241 break;
13242 }
13243#endif //WLAN_NS_OFFLOAD
13244 case WDA_ADD_STA_SELF_REQ:
13245 {
13246 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13247 break;
13248 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013249 case WDA_DEL_STA_SELF_REQ:
13250 {
13251 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13252 break;
13253 }
13254 case WDA_WOWL_ADD_BCAST_PTRN:
13255 {
13256 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13257 break;
13258 }
13259 case WDA_WOWL_DEL_BCAST_PTRN:
13260 {
13261 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13262 break;
13263 }
13264 case WDA_WOWL_ENTER_REQ:
13265 {
13266 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13267 break;
13268 }
13269 case WDA_WOWL_EXIT_REQ:
13270 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013271 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013272 break;
13273 }
13274 case WDA_TL_FLUSH_AC_REQ:
13275 {
13276 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13277 break;
13278 }
13279 case WDA_SIGNAL_BTAMP_EVENT:
13280 {
13281 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13282 break;
13283 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013284 case WDA_FW_STATS_GET_REQ:
13285 {
13286 WDA_ProcessFWStatsGetReq(pWDA,
13287 (tSirFWStatsGetReq *)pMsg->bodyptr);
13288 break;
13289 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013290#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13291 case WDA_LINK_LAYER_STATS_SET_REQ:
13292 {
13293 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13294 break;
13295 }
13296 case WDA_LINK_LAYER_STATS_GET_REQ:
13297 {
13298 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13299 break;
13300 }
13301 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13302 {
13303 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13304 break;
13305 }
13306#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013307#ifdef WLAN_FEATURE_EXTSCAN
13308 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13309 {
13310 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13311 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13312 break;
13313 }
13314 case WDA_EXTSCAN_START_REQ:
13315 {
13316 WDA_ProcessEXTScanStartReq(pWDA,
13317 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13318 break;
13319 }
13320 case WDA_EXTSCAN_STOP_REQ:
13321 {
13322 WDA_ProcessEXTScanStopReq(pWDA,
13323 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13324 break;
13325 }
13326 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13327 {
13328 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13329 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13330 break;
13331 }
13332 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13333 {
13334 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13335 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13336 break;
13337 }
13338 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13339 {
13340 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13341 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13342 break;
13343 }
13344 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13345 {
13346 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13347 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13348 break;
13349 }
13350 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13351 {
13352 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13353 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13354 break;
13355 }
13356#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013357#ifdef WDA_UT
13358 case WDA_WDI_EVENT_MSG:
13359 {
13360 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13361 break ;
13362 }
13363#endif
13364 case WDA_UPDATE_BEACON_IND:
13365 {
13366 WDA_ProcessUpdateBeaconParams(pWDA,
13367 (tUpdateBeaconParams *)pMsg->bodyptr);
13368 break;
13369 }
13370 case WDA_SEND_BEACON_REQ:
13371 {
13372 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13373 break;
13374 }
13375 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13376 {
13377 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13378 (tSendProbeRespParams *)pMsg->bodyptr);
13379 break;
13380 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013381#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013382 case WDA_SET_MAX_TX_POWER_REQ:
13383 {
13384 WDA_ProcessSetMaxTxPowerReq(pWDA,
13385 (tMaxTxPowerParams *)pMsg->bodyptr);
13386 break;
13387 }
13388#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013389 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13390 {
13391 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13392 pMsg->bodyptr);
13393 break;
13394 }
schang86c22c42013-03-13 18:41:24 -070013395 case WDA_SET_TX_POWER_REQ:
13396 {
13397 WDA_ProcessSetTxPowerReq(pWDA,
13398 (tSirSetTxPowerReq *)pMsg->bodyptr);
13399 break;
13400 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013401 case WDA_SET_P2P_GO_NOA_REQ:
13402 {
13403 WDA_ProcessSetP2PGONOAReq(pWDA,
13404 (tP2pPsParams *)pMsg->bodyptr);
13405 break;
13406 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013407 /* timer related messages */
13408 case WDA_TIMER_BA_ACTIVITY_REQ:
13409 {
13410 WDA_BaCheckActivity(pWDA) ;
13411 break ;
13412 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013413
13414 /* timer related messages */
13415 case WDA_TIMER_TRAFFIC_STATS_IND:
13416 {
13417 WDA_TimerTrafficStatsInd(pWDA);
13418 break;
13419 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013420#ifdef WLAN_FEATURE_VOWIFI_11R
13421 case WDA_AGGR_QOS_REQ:
13422 {
13423 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13424 break;
13425 }
13426#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013427 case WDA_FTM_CMD_REQ:
13428 {
13429 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13430 break ;
13431 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013432#ifdef FEATURE_OEM_DATA_SUPPORT
13433 case WDA_START_OEM_DATA_REQ:
13434 {
13435 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13436 break;
13437 }
13438#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013439 /* Tx Complete Time out Indication */
13440 case WDA_TX_COMPLETE_TIMEOUT_IND:
13441 {
13442 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13443 break;
13444 }
13445 case WDA_WLAN_SUSPEND_IND:
13446 {
13447 WDA_ProcessWlanSuspendInd(pWDA,
13448 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13449 break;
13450 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013451 case WDA_WLAN_RESUME_REQ:
13452 {
13453 WDA_ProcessWlanResumeReq(pWDA,
13454 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13455 break;
13456 }
13457
13458 case WDA_UPDATE_CF_IND:
13459 {
13460 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13461 pMsg->bodyptr = NULL;
13462 break;
13463 }
13464#ifdef FEATURE_WLAN_SCAN_PNO
13465 case WDA_SET_PNO_REQ:
13466 {
13467 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13468 break;
13469 }
13470 case WDA_UPDATE_SCAN_PARAMS_REQ:
13471 {
13472 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13473 break;
13474 }
13475 case WDA_SET_RSSI_FILTER_REQ:
13476 {
13477 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13478 break;
13479 }
13480#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013481#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013482 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013483 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013484 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013485 break;
13486 }
13487#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013488 case WDA_SET_TX_PER_TRACKING_REQ:
13489 {
13490 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13491 break;
13492 }
13493
13494#ifdef WLAN_FEATURE_PACKET_FILTERING
13495 case WDA_8023_MULTICAST_LIST_REQ:
13496 {
13497 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13498 break;
13499 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013500 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13501 {
13502 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13503 break;
13504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013505 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13506 {
13507 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13508 break;
13509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013510 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13511 {
13512 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13513 break;
13514 }
13515#endif // WLAN_FEATURE_PACKET_FILTERING
13516
13517
13518 case WDA_TRANSMISSION_CONTROL_IND:
13519 {
13520 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13521 break;
13522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013523 case WDA_SET_POWER_PARAMS_REQ:
13524 {
13525 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13526 break;
13527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013528#ifdef WLAN_FEATURE_GTK_OFFLOAD
13529 case WDA_GTK_OFFLOAD_REQ:
13530 {
13531 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13532 break;
13533 }
13534
13535 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13536 {
13537 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13538 break;
13539 }
13540#endif //WLAN_FEATURE_GTK_OFFLOAD
13541
13542 case WDA_SET_TM_LEVEL_REQ:
13543 {
13544 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13545 break;
13546 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013547
Mohit Khanna4a70d262012-09-11 16:30:12 -070013548 case WDA_UPDATE_OP_MODE:
13549 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013550 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13551 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13552 {
13553 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13554 }
13555 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013556 {
13557 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13558 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13559 else
13560 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013561 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013562 }
13563 else
13564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013565 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013566 break;
13567 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013568#ifdef WLAN_FEATURE_11W
13569 case WDA_EXCLUDE_UNENCRYPTED_IND:
13570 {
13571 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13572 break;
13573 }
13574#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013575#ifdef FEATURE_WLAN_TDLS
13576 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13577 {
13578 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13579 break;
13580 }
13581#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013582 case WDA_DHCP_START_IND:
13583 {
13584 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13585 break;
13586 }
13587 case WDA_DHCP_STOP_IND:
13588 {
13589 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13590 break;
13591 }
Leo Chang9056f462013-08-01 19:21:11 -070013592#ifdef FEATURE_WLAN_LPHB
13593 case WDA_LPHB_CONF_REQ:
13594 {
13595 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13596 break;
13597 }
13598#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013599 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13600 {
13601 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13602 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13603 break;
13604 }
13605 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13606 {
13607 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13608 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13609 break;
13610 }
13611
Rajeev79dbe4c2013-10-05 11:03:42 +053013612#ifdef FEATURE_WLAN_BATCH_SCAN
13613 case WDA_SET_BATCH_SCAN_REQ:
13614 {
13615 WDA_ProcessSetBatchScanReq(pWDA,
13616 (tSirSetBatchScanReq *)pMsg->bodyptr);
13617 break;
13618 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013619 case WDA_RATE_UPDATE_IND:
13620 {
13621 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13622 break;
13623 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013624 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13625 {
13626 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13627 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13628 break;
13629 }
13630 case WDA_STOP_BATCH_SCAN_IND:
13631 {
13632 WDA_ProcessStopBatchScanInd(pWDA,
13633 (tSirStopBatchScanInd *)pMsg->bodyptr);
13634 break;
13635 }
c_hpothu92367912014-05-01 15:18:17 +053013636 case WDA_GET_BCN_MISS_RATE_REQ:
13637 WDA_ProcessGetBcnMissRateReq(pWDA,
13638 (tSirBcnMissRateReq *)pMsg->bodyptr);
13639 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013640#endif
13641
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013642 case WDA_HT40_OBSS_SCAN_IND:
13643 {
13644 WDA_ProcessHT40OBSSScanInd(pWDA,
13645 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13646 break;
13647 }
13648 case WDA_HT40_OBSS_STOP_SCAN_IND:
13649 {
13650 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13651 (tANI_U8*)pMsg->bodyptr);
13652 break;
13653 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013654// tdlsoffchan
13655#ifdef FEATURE_WLAN_TDLS
13656 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13657 {
13658 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13659 break;
13660 }
13661#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013662 case WDA_SPOOF_MAC_ADDR_REQ:
13663 {
13664 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13665 break;
13666 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053013667 case WDA_ENCRYPT_MSG_REQ:
13668 {
13669 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
13670 break;
13671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013672 default:
13673 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013675 "No Handling for msg type %x in WDA "
13676 ,pMsg->type);
13677 /* Do Nothing? MSG Body should be freed at here */
13678 if(NULL != pMsg->bodyptr)
13679 {
13680 vos_mem_free(pMsg->bodyptr);
13681 }
13682 //WDA_VOS_ASSERT(0) ;
13683 }
13684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013685 return status ;
13686}
13687
Jeff Johnson295189b2012-06-20 16:38:30 -070013688/*
13689 * FUNCTION: WDA_LowLevelIndCallback
13690 * IND API callback from WDI, send Ind to PE
13691 */
13692void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13693 void* pUserData )
13694{
13695 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13696#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13697 tSirRSSINotification rssiNotification;
13698#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013699 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070013700 {
13701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013702 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013703 VOS_ASSERT(0);
13704 return ;
13705 }
13706
13707 switch(wdiLowLevelInd->wdiIndicationType)
13708 {
13709 case WDI_RSSI_NOTIFICATION_IND:
13710 {
13711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13712 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013713#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13714 rssiNotification.bReserved =
13715 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13716 rssiNotification.bRssiThres1NegCross =
13717 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13718 rssiNotification.bRssiThres1PosCross =
13719 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13720 rssiNotification.bRssiThres2NegCross =
13721 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13722 rssiNotification.bRssiThres2PosCross =
13723 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13724 rssiNotification.bRssiThres3NegCross =
13725 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13726 rssiNotification.bRssiThres3PosCross =
13727 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013728 rssiNotification.avgRssi = (v_S7_t)
13729 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013730 WLANTL_BMPSRSSIRegionChangedNotification(
13731 pWDA->pVosContext,
13732 &rssiNotification);
13733#endif
13734 break ;
13735 }
13736 case WDI_MISSED_BEACON_IND:
13737 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013738 tpSirSmeMissedBeaconInd pMissBeacInd =
13739 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13741 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013742 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013743 if(NULL == pMissBeacInd)
13744 {
13745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13746 "%s: VOS MEM Alloc Failure", __func__);
13747 break;
13748 }
13749 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13750 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13751 pMissBeacInd->bssIdx =
13752 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13753 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013754 break ;
13755 }
13756 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13757 {
13758 /* TODO: Decode Ind and send Ind to PE */
13759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13760 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13761 break ;
13762 }
13763
13764 case WDI_MIC_FAILURE_IND:
13765 {
13766 tpSirSmeMicFailureInd pMicInd =
13767 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13768
13769 if(NULL == pMicInd)
13770 {
13771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013773 break;
13774 }
13775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13776 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013777 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13778 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13779 vos_mem_copy(pMicInd->bssId,
13780 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13781 sizeof(tSirMacAddr));
13782 vos_mem_copy(pMicInd->info.srcMacAddr,
13783 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13784 sizeof(tSirMacAddr));
13785 vos_mem_copy(pMicInd->info.taMacAddr,
13786 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13787 sizeof(tSirMacAddr));
13788 vos_mem_copy(pMicInd->info.dstMacAddr,
13789 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13790 sizeof(tSirMacAddr));
13791 vos_mem_copy(pMicInd->info.rxMacAddr,
13792 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13793 sizeof(tSirMacAddr));
13794 pMicInd->info.multicast =
13795 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13796 pMicInd->info.keyId=
13797 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13798 pMicInd->info.IV1=
13799 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13800 vos_mem_copy(pMicInd->info.TSC,
13801 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013802 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13803 (void *)pMicInd , 0) ;
13804 break ;
13805 }
13806 case WDI_FATAL_ERROR_IND:
13807 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013808 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013809 /* TODO: Decode Ind and send Ind to PE */
13810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13811 "Received WDI_FATAL_ERROR_IND from WDI ");
13812 break ;
13813 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013814 case WDI_DEL_STA_IND:
13815 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013816 tpDeleteStaContext pDelSTACtx =
13817 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13818
13819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13820 "Received WDI_DEL_STA_IND from WDI ");
13821 if(NULL == pDelSTACtx)
13822 {
13823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013824 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013825 break;
13826 }
13827 vos_mem_copy(pDelSTACtx->addr2,
13828 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13829 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013830 vos_mem_copy(pDelSTACtx->bssId,
13831 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13832 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013833 pDelSTACtx->assocId =
13834 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13835 pDelSTACtx->reasonCode =
13836 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13837 pDelSTACtx->staId =
13838 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013839 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13840 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013841 break ;
13842 }
13843 case WDI_COEX_IND:
13844 {
13845 tANI_U32 index;
13846 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053013847 tSirSmeCoexInd *pSmeCoexInd;
13848
13849 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
13850 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
13851 {
13852 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
13853 {
13854 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13855 FL("Coex state: 0x%x coex feature: 0x%x"),
13856 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
13857 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
13858
13859 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
13860 {
13861 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
13862 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
13863 }
13864 }
13865 break;
13866 }
13867
13868 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013869 if(NULL == pSmeCoexInd)
13870 {
13871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013872 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013873 break;
13874 }
13875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13876 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013877 /* Message Header */
13878 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13879 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013880 /* Info from WDI Indication */
13881 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13882 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13883 {
13884 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13885 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013886 /* VOS message wrapper */
13887 vosMsg.type = eWNI_SME_COEX_IND;
13888 vosMsg.bodyptr = (void *)pSmeCoexInd;
13889 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013890 /* Send message to SME */
13891 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13892 {
13893 /* free the mem and return */
13894 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13895 }
13896 else
13897 {
13898 /* DEBUG */
13899 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13900 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13901 pSmeCoexInd->coexIndType,
13902 pSmeCoexInd->coexIndData[0],
13903 pSmeCoexInd->coexIndData[1],
13904 pSmeCoexInd->coexIndData[2],
13905 pSmeCoexInd->coexIndData[3]);
13906 }
13907 break;
13908 }
13909 case WDI_TX_COMPLETE_IND:
13910 {
13911 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13912 /* Calling TxCompleteAck Indication from wda context*/
13913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13914 "Complete Indication received from HAL");
13915 if( pWDA->pAckTxCbFunc )
13916 {
13917 if( VOS_STATUS_SUCCESS !=
13918 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13919 {
13920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13921 "Tx Complete timeout Timer Stop Failed ");
13922 }
13923 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13924 pWDA->pAckTxCbFunc = NULL;
13925 }
13926 else
13927 {
13928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13929 "Tx Complete Indication is received after timeout ");
13930 }
13931 break;
13932 }
Viral Modid86bde22012-12-10 13:09:21 -080013933 case WDI_P2P_NOA_START_IND :
13934 {
13935 tSirP2PNoaStart *pP2pNoaStart =
13936 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13937
13938 if (NULL == pP2pNoaStart)
13939 {
13940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13941 "Memory allocation failure, "
13942 "WDI_P2P_NOA_START_IND not forwarded");
13943 break;
13944 }
13945 pP2pNoaStart->status =
13946 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13947 pP2pNoaStart->bssIdx =
13948 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13949 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13950 (void *)pP2pNoaStart , 0) ;
13951 break;
13952 }
13953
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013954#ifdef FEATURE_WLAN_TDLS
13955 case WDI_TDLS_IND :
13956 {
13957 tSirTdlsInd *pTdlsInd =
13958 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13959
13960 if (NULL == pTdlsInd)
13961 {
13962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13963 "Memory allocation failure, "
13964 "WDI_TDLS_IND not forwarded");
13965 break;
13966 }
13967 pTdlsInd->status =
13968 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13969 pTdlsInd->assocId =
13970 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13971 pTdlsInd->staIdx =
13972 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13973 pTdlsInd->reasonCode =
13974 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13975 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13976 (void *)pTdlsInd , 0) ;
13977 break;
13978 }
13979#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013980 case WDI_P2P_NOA_ATTR_IND :
13981 {
13982 tSirP2PNoaAttr *pP2pNoaAttr =
13983 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13985 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013986 if (NULL == pP2pNoaAttr)
13987 {
13988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13989 "Memory allocation failure, "
13990 "WDI_P2P_NOA_ATTR_IND not forwarded");
13991 break;
13992 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013993 pP2pNoaAttr->index =
13994 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13995 pP2pNoaAttr->oppPsFlag =
13996 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13997 pP2pNoaAttr->ctWin =
13998 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13999
14000 pP2pNoaAttr->uNoa1IntervalCnt =
14001 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14002 pP2pNoaAttr->uNoa1Duration =
14003 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14004 pP2pNoaAttr->uNoa1Interval =
14005 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14006 pP2pNoaAttr->uNoa1StartTime =
14007 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014008 pP2pNoaAttr->uNoa2IntervalCnt =
14009 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14010 pP2pNoaAttr->uNoa2Duration =
14011 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14012 pP2pNoaAttr->uNoa2Interval =
14013 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14014 pP2pNoaAttr->uNoa2StartTime =
14015 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014016 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14017 (void *)pP2pNoaAttr , 0) ;
14018 break;
14019 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014020#ifdef FEATURE_WLAN_SCAN_PNO
14021 case WDI_PREF_NETWORK_FOUND_IND:
14022 {
14023 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014024 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14025 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14026 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14027 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14028
Jeff Johnson295189b2012-06-20 16:38:30 -070014029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14030 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014031 if (NULL == pPrefNetworkFoundInd)
14032 {
14033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14034 "Memory allocation failure, "
14035 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014036 if (NULL !=
14037 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14038 {
14039 wpalMemoryFree(
14040 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14041 );
14042 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14043 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014044 break;
14045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014046 /* Message Header */
14047 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014048 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014049
14050 /* Info from WDI Indication */
14051 pPrefNetworkFoundInd->ssId.length =
14052 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014053 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014054 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14055 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14056 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014057 if (NULL !=
14058 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14059 {
14060 pPrefNetworkFoundInd->frameLength =
14061 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14062 vos_mem_copy( pPrefNetworkFoundInd->data,
14063 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14064 pPrefNetworkFoundInd->frameLength);
14065 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14066 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14067 }
14068 else
14069 {
14070 pPrefNetworkFoundInd->frameLength = 0;
14071 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014072 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014073 /* VOS message wrapper */
14074 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14075 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14076 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014077 /* Send message to SME */
14078 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14079 {
14080 /* free the mem and return */
14081 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014083 break;
14084 }
14085#endif // FEATURE_WLAN_SCAN_PNO
14086
14087#ifdef WLAN_WAKEUP_EVENTS
14088 case WDI_WAKE_REASON_IND:
14089 {
14090 vos_msg_t vosMsg;
14091 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14092 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14093 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14094
14095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014096 "[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 -070014097 wdiLowLevelInd->wdiIndicationType,
14098 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14099 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14100 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14101
14102 if (NULL == pWakeReasonInd)
14103 {
14104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14105 "Memory allocation failure, "
14106 "WDI_WAKE_REASON_IND not forwarded");
14107 break;
14108 }
14109
14110 vos_mem_zero(pWakeReasonInd, allocSize);
14111
14112 /* Message Header */
14113 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14114 pWakeReasonInd->mesgLen = allocSize;
14115
14116 /* Info from WDI Indication */
14117 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14118 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14119 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14120 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14121 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14122 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14123 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14124 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14125
14126 /* VOS message wrapper */
14127 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14128 vosMsg.bodyptr = (void *) pWakeReasonInd;
14129 vosMsg.bodyval = 0;
14130
14131 /* Send message to SME */
14132 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14133 {
14134 /* free the mem and return */
14135 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14136 }
14137
14138 break;
14139 }
14140#endif // WLAN_WAKEUP_EVENTS
14141
14142 case WDI_TX_PER_HIT_IND:
14143 {
14144 vos_msg_t vosMsg;
14145 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14146 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14147 /* VOS message wrapper */
14148 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14149 vosMsg.bodyptr = NULL;
14150 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014151 /* Send message to SME */
14152 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14153 {
14154 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14155 }
14156 break;
14157 }
14158
Leo Chang9056f462013-08-01 19:21:11 -070014159#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014160 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014161 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014162 vos_msg_t vosMsg;
14163 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014164
Leo Changd9df8aa2013-09-26 13:32:26 -070014165 lphbInd =
14166 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14167 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014168 {
14169 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14170 "%s: LPHB IND buffer alloc Fail", __func__);
14171 return ;
14172 }
14173
Leo Changd9df8aa2013-09-26 13:32:26 -070014174 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014175 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014176 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014177 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014178 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014179 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14180
14181 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014182 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014183 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14184
Leo Changd9df8aa2013-09-26 13:32:26 -070014185 vosMsg.type = eWNI_SME_LPHB_IND;
14186 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014187 vosMsg.bodyval = 0;
14188 /* Send message to SME */
14189 if (VOS_STATUS_SUCCESS !=
14190 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14191 {
14192 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14193 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014194 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014195 }
14196 break;
14197 }
14198#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014199 case WDI_PERIODIC_TX_PTRN_FW_IND:
14200 {
14201 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14202 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14203 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14204 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14205 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14206 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14207 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14208
14209 break;
14210 }
Leo Chang9056f462013-08-01 19:21:11 -070014211
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014212 case WDI_IBSS_PEER_INACTIVITY_IND:
14213 {
14214 tSirIbssPeerInactivityInd *pIbssInd =
14215 (tSirIbssPeerInactivityInd *)
14216 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14217
14218 if (NULL == pIbssInd)
14219 {
14220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14221 "Memory allocation failure, "
14222 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14223 break;
14224 }
14225
14226 pIbssInd->bssIdx =
14227 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14228 pIbssInd->staIdx =
14229 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14230 vos_mem_copy(pIbssInd->peerAddr,
14231 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14232 sizeof(tSirMacAddr));
14233 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14234 break;
14235 }
14236
Rajeev79dbe4c2013-10-05 11:03:42 +053014237#ifdef FEATURE_WLAN_BATCH_SCAN
14238 case WDI_BATCH_SCAN_RESULT_IND:
14239 {
14240 void *pBatchScanResult;
14241 void *pCallbackContext;
14242 tpAniSirGlobal pMac;
14243
14244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14245 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14246
14247 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014248 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014249 {
14250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14251 "%s:pWDA is NULL", __func__);
14252 VOS_ASSERT(0);
14253 return;
14254 }
14255
14256 pBatchScanResult =
14257 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14258 if (NULL == pBatchScanResult)
14259 {
14260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14261 "%s:Batch scan result from FW is null can't invoke HDD callback",
14262 __func__);
14263 VOS_ASSERT(0);
14264 return;
14265 }
14266
14267 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14268 if (NULL == pMac)
14269 {
14270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14271 "%s:pMac is NULL", __func__);
14272 VOS_ASSERT(0);
14273 return;
14274 }
14275
14276 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14277 /*call hdd callback with set batch scan response data*/
14278 if(pMac->pmc.batchScanResultCallback)
14279 {
14280 pMac->pmc.batchScanResultCallback(pCallbackContext,
14281 pBatchScanResult);
14282 }
14283 else
14284 {
14285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14286 "%s:HDD callback is null", __func__);
14287 VOS_ASSERT(0);
14288 }
14289 break;
14290 }
14291#endif
14292
Leo Chang0b0e45a2013-12-15 15:18:55 -080014293#ifdef FEATURE_WLAN_CH_AVOID
14294 case WDI_CH_AVOID_IND:
14295 {
14296 vos_msg_t vosMsg;
14297 tSirChAvoidIndType *chAvoidInd;
14298
14299 chAvoidInd =
14300 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14301 if (NULL == chAvoidInd)
14302 {
14303 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14304 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14305 return ;
14306 }
14307
14308 chAvoidInd->avoidRangeCount =
14309 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14310 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14311 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14312 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14313
14314 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14315 "%s : WDA CH avoid notification", __func__);
14316
14317 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14318 vosMsg.bodyptr = chAvoidInd;
14319 vosMsg.bodyval = 0;
14320 /* Send message to SME */
14321 if (VOS_STATUS_SUCCESS !=
14322 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14323 {
14324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14325 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14326 vos_mem_free(chAvoidInd);
14327 }
14328 break;
14329 }
14330#endif /* FEATURE_WLAN_CH_AVOID */
14331
Sunil Duttbd736ed2014-05-26 21:19:41 +053014332#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14333 case WDI_LL_STATS_RESULTS_IND:
14334 {
14335 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014336 tpAniSirGlobal pMac;
14337
14338 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14339 "Received WDI_LL_STATS_RESULTS_IND from FW");
14340
14341 /*sanity check*/
14342 if (NULL == pWDA)
14343 {
14344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14345 "%s:pWDA is NULL", __func__);
14346 VOS_ASSERT(0);
14347 return;
14348 }
14349
14350 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014351 (void *)wdiLowLevelInd->
14352 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014353 if (NULL == pLinkLayerStatsInd)
14354 {
14355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14356 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14357 __func__);
14358 VOS_ASSERT(0);
14359 return;
14360 }
14361
14362 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14363 if (NULL == pMac)
14364 {
14365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14366 "%s:pMac is NULL", __func__);
14367 VOS_ASSERT(0);
14368 return;
14369 }
14370
Dino Mycled3d50022014-07-07 12:58:25 +053014371 /* call hdd callback with Link Layer Statistics.
14372 * vdev_id/ifacId in link_stats_results will be
14373 * used to retrieve the correct HDD context
14374 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014375 if (pMac->sme.pLinkLayerStatsIndCallback)
14376 {
Dino Mycled3d50022014-07-07 12:58:25 +053014377 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014378 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014379 pLinkLayerStatsInd,
14380 wdiLowLevelInd->
14381 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014382 }
14383 else
14384 {
14385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14386 "%s:HDD callback is null", __func__);
14387 }
14388 break;
14389 }
14390#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14391
Dino Mycle41bdc942014-06-10 11:30:24 +053014392#ifdef WLAN_FEATURE_EXTSCAN
14393 case WDI_EXTSCAN_PROGRESS_IND:
14394 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14395 case WDI_EXTSCAN_SCAN_RESULT_IND:
14396 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14397 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14398 {
14399 void *pEXTScanData;
14400 void *pCallbackContext;
14401 tpAniSirGlobal pMac;
14402 tANI_U16 indType;
14403
14404 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14405 "Received WDI_EXTSCAN Indications from FW");
14406 /*sanity check*/
14407 if (NULL == pWDA)
14408 {
14409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14410 "%s:pWDA is NULL", __func__);
14411 VOS_ASSERT(0);
14412 return;
14413 }
14414 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14415 {
14416 indType = WDA_EXTSCAN_PROGRESS_IND;
14417
14418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14419 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14420 }
14421 if (wdiLowLevelInd->wdiIndicationType ==
14422 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14423 {
14424 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14425
14426 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14427 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14428 }
14429 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14430 {
14431 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14432
14433 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14434 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14435 }
14436 if (wdiLowLevelInd->wdiIndicationType ==
14437 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14438 {
14439 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14440
14441 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14442 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14443 }
14444 if (wdiLowLevelInd->wdiIndicationType ==
14445 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14446 {
14447 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14448
14449 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14450 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14451 }
14452
14453 pEXTScanData =
14454 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14455 if (NULL == pEXTScanData)
14456 {
14457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14458 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14459 __func__);
14460 VOS_ASSERT(0);
14461 return;
14462 }
14463
14464 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14465 if (NULL == pMac)
14466 {
14467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14468 "%s:pMac is NULL", __func__);
14469 VOS_ASSERT(0);
14470 return;
14471 }
14472
14473 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14474
14475 if(pMac->sme.pEXTScanIndCb)
14476 {
14477 pMac->sme.pEXTScanIndCb(pCallbackContext,
14478 indType,
14479 pEXTScanData);
14480 }
14481 else
14482 {
14483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14484 "%s:HDD callback is null", __func__);
14485 }
14486 break;
14487 }
14488#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014489 case WDI_DEL_BA_IND:
14490 {
14491 tpBADeleteParams pDelBAInd =
14492 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14493
14494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14495 "Received WDI_DEL_BA_IND from WDI ");
14496 if(NULL == pDelBAInd)
14497 {
14498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14499 "%s: VOS MEM Alloc Failure", __func__);
14500 break;
14501 }
14502 vos_mem_copy(pDelBAInd->peerMacAddr,
14503 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14504 sizeof(tSirMacAddr));
14505 vos_mem_copy(pDelBAInd->bssId,
14506 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14507 sizeof(tSirMacAddr));
14508 pDelBAInd->staIdx =
14509 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14510 pDelBAInd->baTID =
14511 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14512 pDelBAInd->baDirection =
14513 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14514 pDelBAInd->reasonCode =
14515 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14516
14517 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14518 (void *)pDelBAInd , 0) ;
14519 break;
14520 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014521
Jeff Johnson295189b2012-06-20 16:38:30 -070014522 default:
14523 {
14524 /* TODO error */
14525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14526 "Received UNKNOWN Indication from WDI ");
14527 }
14528 }
14529 return ;
14530}
14531
Jeff Johnson295189b2012-06-20 16:38:30 -070014532/*
14533 * BA related processing in WDA.
14534 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014535void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14536 void* pUserData)
14537{
14538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14539 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014540 if(NULL == pWdaParams)
14541 {
14542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014543 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014544 VOS_ASSERT(0) ;
14545 return ;
14546 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014547 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 vos_mem_free(pWdaParams->wdaMsgParam) ;
14549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14550 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014553 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14554 {
14555 tANI_U8 i = 0 ;
14556 tBaActivityInd *baActivityInd = NULL ;
14557 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14558 tANI_U8 allocSize = sizeof(tBaActivityInd)
14559 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14560 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14561 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014562 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014563 if(NULL == baActivityInd)
14564 {
14565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014566 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014567 VOS_ASSERT(0) ;
14568 return;
14569 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014570 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14571 sizeof(tSirMacAddr)) ;
14572 baActivityInd->baCandidateCnt = baCandidateCount ;
14573
14574 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14575 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14576
14577 for(i = 0 ; i < baCandidateCount ; i++)
14578 {
14579 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014580 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14581 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014582 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14583 {
14584 baCandidate->baInfo[tid].fBaEnable =
14585 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14586 baCandidate->baInfo[tid].startingSeqNum =
14587 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14588 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014589 wdiBaCandidate++ ;
14590 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014591 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014592 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14593 }
14594 else
14595 {
14596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14597 "BA Trigger RSP with Failure received ");
14598 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014599 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014600}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014601
14602
14603/*
14604 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14605 * during MCC
14606 */
14607void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14608{
14609 wpt_uint32 enabled;
14610 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14611 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14612 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14613
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014614 if (NULL == pMac )
14615 {
14616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14617 "%s: Invoked with invalid MAC context ", __func__ );
14618 VOS_ASSERT(0);
14619 return;
14620 }
14621
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014622 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14623 != eSIR_SUCCESS)
14624 {
14625 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14626 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14627 return;
14628 }
14629
14630 if(!enabled)
14631 {
14632 return;
14633 }
14634
14635 if(NULL == pWDA)
14636 {
14637 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14638 "%s:WDA context is NULL", __func__);
14639 VOS_ASSERT(0);
14640 return;
14641 }
14642
14643 if(activate)
14644 {
14645 if( VOS_STATUS_SUCCESS !=
14646 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14647 {
14648 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14649 "Traffic Stats Timer Start Failed ");
14650 return;
14651 }
14652 WDI_DS_ActivateTrafficStats();
14653 }
14654 else
14655 {
14656 WDI_DS_DeactivateTrafficStats();
14657 WDI_DS_ClearTrafficStats();
14658
14659 if( VOS_STATUS_SUCCESS !=
14660 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14661 {
14662 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14663 "Traffic Stats Timer Stop Failed ");
14664 return;
14665 }
14666 }
14667}
14668
14669/*
14670 * Traffic Stats Timer handler
14671 */
14672void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14673{
14674 WDI_Status wdiStatus;
14675 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14676 WDI_TrafficStatsIndType trafficStatsIndParams;
14677 wpt_uint32 length, enabled;
14678 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14679
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014680 if (NULL == pMac )
14681 {
14682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14683 "%s: Invoked with invalid MAC context ", __func__ );
14684 VOS_ASSERT(0);
14685 return;
14686 }
14687
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014688 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14689 != eSIR_SUCCESS)
14690 {
14691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14692 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14693 return;
14694 }
14695
14696 if(!enabled)
14697 {
14698 WDI_DS_DeactivateTrafficStats();
14699 return;
14700 }
14701
14702 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14703
14704 if(pWdiTrafficStats != NULL)
14705 {
14706 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14707 trafficStatsIndParams.length = length;
14708 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014709 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014710 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14711 trafficStatsIndParams.pUserData = pWDA;
14712
14713 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14714
14715 if(WDI_STATUS_PENDING == wdiStatus)
14716 {
14717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14718 "Pending received for %s:%d ",__func__,__LINE__ );
14719 }
14720 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14721 {
14722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14723 "Failure in %s:%d ",__func__,__LINE__ );
14724 }
14725
14726 WDI_DS_ClearTrafficStats();
14727 }
14728 else
14729 {
14730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14731 "pWdiTrafficStats is Null");
14732 }
14733
14734 if( VOS_STATUS_SUCCESS !=
14735 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14736 {
14737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14738 "Traffic Stats Timer Start Failed ");
14739 return;
14740 }
14741}
14742
Jeff Johnson295189b2012-06-20 16:38:30 -070014743/*
14744 * BA Activity check timer handler
14745 */
14746void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14747{
14748 tANI_U8 curSta = 0 ;
14749 tANI_U8 tid = 0 ;
14750 tANI_U8 size = 0 ;
14751 tANI_U8 baCandidateCount = 0 ;
14752 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014753 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014754 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014755 tpAniSirGlobal pMac;
14756
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014757 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014758 {
14759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014760 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014761 VOS_ASSERT(0);
14762 return ;
14763 }
14764 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14765 {
14766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14767 "Inconsistent STA entries in WDA");
14768 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014769 }
14770 if(NULL == pWDA->pVosContext)
14771 {
14772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14773 "%s: pVosContext is NULL",__func__);
14774 VOS_ASSERT(0);
14775 return ;
14776 }
14777 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014778 if(NULL == pMac)
14779 {
14780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14781 "%s: pMac is NULL",__func__);
14782 VOS_ASSERT(0);
14783 return ;
14784 }
14785
Abhishek Singh0644e482014-10-06 18:38:23 +053014786 if (wlan_cfgGetInt(pMac,
14787 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14788 eSIR_SUCCESS)
14789 {
14790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14791 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14792 val = 0;
14793 }
14794
Jeff Johnson295189b2012-06-20 16:38:30 -070014795 /* walk through all STA entries and find out TX packet count */
14796 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14797 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014798 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014799#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014800 // We can only do BA on "hard" STAs.
14801 if (!(IS_HWSTA_IDX(curSta)))
14802 {
14803 continue;
14804 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014805#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014806 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14807 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014808 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014809 tANI_U32 txPktCount = 0 ;
14810 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014811 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014812 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14813 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014814 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14815 curSta, tid, &txPktCount)))
14816 {
14817#if 0
14818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14819 "************* %d:%d, %d ",curSta, txPktCount,
14820 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14821#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014822 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14823 (currentOperChan <= SIR_11B_CHANNEL_END)))
14824 {
14825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14826 "%s: BTC disabled aggregation - dont start "
14827 "TX ADDBA req",__func__);
14828 }
14829 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014830 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053014831 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
14832 pWDA->wdaGlobalSystemRole) && txPktCount )
14833 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14834 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070014835 {
14836 /* get prepare for sending message to HAL */
14837 //baCandidate[baCandidateCount].staIdx = curSta ;
14838 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14839 newBaCandidate = WDA_ENABLE_BA ;
14840 }
14841 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14842 }
14843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014844 /* fill the entry for all the sta with given TID's */
14845 if(WDA_ENABLE_BA == newBaCandidate)
14846 {
14847 /* move to next BA candidate */
14848 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14849 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14850 baCandidateCount++ ;
14851 newBaCandidate = WDA_DISABLE_BA ;
14852 }
14853 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014854 /* prepare and send message to hal */
14855 if( 0 < baCandidateCount)
14856 {
14857 WDI_Status status = WDI_STATUS_SUCCESS ;
14858 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14859 tWDA_ReqParams *pWdaParams =
14860 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014861 if(NULL == pWdaParams)
14862 {
14863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014865 VOS_ASSERT(0) ;
14866 return;
14867 }
14868 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14869 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14870 if(NULL == wdiTriggerBaReq)
14871 {
14872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014874 VOS_ASSERT(0) ;
14875 vos_mem_free(pWdaParams);
14876 return;
14877 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014878 do
14879 {
14880 WDI_TriggerBAReqinfoType *triggerBaInfo =
14881 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14882 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14883 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14884 * for each request */
14885 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14886 triggerBaInfo->ucBASessionID = 0;
14887 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14888 } while(0) ;
14889 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014891 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014892 pWdaParams->pWdaContext = pWDA;
14893 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14894 pWdaParams->wdaMsgParam = NULL;
14895 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14896 WDA_TriggerBaReqCallback, pWdaParams) ;
14897 if(IS_WDI_STATUS_FAILURE(status))
14898 {
14899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14900 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14901 vos_mem_free(pWdaParams->wdaMsgParam) ;
14902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14903 vos_mem_free(pWdaParams) ;
14904 }
14905 }
14906 else
14907 {
14908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14909 "There is no TID for initiating BA");
14910 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014911 if( VOS_STATUS_SUCCESS !=
14912 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14913 {
14914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14915 "BA Activity Timer Stop Failed ");
14916 return ;
14917 }
14918 if( VOS_STATUS_SUCCESS !=
14919 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14920 {
14921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14922 "BA Activity Timer Start Failed ");
14923 return;
14924 }
14925 return ;
14926}
Jeff Johnson295189b2012-06-20 16:38:30 -070014927/*
14928 * WDA common routine to create timer used by WDA.
14929 */
14930static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14931{
Jeff Johnson295189b2012-06-20 16:38:30 -070014932 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14933 tANI_U32 val = 0 ;
14934 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14935
14936 if(NULL == pMac)
14937 {
14938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014939 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014940 VOS_ASSERT(0);
14941 return VOS_STATUS_E_FAILURE;
14942 }
14943 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14944 != eSIR_SUCCESS)
14945 {
14946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14947 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14948 return VOS_STATUS_E_FAILURE;
14949 }
14950 val = SYS_MS_TO_TICKS(val) ;
14951
14952 /* BA activity check timer */
14953 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14954 "BA Activity Check timer", WDA_TimerHandler,
14955 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14956 if(status != TX_SUCCESS)
14957 {
14958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14959 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014960 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014962 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014963 /* Tx Complete Timeout timer */
14964 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14965 "Tx Complete Check timer", WDA_TimerHandler,
14966 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014967 if(status != TX_SUCCESS)
14968 {
14969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14970 "Unable to create Tx Complete Timeout timer");
14971 /* Destroy timer of BA activity check timer */
14972 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14973 if(status != TX_SUCCESS)
14974 {
14975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14976 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014977 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014978 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014979 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014980 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014981
14982 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14983
14984 /* Traffic Stats timer */
14985 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14986 "Traffic Stats timer", WDA_TimerHandler,
14987 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14988 if(status != TX_SUCCESS)
14989 {
14990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14991 "Unable to create traffic stats timer");
14992 /* Destroy timer of BA activity check timer */
14993 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14994 if(status != TX_SUCCESS)
14995 {
14996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14997 "Unable to Destroy BA activity timer");
14998 }
14999 /* Destroy timer of tx complete timer */
15000 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15001 if(status != TX_SUCCESS)
15002 {
15003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15004 "Unable to Tx complete timer");
15005 }
15006 return VOS_STATUS_E_FAILURE ;
15007 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015008 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015009}
Jeff Johnson295189b2012-06-20 16:38:30 -070015010/*
15011 * WDA common routine to destroy timer used by WDA.
15012 */
15013static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15014{
15015 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015016 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15017 if(status != TX_SUCCESS)
15018 {
15019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15020 "Unable to Destroy Tx Complete Timeout timer");
15021 return eSIR_FAILURE ;
15022 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015023 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15024 if(status != TX_SUCCESS)
15025 {
15026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15027 "Unable to Destroy BA activity timer");
15028 return eSIR_FAILURE ;
15029 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015030 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15031 if(status != TX_SUCCESS)
15032 {
15033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15034 "Unable to Destroy traffic stats timer");
15035 return eSIR_FAILURE ;
15036 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015037 return eSIR_SUCCESS ;
15038}
Jeff Johnson295189b2012-06-20 16:38:30 -070015039/*
15040 * WDA timer handler.
15041 */
15042void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15043{
15044 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15045 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015046 /*
15047 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15048 */
15049 wdaMsg.type = timerInfo ;
15050 wdaMsg.bodyptr = NULL;
15051 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015052 /* post the message.. */
15053 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15054 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15055 {
15056 vosStatus = VOS_STATUS_E_BADMSG;
15057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015058}
Jeff Johnson295189b2012-06-20 16:38:30 -070015059/*
15060 * WDA Tx Complete timeout Indication.
15061 */
15062void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15063{
15064 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015065 if( pWDA->pAckTxCbFunc )
15066 {
15067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015068 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015069 pWDA->pAckTxCbFunc( pMac, 0);
15070 pWDA->pAckTxCbFunc = NULL;
15071 }
15072 else
15073 {
15074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015075 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015076 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015077}
Jeff Johnson295189b2012-06-20 16:38:30 -070015078/*
15079 * WDA Set REG Domain to VOS NV
15080 */
Abhishek Singha306a442013-11-07 18:39:01 +053015081eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15082 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015083{
Abhishek Singha306a442013-11-07 18:39:01 +053015084 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015085 {
15086 return eHAL_STATUS_INVALID_PARAMETER;
15087 }
15088 return eHAL_STATUS_SUCCESS;
15089}
Jeff Johnson295189b2012-06-20 16:38:30 -070015090
Jeff Johnson295189b2012-06-20 16:38:30 -070015091#ifdef FEATURE_WLAN_SCAN_PNO
15092/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015093 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015094 *
15095 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015096void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015097{
15098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015099 tSirPNOScanReq *pPNOScanReqParams;
15100
Jeff Johnson295189b2012-06-20 16:38:30 -070015101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015102 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015103 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015104 {
15105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015106 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015107 VOS_ASSERT(0) ;
15108 return ;
15109 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015110
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015111 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15112 if(pPNOScanReqParams->statusCallback)
15113 {
15114 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15115 (status == WDI_STATUS_SUCCESS) ?
15116 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15117 }
15118
Yue Ma7f44bbe2013-04-12 11:47:39 -070015119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15120 vos_mem_free(pWdaParams->wdaMsgParam);
15121 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015122
15123 return ;
15124}
Jeff Johnson295189b2012-06-20 16:38:30 -070015125/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015126 * FUNCTION: WDA_PNOScanReqCallback
15127 * Free memory.
15128 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15129 */
15130void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015131{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015133 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015134
15135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15136 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15137
15138 if(NULL == pWdaParams)
15139 {
15140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15141 "%s: pWdaParams received NULL", __func__);
15142 VOS_ASSERT(0);
15143 return;
15144 }
15145
15146 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15147 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015148 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15149 if(pPNOScanReqParams->statusCallback)
15150 {
15151 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15152 VOS_STATUS_E_FAILURE);
15153 }
15154
Yue Ma7f44bbe2013-04-12 11:47:39 -070015155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15156 vos_mem_free(pWdaParams->wdaMsgParam);
15157 vos_mem_free(pWdaParams);
15158 }
15159
15160 return;
15161}
15162/*
15163 * FUNCTION: WDA_UpdateScanParamsRespCallback
15164 *
15165 */
15166void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15167{
15168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015170 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015171 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015172 {
15173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015174 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015175 VOS_ASSERT(0) ;
15176 return ;
15177 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015178
15179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15180 vos_mem_free(pWdaParams->wdaMsgParam);
15181 vos_mem_free(pWdaParams);
15182
Jeff Johnson295189b2012-06-20 16:38:30 -070015183 return ;
15184}
Jeff Johnson295189b2012-06-20 16:38:30 -070015185/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015186 * FUNCTION: WDA_UpdateScanParamsReqCallback
15187 * Free memory.
15188 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15189 */
15190void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15191{
15192 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15193
15194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15195 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15196
15197 if(NULL == pWdaParams)
15198 {
15199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15200 "%s: pWdaParams received NULL", __func__);
15201 VOS_ASSERT(0);
15202 return;
15203 }
15204
15205 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15206 {
15207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15208 vos_mem_free(pWdaParams->wdaMsgParam);
15209 vos_mem_free(pWdaParams);
15210 }
15211
15212 return;
15213}
15214/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015215 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15216 * Request to WDI to set Preferred Network List.Offload
15217 */
15218VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15219 tSirPNOScanReq *pPNOScanReqParams)
15220{
Jeff Johnson43971f52012-07-17 12:26:56 -070015221 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015222 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15223 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15224 tWDA_ReqParams *pWdaParams ;
15225 v_U8_t i;
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 == pwdiPNOScanReqInfo)
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(pwdiPNOScanReqInfo);
15242 return VOS_STATUS_E_NOMEM;
15243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015244 //
15245 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15246 //
15247 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15248 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015249 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15250 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15251 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015252 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15253 {
15254 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15255 &pPNOScanReqParams->aNetworks[i],
15256 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15257 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015258 /*Scan timer intervals*/
15259 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15260 &pPNOScanReqParams->scanTimers,
15261 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015262 /*Probe template for 2.4GHz band*/
15263 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15264 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15265 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015266 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15267 pPNOScanReqParams->p24GProbeTemplate,
15268 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015269 /*Probe template for 5GHz band*/
15270 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15271 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15272 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015273 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15274 pPNOScanReqParams->p5GProbeTemplate,
15275 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015276 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15277 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015278
Jeff Johnson295189b2012-06-20 16:38:30 -070015279 /* Store Params pass it to WDI */
15280 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15281 pWdaParams->pWdaContext = pWDA;
15282 /* Store param pointer as passed in by caller */
15283 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015284 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015285 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015286 if(IS_WDI_STATUS_FAILURE(status))
15287 {
15288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15289 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015290 if(pPNOScanReqParams->statusCallback)
15291 {
15292 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15293 VOS_STATUS_E_FAILURE);
15294 }
15295
Jeff Johnson295189b2012-06-20 16:38:30 -070015296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15297 vos_mem_free(pWdaParams->wdaMsgParam);
15298 pWdaParams->wdaWdiApiMsgParam = NULL;
15299 pWdaParams->wdaMsgParam = NULL;
15300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015301 return CONVERT_WDI2VOS_STATUS(status) ;
15302}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015303
15304#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15305
15306void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15307{
15308 /*Convert the CSR Auth types to WDI Auth types */
15309 switch (csrAuthType)
15310 {
15311 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15312 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15313 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015314#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015315 case eCSR_AUTH_TYPE_CCKM_WPA:
15316 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15317 break;
15318#endif
15319 case eCSR_AUTH_TYPE_WPA:
15320 *AuthType = eWDA_AUTH_TYPE_WPA;
15321 break;
15322 case eCSR_AUTH_TYPE_WPA_PSK:
15323 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15324 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015325#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015326 case eCSR_AUTH_TYPE_CCKM_RSN:
15327 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15328 break;
15329#endif
15330 case eCSR_AUTH_TYPE_RSN:
15331 *AuthType = eWDA_AUTH_TYPE_RSN;
15332 break;
15333 case eCSR_AUTH_TYPE_RSN_PSK:
15334 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15335 break;
15336#if defined WLAN_FEATURE_VOWIFI_11R
15337 case eCSR_AUTH_TYPE_FT_RSN:
15338 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15339 break;
15340 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15341 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15342 break;
15343#endif
15344#ifdef FEATURE_WLAN_WAPI
15345 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15346 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15347 break;
15348 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15349 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15350 break;
15351#endif /* FEATURE_WLAN_WAPI */
15352 case eCSR_AUTH_TYPE_SHARED_KEY:
15353 case eCSR_AUTH_TYPE_AUTOSWITCH:
15354 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15355 break;
15356#if 0
15357 case eCSR_AUTH_TYPE_SHARED_KEY:
15358 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15359 break;
15360 case eCSR_AUTH_TYPE_AUTOSWITCH:
15361 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15362#endif
15363 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015365 "%s: Unknown Auth Type", __func__);
15366 break;
15367 }
15368}
15369void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15370{
15371 switch (csrEncrType)
15372 {
15373 case eCSR_ENCRYPT_TYPE_NONE:
15374 *EncrType = WDI_ED_NONE;
15375 break;
15376 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15377 case eCSR_ENCRYPT_TYPE_WEP40:
15378 *EncrType = WDI_ED_WEP40;
15379 break;
15380 case eCSR_ENCRYPT_TYPE_WEP104:
15381 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15382 *EncrType = WDI_ED_WEP104;
15383 break;
15384 case eCSR_ENCRYPT_TYPE_TKIP:
15385 *EncrType = WDI_ED_TKIP;
15386 break;
15387 case eCSR_ENCRYPT_TYPE_AES:
15388 *EncrType = WDI_ED_CCMP;
15389 break;
15390#ifdef WLAN_FEATURE_11W
15391 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15392 *EncrType = WDI_ED_AES_128_CMAC;
15393 break;
15394#endif
15395#ifdef FEATURE_WLAN_WAPI
15396 case eCSR_ENCRYPT_TYPE_WPI:
15397 *EncrType = WDI_ED_WPI;
15398 break;
15399#endif
15400 case eCSR_ENCRYPT_TYPE_ANY:
15401 *EncrType = WDI_ED_ANY;
15402 break;
15403
15404 default:
15405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15406 "%s: Unknown Encryption Type", __func__);
15407 break;
15408 }
15409}
15410
15411/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015412 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015413 * Request to WDI to set Roam Offload Scan
15414 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015415VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015416 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15417{
15418 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015419 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15420 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015421 tWDA_ReqParams *pWdaParams ;
15422 v_U8_t csrAuthType;
15423 WDI_RoamNetworkType *pwdiRoamNetworkType;
15424 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15426 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015427 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015428 {
15429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15430 "%s: VOS MEM Alloc Failure", __func__);
15431 VOS_ASSERT(0);
15432 return VOS_STATUS_E_NOMEM;
15433 }
15434 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15435 if (NULL == pWdaParams)
15436 {
15437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15438 "%s: VOS MEM Alloc Failure", __func__);
15439 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015440 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015441 return VOS_STATUS_E_NOMEM;
15442 }
15443
15444 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015445 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015446 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015447 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15448 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015449 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15450 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15451 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15452 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15453 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15454 sizeof(pwdiRoamNetworkType->currAPbssid));
15455 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15456 csrAuthType);
15457 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15458 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15459 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15460 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15461 pwdiRoamOffloadScanInfo->LookupThreshold =
15462 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015463 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15464 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015465 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15466 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015467 pwdiRoamOffloadScanInfo->MAWCEnabled =
15468 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015469 pwdiRoamOffloadScanInfo->Command =
15470 pRoamOffloadScanReqParams->Command ;
15471 pwdiRoamOffloadScanInfo->StartScanReason =
15472 pRoamOffloadScanReqParams->StartScanReason ;
15473 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15474 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15475 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15476 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15477 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15478 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15479 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15480 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15481 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15482 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015483 pwdiRoamOffloadScanInfo->IsESEEnabled =
15484 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015485 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15486 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15487 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15488 pwdiRoamNetworkType->ssId.ucLength =
15489 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15490 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15491 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15492 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15493 pwdiRoamNetworkType->ChannelCount =
15494 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15495 pwdiRoamOffloadScanInfo->ChannelCacheType =
15496 pRoamOffloadScanReqParams->ChannelCacheType;
15497 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15498 pRoamOffloadScanReqParams->ValidChannelList,
15499 pRoamOffloadScanReqParams->ValidChannelCount);
15500 pwdiRoamOffloadScanInfo->ValidChannelCount =
15501 pRoamOffloadScanReqParams->ValidChannelCount;
15502 pwdiRoamOffloadScanInfo->us24GProbeSize =
15503 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15504 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15505 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15506 pRoamOffloadScanReqParams->p24GProbeTemplate,
15507 pwdiRoamOffloadScanInfo->us24GProbeSize);
15508 pwdiRoamOffloadScanInfo->us5GProbeSize =
15509 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15510 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15511 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15512 pRoamOffloadScanReqParams->p5GProbeTemplate,
15513 pwdiRoamOffloadScanInfo->us5GProbeSize);
15514 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15515 pRoamOffloadScanReqParams->MDID.mdiePresent;
15516 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15517 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015518 pwdiRoamOffloadScanInfo->nProbes =
15519 pRoamOffloadScanReqParams->nProbes;
15520 pwdiRoamOffloadScanInfo->HomeAwayTime =
15521 pRoamOffloadScanReqParams->HomeAwayTime;
15522 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015523 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015524 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015525 pWdaParams->pWdaContext = pWDA;
15526 /* Store param pointer as passed in by caller */
15527 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015528 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015529 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15530 if(IS_WDI_STATUS_FAILURE(status))
15531 {
15532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15533 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15535 vos_mem_free(pWdaParams->wdaMsgParam);
15536 pWdaParams->wdaWdiApiMsgParam = NULL;
15537 pWdaParams->wdaMsgParam = NULL;
15538 }
15539 return CONVERT_WDI2VOS_STATUS(status) ;
15540}
15541#endif
15542
Jeff Johnson295189b2012-06-20 16:38:30 -070015543/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015544 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 *
15546 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015547void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015548{
15549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15550
15551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015553
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015554 if(NULL == pWdaParams)
15555 {
15556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015557 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015558 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015559 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015560 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015561
Jeff Johnson295189b2012-06-20 16:38:30 -070015562 vos_mem_free(pWdaParams->wdaMsgParam) ;
15563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15564 vos_mem_free(pWdaParams) ;
15565
15566 return ;
15567}
15568/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015569 * FUNCTION: WDA_RssiFilterReqCallback
15570 * Free memory.
15571 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15572 */
15573void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15574{
15575 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15576
15577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15578 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15579
15580 if(NULL == pWdaParams)
15581 {
15582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15583 "%s: pWdaParams received NULL", __func__);
15584 VOS_ASSERT(0);
15585 return;
15586 }
15587
15588 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15589 {
15590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15591 vos_mem_free(pWdaParams->wdaMsgParam);
15592 vos_mem_free(pWdaParams);
15593 }
15594
15595 return;
15596}
15597/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015598 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15599 * Request to WDI to set Preferred Network List.Offload
15600 */
15601VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15602 tSirSetRSSIFilterReq* pRssiFilterParams)
15603{
Jeff Johnson43971f52012-07-17 12:26:56 -070015604 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015605 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15606 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15607 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015609 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015610 if(NULL == pwdiSetRssiFilterReqInfo)
15611 {
15612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015614 VOS_ASSERT(0);
15615 return VOS_STATUS_E_NOMEM;
15616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15618 if(NULL == pWdaParams)
15619 {
15620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015622 VOS_ASSERT(0);
15623 vos_mem_free(pwdiSetRssiFilterReqInfo);
15624 return VOS_STATUS_E_NOMEM;
15625 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015626 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015627 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15628 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015629
Jeff Johnson295189b2012-06-20 16:38:30 -070015630 /* Store Params pass it to WDI */
15631 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15632 pWdaParams->pWdaContext = pWDA;
15633 /* Store param pointer as passed in by caller */
15634 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015635 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015636 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015637 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015638 if(IS_WDI_STATUS_FAILURE(status))
15639 {
15640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15641 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15643 vos_mem_free(pWdaParams->wdaMsgParam);
15644 pWdaParams->wdaWdiApiMsgParam = NULL;
15645 pWdaParams->wdaMsgParam = NULL;
15646 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015647 return CONVERT_WDI2VOS_STATUS(status) ;
15648}
15649
Jeff Johnson295189b2012-06-20 16:38:30 -070015650/*
15651 * FUNCTION: WDA_ProcessUpdateScanParams
15652 * Request to WDI to update Scan Parameters
15653 */
15654VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15655 tSirUpdateScanParams *pUpdateScanParams)
15656{
Jeff Johnson43971f52012-07-17 12:26:56 -070015657 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015658 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15659 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15660 sizeof(WDI_UpdateScanParamsInfoType)) ;
15661 tWDA_ReqParams *pWdaParams ;
15662 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015664 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015665 if(NULL == wdiUpdateScanParamsInfoType)
15666 {
15667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015668 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015669 VOS_ASSERT(0);
15670 return VOS_STATUS_E_NOMEM;
15671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015672 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15673 if ( NULL == pWdaParams )
15674 {
15675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015677 VOS_ASSERT(0);
15678 vos_mem_free(wdiUpdateScanParamsInfoType);
15679 return VOS_STATUS_E_NOMEM;
15680 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015681 //
15682 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15683 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15685 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15686 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15687 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015688 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015689 pUpdateScanParams->b11dEnabled,
15690 pUpdateScanParams->b11dResolved,
15691 pUpdateScanParams->ucChannelCount,
15692 pUpdateScanParams->usPassiveMinChTime,
15693 pUpdateScanParams->usPassiveMaxChTime,
15694 pUpdateScanParams->usActiveMinChTime,
15695 pUpdateScanParams->usActiveMaxChTime,
15696 sizeof(tSirUpdateScanParams),
15697 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15698
Jeff Johnson295189b2012-06-20 16:38:30 -070015699 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15700 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015701 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15702 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015703 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15704 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015705 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15706 pUpdateScanParams->usActiveMaxChTime;
15707 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15708 pUpdateScanParams->usActiveMinChTime;
15709 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15710 pUpdateScanParams->usPassiveMaxChTime;
15711 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15712 pUpdateScanParams->usPassiveMinChTime;
15713
Jeff Johnson295189b2012-06-20 16:38:30 -070015714 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015715 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15716 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015717
Jeff Johnson295189b2012-06-20 16:38:30 -070015718 for ( i = 0; i <
15719 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15720 i++)
15721 {
15722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15723 "Update Scan Parameters channel: %d",
15724 pUpdateScanParams->aChannels[i]);
15725
15726 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15727 pUpdateScanParams->aChannels[i];
15728 }
15729
Yue Ma7f44bbe2013-04-12 11:47:39 -070015730 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15731 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015732
Jeff Johnson295189b2012-06-20 16:38:30 -070015733 /* Store Params pass it to WDI */
15734 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15735 pWdaParams->pWdaContext = pWDA;
15736 /* Store param pointer as passed in by caller */
15737 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015738
Jeff Johnson295189b2012-06-20 16:38:30 -070015739
15740
15741 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015742 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015743 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015744 if(IS_WDI_STATUS_FAILURE(status))
15745 {
15746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15747 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15749 vos_mem_free(pWdaParams->wdaMsgParam);
15750 vos_mem_free(pWdaParams);
15751 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015752 return CONVERT_WDI2VOS_STATUS(status) ;
15753}
15754#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015755
15756#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15757/*
15758 * FUNCTION: WDA_RoamOffloadScanReqCallback
15759 *
15760 */
15761void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15762{
15763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015764 vos_msg_t vosMsg;
15765 wpt_uint8 reason = 0;
15766
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015768 "<------ %s " ,__func__);
15769 if (NULL == pWdaParams)
15770 {
15771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15772 "%s: pWdaParams received NULL", __func__);
15773 VOS_ASSERT(0) ;
15774 return ;
15775 }
15776 if ( pWdaParams != NULL )
15777 {
15778 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15779 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015780 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15782 }
15783 if ( pWdaParams->wdaMsgParam != NULL)
15784 {
15785 vos_mem_free(pWdaParams->wdaMsgParam);
15786 }
15787
15788 vos_mem_free(pWdaParams) ;
15789 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015790 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15791 vosMsg.bodyptr = NULL;
15792 if (WDI_STATUS_SUCCESS != status)
15793 {
15794 reason = 0;
15795 }
15796 vosMsg.bodyval = reason;
15797 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15798 {
15799 /* free the mem and return */
15800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015801 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015802 }
15803
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015804 return ;
15805}
15806#endif
15807
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015808/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015809 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015810 *
15811 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015812void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015813{
15814 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15815
15816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15817 "<------ %s " ,__func__);
15818
15819 if(NULL == pWdaParams)
15820 {
15821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15822 "%s: pWdaParams received NULL", __func__);
15823 VOS_ASSERT(0);
15824 return;
15825 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015826
15827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15828 vos_mem_free(pWdaParams->wdaMsgParam);
15829 vos_mem_free(pWdaParams);
15830
15831 return;
15832}
15833/*
15834 * FUNCTION: WDA_SetPowerParamsReqCallback
15835 * Free memory.
15836 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15837 */
15838void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15839{
15840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15841
15842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15843 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15844
15845 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015846 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15848 "%s: pWdaParams received NULL", __func__);
15849 VOS_ASSERT(0);
15850 return;
15851 }
15852
15853 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15854 {
15855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15856 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015857 vos_mem_free(pWdaParams);
15858 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015859
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015860 return;
15861}
15862
Jeff Johnson295189b2012-06-20 16:38:30 -070015863#ifdef WLAN_FEATURE_PACKET_FILTERING
15864/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015865 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015866 *
15867 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015868void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015869 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15870 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015871{
15872 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015874 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015875 if(NULL == pWdaParams)
15876 {
15877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015878 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015879 VOS_ASSERT(0) ;
15880 return ;
15881 }
15882
15883 vos_mem_free(pWdaParams->wdaMsgParam) ;
15884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15885 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015886 //print a msg, nothing else to do
15887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015888 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015889 return ;
15890}
Jeff Johnson295189b2012-06-20 16:38:30 -070015891/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015892 * FUNCTION: WDA_8023MulticastListReqCallback
15893 * Free memory.
15894 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15895 */
15896void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15897{
15898 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15899
15900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15901 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15902
15903 if(NULL == pWdaParams)
15904 {
15905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15906 "%s: pWdaParams received NULL", __func__);
15907 VOS_ASSERT(0);
15908 return;
15909 }
15910
15911 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15912 {
15913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15914 vos_mem_free(pWdaParams->wdaMsgParam);
15915 vos_mem_free(pWdaParams);
15916 }
15917
15918 return;
15919}
15920/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015921 * FUNCTION: WDA_Process8023MulticastListReq
15922 * Request to WDI to add 8023 Multicast List
15923 */
15924VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15925 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15926{
Jeff Johnson43971f52012-07-17 12:26:56 -070015927 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015928 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15929 tWDA_ReqParams *pWdaParams ;
15930 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015932 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015933 pwdiFltPktSetMcListReqParamsType =
15934 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15935 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15936 ) ;
15937 if(NULL == pwdiFltPktSetMcListReqParamsType)
15938 {
15939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015940 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015941 return VOS_STATUS_E_NOMEM;
15942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015943 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15944 if(NULL == pWdaParams)
15945 {
15946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015948 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15949 return VOS_STATUS_E_NOMEM;
15950 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015951
Jeff Johnson295189b2012-06-20 16:38:30 -070015952 //
15953 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15954 //
15955 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015956 pRcvFltMcAddrList->ulMulticastAddrCnt;
15957
15958 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15959 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15960 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15961 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15962
Jeff Johnson295189b2012-06-20 16:38:30 -070015963 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15964 {
15965 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15966 &(pRcvFltMcAddrList->multicastAddr[i]),
15967 sizeof(tSirMacAddr));
15968 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015969 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15970 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015971
Jeff Johnson295189b2012-06-20 16:38:30 -070015972 /* Store Params pass it to WDI */
15973 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15974 pWdaParams->pWdaContext = pWDA;
15975 /* Store param pointer as passed in by caller */
15976 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015977 status = WDI_8023MulticastListReq(
15978 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015979 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015980 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015981 if(IS_WDI_STATUS_FAILURE(status))
15982 {
15983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15984 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15986 vos_mem_free(pWdaParams->wdaMsgParam);
15987 vos_mem_free(pWdaParams);
15988 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015989 return CONVERT_WDI2VOS_STATUS(status) ;
15990}
Jeff Johnson295189b2012-06-20 16:38:30 -070015991/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015992 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015993 *
15994 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015995void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015996 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15997 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015998{
15999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016001 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016002 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016003 if(NULL == pWdaParams)
16004 {
16005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016006 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016007 VOS_ASSERT(0) ;
16008 return ;
16009 }
16010
16011 vos_mem_free(pWdaParams->wdaMsgParam) ;
16012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16013 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016014 //print a msg, nothing else to do
16015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016016 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016017 return ;
16018}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016019
16020/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016021 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16022 * Free memory.
16023 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016024 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016025void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016026 void* pUserData)
16027{
16028 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16029
16030 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16031 "<------ %s, wdiStatus: %d",
16032 __func__, wdiStatus);
16033
16034 if (NULL == pWdaParams)
16035 {
16036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16037 "%s: Invalid pWdaParams pointer", __func__);
16038 VOS_ASSERT(0);
16039 return;
16040 }
16041
16042 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16043 {
16044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16045 vos_mem_free(pWdaParams->wdaMsgParam);
16046 vos_mem_free(pWdaParams);
16047 }
16048
16049 return;
16050}
16051
Jeff Johnson295189b2012-06-20 16:38:30 -070016052/*
16053 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16054 * Request to WDI to set Receive Filters
16055 */
16056VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16057 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16058{
Jeff Johnson43971f52012-07-17 12:26:56 -070016059 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016060 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16061 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16062 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16063 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16064 tWDA_ReqParams *pWdaParams ;
16065 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016067 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016068 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16069 {
16070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016072 VOS_ASSERT(0);
16073 return VOS_STATUS_E_NOMEM;
16074 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016075 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16076 if(NULL == pWdaParams)
16077 {
16078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016080 VOS_ASSERT(0);
16081 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16082 return VOS_STATUS_E_NOMEM;
16083 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016084 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16085 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16086 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16087 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016088 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16089 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16090
16091 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16092 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016093
16094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16095 "FID %d FT %d NParams %d CT %d",
16096 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16097 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16098 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16099 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016100 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16101 {
16102 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16103 &pRcvPktFilterCfg->paramsData[i],
16104 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016106 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016107 pwdiSetRcvPktFilterReqParamsType->
16108 wdiPktFilterCfg.paramsData[i].protocolLayer,
16109 pwdiSetRcvPktFilterReqParamsType->
16110 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016112 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016113 pwdiSetRcvPktFilterReqParamsType->
16114 wdiPktFilterCfg.paramsData[i].dataOffset,
16115 pwdiSetRcvPktFilterReqParamsType->
16116 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016118 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016119 pwdiSetRcvPktFilterReqParamsType->
16120 wdiPktFilterCfg.paramsData[i].compareData[0],
16121 pwdiSetRcvPktFilterReqParamsType->
16122 wdiPktFilterCfg.paramsData[i].compareData[1],
16123 pwdiSetRcvPktFilterReqParamsType->
16124 wdiPktFilterCfg.paramsData[i].compareData[2],
16125 pwdiSetRcvPktFilterReqParamsType->
16126 wdiPktFilterCfg.paramsData[i].compareData[3],
16127 pwdiSetRcvPktFilterReqParamsType->
16128 wdiPktFilterCfg.paramsData[i].compareData[4],
16129 pwdiSetRcvPktFilterReqParamsType->
16130 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016132 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016133 pwdiSetRcvPktFilterReqParamsType->
16134 wdiPktFilterCfg.paramsData[i].dataMask[0],
16135 pwdiSetRcvPktFilterReqParamsType->
16136 wdiPktFilterCfg.paramsData[i].dataMask[1],
16137 pwdiSetRcvPktFilterReqParamsType->
16138 wdiPktFilterCfg.paramsData[i].dataMask[2],
16139 pwdiSetRcvPktFilterReqParamsType->
16140 wdiPktFilterCfg.paramsData[i].dataMask[3],
16141 pwdiSetRcvPktFilterReqParamsType->
16142 wdiPktFilterCfg.paramsData[i].dataMask[4],
16143 pwdiSetRcvPktFilterReqParamsType->
16144 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016145 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016146 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016147 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016148 /* Store Params pass it to WDI */
16149 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16150 pWdaParams->pWdaContext = pWDA;
16151 /* Store param pointer as passed in by caller */
16152 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016153 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016154 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016155 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016156 if(IS_WDI_STATUS_FAILURE(status))
16157 {
16158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16159 "Failure in SetFilter(),free all the memory,status %d ",status);
16160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16161 vos_mem_free(pWdaParams->wdaMsgParam);
16162 vos_mem_free(pWdaParams);
16163 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016164 return CONVERT_WDI2VOS_STATUS(status) ;
16165}
Jeff Johnson295189b2012-06-20 16:38:30 -070016166/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016167 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016168 *
16169 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016170void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016171 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16172 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016173{
16174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16175 tWDA_CbContext *pWDA;
16176 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16177 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16178 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16179 tANI_U8 i;
16180 vos_msg_t vosMsg;
16181
16182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016183 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016184 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16185
Jeff Johnsone7245742012-09-05 17:12:55 -070016186 if(NULL == pRcvFltPktMatchCntRsp)
16187 {
16188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016189 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016190 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016191 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016192 return ;
16193 }
16194
Jeff Johnson295189b2012-06-20 16:38:30 -070016195 if(NULL == pWdaParams)
16196 {
16197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016198 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016199 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016200 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016201 return ;
16202 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016203 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16204 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016205 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16206 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16207
16208 /* Message Header */
16209 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16210 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16211
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016212 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016213
16214 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16215 {
16216 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16217 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16218 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016219 /* VOS message wrapper */
16220 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16221 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16222 vosMsg.bodyval = 0;
16223 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16224 {
16225 /* free the mem and return */
16226 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16227 }
16228
16229 vos_mem_free(pWdaParams->wdaMsgParam) ;
16230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16231 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016232
16233 return;
16234}
16235/*
16236 * FUNCTION: WDA_FilterMatchCountReqCallback
16237 * Free memory and send RSP back to SME.
16238 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16239 */
16240void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16241{
16242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16243 vos_msg_t vosMsg;
16244
16245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16246 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16247
16248 if(NULL == pWdaParams)
16249 {
16250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16251 "%s: pWdaParams received NULL", __func__);
16252 VOS_ASSERT(0);
16253 return;
16254 }
16255
16256 /* VOS message wrapper */
16257 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16258 vosMsg.bodyptr = NULL;
16259 vosMsg.bodyval = 0;
16260
16261 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16262 {
16263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16264 vos_mem_free(pWdaParams->wdaMsgParam);
16265 vos_mem_free(pWdaParams);
16266 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16267 }
16268
16269 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016270}
Jeff Johnson295189b2012-06-20 16:38:30 -070016271/*
16272 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16273 * Request to WDI to get PC Filter Match Count
16274 */
16275VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16276{
Jeff Johnson43971f52012-07-17 12:26:56 -070016277 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016278 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16279 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16280 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016282 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016283 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16284 {
16285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016287 VOS_ASSERT(0);
16288 return VOS_STATUS_E_NOMEM;
16289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16291 if(NULL == pWdaParams)
16292 {
16293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016295 VOS_ASSERT(0);
16296 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16297 return VOS_STATUS_E_NOMEM;
16298 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016299
Yue Ma7f44bbe2013-04-12 11:47:39 -070016300 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16301 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016302
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016303 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16304 pRcvFltPktMatchRsp->bssId,
16305 sizeof(wpt_macAddr));
16306
Jeff Johnson295189b2012-06-20 16:38:30 -070016307 /* Store Params pass it to WDI */
16308 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16309 pWdaParams->pWdaContext = pWDA;
16310 /* Store param pointer as passed in by caller */
16311 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016312 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016313 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016314 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016315 if(IS_WDI_STATUS_FAILURE(status))
16316 {
16317 /* failure returned by WDI API */
16318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16319 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16321 vos_mem_free(pWdaParams) ;
16322 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16323 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016325 return CONVERT_WDI2VOS_STATUS(status) ;
16326}
Jeff Johnson295189b2012-06-20 16:38:30 -070016327/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016328 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016329 *
16330 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016331void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016332 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16333 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016334{
16335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016337 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016338/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16339 if(NULL == pWdaParams)
16340 {
16341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016342 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016343 VOS_ASSERT(0) ;
16344 return ;
16345 }
16346
16347 vos_mem_free(pWdaParams->wdaMsgParam) ;
16348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16349 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016350 //print a msg, nothing else to do
16351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016352 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016353 return ;
16354}
Jeff Johnson295189b2012-06-20 16:38:30 -070016355/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016356 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16357 * Free memory.
16358 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16359 */
16360void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16361{
16362 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16363
16364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16365 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16366
16367 if(NULL == pWdaParams)
16368 {
16369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16370 "%s: Invalid pWdaParams pointer", __func__);
16371 VOS_ASSERT(0);
16372 return;
16373 }
16374
16375 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16376 {
16377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16378 vos_mem_free(pWdaParams->wdaMsgParam);
16379 vos_mem_free(pWdaParams);
16380 }
16381
16382 return;
16383}
16384/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016385 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16386 * Request to WDI to clear Receive Filters
16387 */
16388VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16389 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16390{
Jeff Johnson43971f52012-07-17 12:26:56 -070016391 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016392 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16393 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16394 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016396 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016397 if(NULL == pwdiRcvFltPktClearReqParamsType)
16398 {
16399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016401 VOS_ASSERT(0);
16402 return VOS_STATUS_E_NOMEM;
16403 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016404 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16405 if(NULL == pWdaParams)
16406 {
16407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016409 VOS_ASSERT(0);
16410 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16411 return VOS_STATUS_E_NOMEM;
16412 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016413 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16414 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016415 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16416 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16417 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16418 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016419
Yue Ma7f44bbe2013-04-12 11:47:39 -070016420 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016421 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016422 /* Store Params pass it to WDI */
16423 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16424 pWdaParams->pWdaContext = pWDA;
16425 /* Store param pointer as passed in by caller */
16426 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016427 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016428 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016429 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016430 if(IS_WDI_STATUS_FAILURE(status))
16431 {
16432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16433 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016435 vos_mem_free(pWdaParams->wdaMsgParam);
16436 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016437 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016438 return CONVERT_WDI2VOS_STATUS(status) ;
16439}
16440#endif // WLAN_FEATURE_PACKET_FILTERING
16441
Jeff Johnson295189b2012-06-20 16:38:30 -070016442/*
16443 * FUNCTION: WDA_ProcessSetPowerParamsReq
16444 * Request to WDI to set power params
16445 */
16446VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16447 tSirSetPowerParamsReq *pPowerParams)
16448{
Jeff Johnson43971f52012-07-17 12:26:56 -070016449 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016450 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16451 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016452 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016454 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016455 if(NULL == pwdiSetPowerParamsReqInfo)
16456 {
16457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016458 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016459 VOS_ASSERT(0);
16460 return VOS_STATUS_E_NOMEM;
16461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016462 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16463 if(NULL == pWdaParams)
16464 {
16465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016467 VOS_ASSERT(0);
16468 vos_mem_free(pwdiSetPowerParamsReqInfo);
16469 return VOS_STATUS_E_NOMEM;
16470 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016471
Jeff Johnson295189b2012-06-20 16:38:30 -070016472
16473 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16474 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016475 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16476 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016477 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16478 pPowerParams->uListenInterval;
16479 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16480 pPowerParams->uBcastMcastFilter;
16481 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16482 pPowerParams->uEnableBET;
16483 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16484 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016485 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16486 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016487 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16488 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016489
Jeff Johnson295189b2012-06-20 16:38:30 -070016490 /* Store Params pass it to WDI */
16491 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16492 pWdaParams->pWdaContext = pWDA;
16493 /* Store param pointer as passed in by caller */
16494 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016495 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016496 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016497 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016498 if(IS_WDI_STATUS_FAILURE(status))
16499 {
16500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16501 "Failure in Set power params REQ WDI API, free all the memory " );
16502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16503 vos_mem_free(pWdaParams->wdaMsgParam);
16504 pWdaParams->wdaWdiApiMsgParam = NULL;
16505 pWdaParams->wdaMsgParam = NULL;
16506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016507 return CONVERT_WDI2VOS_STATUS(status) ;
16508}
16509
16510/*
16511 * FUNCTION: WDA_SetTmLevelRspCallback
16512 * Set TM Level response
16513 */
16514void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16515{
16516 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16517
16518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016519 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016520
16521 if(NULL == pWdaParams)
16522 {
16523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016524 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016525 VOS_ASSERT(0) ;
16526 return ;
16527 }
16528
16529 /* Dose not need to send notification to upper layer
16530 * Just free allocated resources */
16531 if( pWdaParams != NULL )
16532 {
16533 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16534 {
16535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16536 }
16537 vos_mem_free(pWdaParams->wdaMsgParam) ;
16538 vos_mem_free(pWdaParams) ;
16539 }
16540}
16541
16542/*
16543 * FUNCTION: WDA_ProcessSetTmLevelReq
16544 * Set TM Level request
16545 */
16546VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16547 tAniSetTmLevelReq *setTmLevelReq)
16548{
16549 WDI_Status status = WDI_STATUS_SUCCESS ;
16550 tWDA_ReqParams *pWdaParams ;
16551 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16552 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16553 sizeof(WDI_SetTmLevelReqType)) ;
16554 if(NULL == wdiSetTmLevelReq)
16555 {
16556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016558 VOS_ASSERT(0);
16559 return VOS_STATUS_E_NOMEM;
16560 }
16561
16562 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16563 if(NULL == pWdaParams)
16564 {
16565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016566 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016567 VOS_ASSERT(0);
16568 vos_mem_free(wdiSetTmLevelReq);
16569 return VOS_STATUS_E_NOMEM;
16570 }
16571
16572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016573 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016574
16575 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16576 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16577
16578 pWdaParams->pWdaContext = pWDA;
16579 pWdaParams->wdaMsgParam = setTmLevelReq;
16580 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16581
16582 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16583 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16584
16585 if(IS_WDI_STATUS_FAILURE(status))
16586 {
16587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016588 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016589 vos_mem_free(pWdaParams->wdaMsgParam) ;
16590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16591 vos_mem_free(pWdaParams) ;
16592 }
16593
16594 return CONVERT_WDI2VOS_STATUS(status) ;
16595}
16596
16597VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16598 tpTxControlParams pTxCtrlParam)
16599{
16600 VOS_STATUS wdaStatus;
16601
16602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016603 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016604 if( pTxCtrlParam == NULL )
16605 {
16606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016607 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016608 return VOS_STATUS_E_FAILURE;
16609 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016610 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16611 {
16612 wdaStatus = WDA_SuspendDataTx(pWDA);
16613 }
16614 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16615 {
16616 wdaStatus = WDA_ResumeDataTx(pWDA);
16617 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016618 return wdaStatus;
16619}
16620
16621 /* FUNCTION WDA_featureCapsExchange
16622 * WDA API to invoke capability exchange between host and FW.
16623 */
16624void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16625{
16626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016627 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016628 WDI_featureCapsExchangeReq( NULL, pVosContext);
16629}
16630
Yathish9f22e662012-12-10 14:21:35 -080016631/* FUNCTION WDA_disableCapablityFeature
16632 * WDA API to diable Active mode offload in host.
16633 */
16634void WDA_disableCapablityFeature(tANI_U8 feature_index)
16635{
16636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16637 "%s:enter", __func__ );
16638 WDI_disableCapablityFeature(feature_index);
16639}
16640
Jeff Johnson295189b2012-06-20 16:38:30 -070016641 /* FUNCTION WDA_getHostWlanFeatCaps
16642 * Wrapper for WDI API, that will return if the feature (enum value).passed
16643 * to this API is supported or not in Host
16644 * return value
16645 * 0 - implies feature is NOT Supported
16646 * any non zero value - implies feature is SUPPORTED
16647 */
16648tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16649{
16650 return WDI_getHostWlanFeatCaps(featEnumValue);
16651}
16652
16653 /* FUNCTION WDA_getFwWlanFeatCaps
16654 * Wrapper for WDI API, that will return if the feature (enum value).passed
16655 * to this API is supported or not in FW
16656 * return value
16657 * 0 - implies feature is NOT Supported
16658 * any non zero value - implies feature is SUPPORTED
16659 */
16660tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16661{
16662 return WDI_getFwWlanFeatCaps(featEnumValue);
16663}
16664
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016665
Jeff Johnson295189b2012-06-20 16:38:30 -070016666/*
16667 * FUNCTION: WDA_shutdown
16668 * Shutdown WDA/WDI without handshaking with Riva.
16669 * Synchronous function.
16670 */
16671VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16672{
16673 WDI_Status wdiStatus;
16674 //tANI_U8 eventIdx = 0;
16675 VOS_STATUS status = VOS_STATUS_SUCCESS;
16676 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016677 if (NULL == pWDA)
16678 {
16679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016680 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016681 VOS_ASSERT(0);
16682 return VOS_STATUS_E_FAILURE;
16683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016684 /* FTM mode stay START_STATE */
16685 if( (WDA_READY_STATE != pWDA->wdaState) &&
16686 (WDA_INIT_STATE != pWDA->wdaState) &&
16687 (WDA_START_STATE != pWDA->wdaState) )
16688 {
16689 VOS_ASSERT(0);
16690 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016691
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016692 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16693 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016694 {
16695 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016696 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016697 }
Leo Chang9d76f622013-08-23 16:34:52 -070016698 else
16699 {
16700 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16701 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016702
Jeff Johnson295189b2012-06-20 16:38:30 -070016703 /* call WDI shutdown */
16704 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016705 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16706 {
16707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16708 "error in WDA Stop" );
16709 status = VOS_STATUS_E_FAILURE;
16710 }
16711 /* WDI stop is synchrnous, shutdown is complete when it returns */
16712 pWDA->wdaState = WDA_STOP_STATE;
16713
Jeff Johnson295189b2012-06-20 16:38:30 -070016714 /* shutdown should perform the stop & close actions. */
16715 /* Destroy the event */
16716 status = vos_event_destroy(&pWDA->txFrameEvent);
16717 if(!VOS_IS_STATUS_SUCCESS(status))
16718 {
16719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016720 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016721 status = VOS_STATUS_E_FAILURE;
16722 }
16723 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16724 if(!VOS_IS_STATUS_SUCCESS(status))
16725 {
16726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016727 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016728 status = VOS_STATUS_E_FAILURE;
16729 }
16730 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16731 if(!VOS_IS_STATUS_SUCCESS(status))
16732 {
16733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016734 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016735 status = VOS_STATUS_E_FAILURE;
16736 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016737 /* free WDA context */
16738 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16739 if ( !VOS_IS_STATUS_SUCCESS(status) )
16740 {
16741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16742 "error in WDA close " );
16743 status = VOS_STATUS_E_FAILURE;
16744 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016745 return status;
16746}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016747
Jeff Johnsone7245742012-09-05 17:12:55 -070016748/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016749 * FUNCTION: WDA_setNeedShutdown
16750 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016751 */
16752
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016753void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016754{
16755 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016756 if(pWDA == NULL)
16757 {
16758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16759 "Could not get the WDA Context pointer" );
16760 return;
16761 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016762 pWDA->needShutdown = TRUE;
16763}
16764/*
16765 * FUNCTION: WDA_needShutdown
16766 * WDA needs a shutdown
16767 */
16768
16769v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16770{
16771 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016772 if(pWDA == NULL)
16773 {
16774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16775 "Could not get the WDA Context pointer" );
16776 return 0;
16777 }
16778 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016779}
16780
Mohit Khanna4a70d262012-09-11 16:30:12 -070016781#ifdef WLAN_FEATURE_11AC
16782/*
16783 * FUNCTION: WDA_SetBeaconFilterReqCallback
16784 *
16785 */
16786void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16787{
16788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016790 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016791 if(NULL == pWdaParams)
16792 {
16793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016794 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016795 VOS_ASSERT(0) ;
16796 return ;
16797 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016798
Mohit Khanna4a70d262012-09-11 16:30:12 -070016799 vos_mem_free(pWdaParams->wdaMsgParam) ;
16800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16801 vos_mem_free(pWdaParams) ;
16802 /*
16803 * No respone required for SetBeaconFilter req so just free the request
16804 * param here
16805 */
16806
16807 return ;
16808}
16809
16810VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16811 tUpdateVHTOpMode *pData)
16812{
16813 WDI_Status status = WDI_STATUS_SUCCESS ;
16814 tWDA_ReqParams *pWdaParams ;
16815 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16816 sizeof(WDI_UpdateVHTOpMode)) ;
16817 if(NULL == wdiTemp)
16818 {
16819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016820 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016821 VOS_ASSERT(0);
16822 return VOS_STATUS_E_NOMEM;
16823 }
16824 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16825 if(NULL == pWdaParams)
16826 {
16827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016828 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016829 VOS_ASSERT(0);
16830 vos_mem_free(wdiTemp);
16831 return VOS_STATUS_E_NOMEM;
16832 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053016833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16834 "------> %s Opmode = %d and staid = %d" ,
16835 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016836 wdiTemp->opMode = pData->opMode;
16837 wdiTemp->staId = pData->staId;
16838
16839 pWdaParams->pWdaContext = pWDA;
16840 /* Store Req pointer, as this will be used for response */
16841 pWdaParams->wdaMsgParam = (void *)pData;
16842 /* store Params pass it to WDI */
16843 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16844
16845 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16846
16847 if(IS_WDI_STATUS_FAILURE(status))
16848 {
16849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16850 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16852 vos_mem_free(pWdaParams->wdaMsgParam);
16853 vos_mem_free(pWdaParams);
16854 }
16855 return CONVERT_WDI2VOS_STATUS(status) ;
16856}
16857#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016858
16859/*==========================================================================
16860 FUNCTION WDA_TransportChannelDebug
16861
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016862 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016863 Display Transport Channel debugging information
16864 User may request to display DXE channel snapshot
16865 Or if host driver detects any abnormal stcuk may display
16866
16867 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016868 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016869 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016870 debugFlags : Enable stall detect features
16871 defined by WPAL_DeviceDebugFlags
16872 These features may effect
16873 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016874
16875 RETURN VALUE
16876 NONE
16877
16878===========================================================================*/
16879void WDA_TransportChannelDebug
16880(
schang6295e542013-03-12 15:31:23 -070016881 tpAniSirGlobal pMac,
16882 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016883 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016884)
16885{
Mihir Shete40a55652014-03-02 14:14:47 +053016886 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016887 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016888}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016889
16890/*==========================================================================
16891 FUNCTION WDA_SetEnableSSR
16892
16893 DESCRIPTION
16894 API to enable/disable SSR on WDI timeout
16895
16896 PARAMETERS
16897 enableSSR : enable/disable SSR
16898
16899 RETURN VALUE
16900 NONE
16901
16902===========================================================================*/
16903void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16904{
16905 WDI_SetEnableSSR(enableSSR);
16906}
Leo Chang9056f462013-08-01 19:21:11 -070016907
16908#ifdef FEATURE_WLAN_LPHB
16909/*
16910 * FUNCTION: WDA_LPHBconfRspCallback
16911 *
16912 */
16913void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16914{
16915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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 /* Do not need to send notification to upper layer
16928 * Just free allocated resources */
16929 if (pWdaParams != NULL)
16930 {
16931 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16932 {
16933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16934 }
16935 vos_mem_free(pWdaParams->wdaMsgParam) ;
16936 vos_mem_free(pWdaParams) ;
16937 }
16938
16939 return;
16940}
16941
16942/*
16943 * FUNCTION: WDA_ProcessLPHBConfReq
16944 *
16945 */
16946VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16947 tSirLPHBReq *pData)
16948{
16949 WDI_Status wdiStatus;
16950 tWDA_ReqParams *pWdaParams ;
16951
16952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16953 "------> %s " , __func__);
16954
16955 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16956 if (NULL == pWdaParams)
16957 {
16958 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16959 "%s: VOS MEM Alloc Failure", __func__);
16960 VOS_ASSERT(0);
16961 vos_mem_free(pData);
16962 return VOS_STATUS_E_NOMEM;
16963 }
16964
16965 pWdaParams->pWdaContext = pWDA;
16966 pWdaParams->wdaMsgParam = (void *)pData;
16967 pWdaParams->wdaWdiApiMsgParam = NULL;
16968
16969 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16970 if (WDI_STATUS_PENDING == wdiStatus)
16971 {
16972 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16973 "Pending received for %s:%d ", __func__, __LINE__);
16974 }
16975 else if (WDI_STATUS_SUCCESS != wdiStatus)
16976 {
16977 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16978 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16979 vos_mem_free(pWdaParams->wdaMsgParam);
16980 vos_mem_free(pWdaParams);
16981 }
16982
16983 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16984}
16985#endif /* FEATURE_WLAN_LPHB */
16986
c_hpothu92367912014-05-01 15:18:17 +053016987void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16988 void* pUserData)
16989{
16990 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16991
16992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16993 "<------ %s " ,__func__);
16994 if (NULL == pBcnMissRateInfo)
16995 {
16996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16997 "%s: pWdaParams received NULL", __func__);
16998 VOS_ASSERT(0) ;
16999 return ;
17000 }
17001 if (pBcnMissRateInfo->callback)
17002 {
17003 pBcnMissRateInfo->callback(status, bcnMissRate,
17004 pBcnMissRateInfo->data);
17005 }
17006 vos_mem_free(pUserData);
17007
17008 return;
17009}
17010
17011v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17012 tSirBcnMissRateReq *pData)
17013{
17014 WDI_Status wdiStatus;
17015 tSirBcnMissRateInfo *pBcnMissRateInfo;
17016
17017 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17018 "------> %s " , __func__);
17019
17020 pBcnMissRateInfo =
17021 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17022 if (NULL == pBcnMissRateInfo)
17023 {
17024 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17025 "%s: VOS MEM Alloc Failure", __func__);
17026 VOS_ASSERT(0);
17027 vos_mem_free(pData);
17028 return;
17029 }
17030
17031 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17032 pBcnMissRateInfo->data = pData->data;
17033
17034 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17035 WDA_GetBcnMissRateCallback,
17036 pData->bssid);
17037 if (WDI_STATUS_PENDING == wdiStatus)
17038 {
17039 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17040 "Pending received for %s:%d ", __func__, __LINE__);
17041 }
17042 else if (WDI_STATUS_SUCCESS != wdiStatus)
17043 {
17044 if (pBcnMissRateInfo->callback)
17045 {
17046 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17047 -1, pBcnMissRateInfo->data);
17048 }
17049 }
17050 vos_mem_free(pData);
17051}
Dino Mycle41bdc942014-06-10 11:30:24 +053017052
17053#ifdef WLAN_FEATURE_EXTSCAN
17054
17055/*==========================================================================
17056 FUNCTION WDA_EXTScanStartRspCallback
17057
17058 DESCRIPTION
17059 API to send EXTScan Start Response to HDD
17060
17061 PARAMETERS
17062 pEventData: Response from FW
17063 pUserData:
17064===========================================================================*/
17065void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17066{
17067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17068 tWDA_CbContext *pWDA = NULL;
17069 void *pCallbackContext;
17070 tpAniSirGlobal pMac;
17071
17072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17073 "%s:", __func__);
17074 if (NULL == pWdaParams)
17075 {
17076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17077 "%s: pWdaParams received NULL", __func__);
17078 VOS_ASSERT(0);
17079 return;
17080 }
17081
17082 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17083
17084 if (NULL == pWDA)
17085 {
17086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17087 "%s: pWDA received NULL", __func__);
17088 VOS_ASSERT(0);
17089 goto error;
17090 }
17091
17092 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17093 if (NULL == pMac)
17094 {
17095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17096 "%s:pMac is NULL", __func__);
17097 VOS_ASSERT(0);
17098 goto error;
17099 }
17100
17101 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17102
17103 if (pMac->sme.pEXTScanIndCb)
17104 {
17105 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_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
17115error:
17116
17117 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17118 {
17119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17120 }
17121 if (pWdaParams->wdaMsgParam != NULL)
17122 {
17123 vos_mem_free(pWdaParams->wdaMsgParam);
17124 }
17125 vos_mem_free(pWdaParams) ;
17126
17127 return;
17128}
17129
17130/*==========================================================================
17131 FUNCTION WDA_EXTScanStopRspCallback
17132
17133 DESCRIPTION
17134 API to send EXTScan Stop Response to HDD
17135
17136 PARAMETERS
17137 pEventData: Response from FW
17138 pUserData:
17139===========================================================================*/
17140void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17141{
17142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17143 tWDA_CbContext *pWDA = NULL;
17144 void *pCallbackContext;
17145 tpAniSirGlobal pMac;
17146
17147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17148 "%s:", __func__);
17149 if (NULL == pWdaParams)
17150 {
17151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17152 "%s: pWdaParams received NULL", __func__);
17153 VOS_ASSERT(0);
17154 return;
17155 }
17156
17157 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17158
17159 if (NULL == pWDA)
17160 {
17161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17162 "%s: pWDA received NULL", __func__);
17163 VOS_ASSERT(0);
17164 goto error;
17165 }
17166
17167 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17168 if (NULL == pMac)
17169 {
17170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17171 "%s:pMac is NULL", __func__);
17172 VOS_ASSERT(0);
17173 goto error;
17174 }
17175 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17176
17177 if (pMac->sme.pEXTScanIndCb)
17178 {
17179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17180 "%s:HDD call back function called", __func__);
17181 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17182 pEventData);
17183 }
17184 else
17185 {
17186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17187 "%s:HDD callback is null", __func__);
17188 VOS_ASSERT(0);
17189 }
17190
17191error:
17192
17193 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17194 {
17195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17196 }
17197 if (pWdaParams->wdaMsgParam != NULL)
17198 {
17199 vos_mem_free(pWdaParams->wdaMsgParam);
17200 }
17201 vos_mem_free(pWdaParams) ;
17202
17203
17204 return;
17205}
17206
17207/*==========================================================================
17208 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17209
17210 DESCRIPTION
17211 API to send EXTScan Get Cached Results Response to HDD
17212
17213 PARAMETERS
17214 pEventData: Response from FW
17215 pUserData:
17216===========================================================================*/
17217void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17218{
17219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17220 tWDA_CbContext *pWDA = NULL;
17221 void *pCallbackContext;
17222 tpAniSirGlobal pMac;
17223
17224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17225 "%s: ", __func__);
17226 if (NULL == pWdaParams)
17227 {
17228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17229 "%s: pWdaParams received NULL", __func__);
17230 VOS_ASSERT(0);
17231 return;
17232 }
17233
17234 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17235
17236 if (NULL == pWDA)
17237 {
17238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17239 "%s: pWDA received NULL", __func__);
17240 VOS_ASSERT(0);
17241 goto error;
17242 }
17243
17244 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17245 if (NULL == pMac)
17246 {
17247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17248 "%s:pMac is NULL", __func__);
17249 VOS_ASSERT(0);
17250 goto error;
17251 }
17252
17253 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17254
17255 if (pMac->sme.pEXTScanIndCb)
17256 {
17257 pMac->sme.pEXTScanIndCb(pCallbackContext,
17258 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17259 pEventData);
17260 }
17261 else
17262 {
17263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17264 "%s:HDD callback is null", __func__);
17265 VOS_ASSERT(0);
17266 }
17267
17268
17269error:
17270
17271 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17272 {
17273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17274 }
17275 if (pWdaParams->wdaMsgParam != NULL)
17276 {
17277 vos_mem_free(pWdaParams->wdaMsgParam);
17278 }
17279 vos_mem_free(pWdaParams) ;
17280
17281 return;
17282}
17283
17284/*==========================================================================
17285 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17286
17287 DESCRIPTION
17288 API to send EXTScan Get Capabilities Response to HDD
17289
17290 PARAMETERS
17291 pEventData: Response from FW
17292 pUserData:
17293===========================================================================*/
17294void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17295{
17296 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17297 tWDA_CbContext *pWDA = NULL;
17298 void *pCallbackContext;
17299 tpAniSirGlobal pMac;
17300
17301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17302 "%s:", __func__);
17303 if (NULL == pWdaParams)
17304 {
17305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17306 "%s: pWdaParams received NULL", __func__);
17307 VOS_ASSERT(0);
17308 return;
17309 }
17310
17311 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17312
17313 if (NULL == pWDA)
17314 {
17315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17316 "%s: pWDA received NULL", __func__);
17317 VOS_ASSERT(0);
17318 goto error;
17319 }
17320
17321 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17322 if (NULL == pMac)
17323 {
17324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17325 "%s:pMac is NULL", __func__);
17326 VOS_ASSERT(0);
17327 goto error;
17328 }
17329
17330 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17331
17332 if (pMac->sme.pEXTScanIndCb)
17333 {
17334 pMac->sme.pEXTScanIndCb(pCallbackContext,
17335 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17336 pEventData);
17337 }
17338 else
17339 {
17340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17341 "%s:HDD callback is null", __func__);
17342 VOS_ASSERT(0);
17343 }
17344
17345
17346error:
17347
17348 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17349 {
17350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17351 }
17352 if (pWdaParams->wdaMsgParam != NULL)
17353 {
17354 vos_mem_free(pWdaParams->wdaMsgParam);
17355 }
17356 vos_mem_free(pWdaParams) ;
17357
17358 return;
17359}
17360
17361/*==========================================================================
17362 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17363
17364 DESCRIPTION
17365 API to send EXTScan Set BSSID Hotlist Response to HDD
17366
17367 PARAMETERS
17368 pEventData: Response from FW
17369 pUserData:
17370===========================================================================*/
17371void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17372{
17373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17374 tWDA_CbContext *pWDA = NULL;
17375 void *pCallbackContext;
17376 tpAniSirGlobal pMac;
17377
17378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17379 "%s: ", __func__);
17380 if (NULL == pWdaParams)
17381 {
17382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17383 "%s: pWdaParams received NULL", __func__);
17384 VOS_ASSERT(0) ;
17385 return;
17386 }
17387
17388 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17389
17390 if (NULL == pWDA)
17391 {
17392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17393 "%s: pWDA received NULL", __func__);
17394 VOS_ASSERT(0);
17395 goto error;
17396 }
17397
17398 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17399 if (NULL == pMac)
17400 {
17401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17402 "%s:pMac is NULL", __func__);
17403 VOS_ASSERT(0);
17404 goto error;
17405 }
17406
17407 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17408
17409 if (pMac->sme.pEXTScanIndCb)
17410 {
17411 pMac->sme.pEXTScanIndCb(pCallbackContext,
17412 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17413 pEventData);
17414 }
17415 else
17416 {
17417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17418 "%s:HDD callback is null", __func__);
17419 VOS_ASSERT(0);
17420 }
17421
17422
17423error:
17424
17425 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17426 {
17427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17428 }
17429 if (pWdaParams->wdaMsgParam != NULL)
17430 {
17431 vos_mem_free(pWdaParams->wdaMsgParam);
17432 }
17433 vos_mem_free(pWdaParams) ;
17434
17435 return;
17436}
17437
17438/*==========================================================================
17439 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17440
17441 DESCRIPTION
17442 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17443
17444 PARAMETERS
17445 pEventData: Response from FW
17446 pUserData:
17447===========================================================================*/
17448void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17449{
17450 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17451 tWDA_CbContext *pWDA = NULL;
17452 void *pCallbackContext;
17453 tpAniSirGlobal pMac;
17454
17455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17456 "%s:", __func__);
17457 if (NULL == pWdaParams)
17458 {
17459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17460 "%s: pWdaParams received NULL", __func__);
17461 VOS_ASSERT(0) ;
17462 return;
17463 }
17464
17465 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17466
17467 if (NULL == pWDA)
17468 {
17469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17470 "%s: pWDA received NULL", __func__);
17471 VOS_ASSERT(0);
17472 goto error;
17473 }
17474
17475 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17476 if (NULL == pMac)
17477 {
17478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17479 "%s:pMac is NULL", __func__);
17480 VOS_ASSERT(0);
17481 goto error;
17482 }
17483
17484 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17485
17486 if (pMac->sme.pEXTScanIndCb)
17487 {
17488 pMac->sme.pEXTScanIndCb(pCallbackContext,
17489 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17490 pEventData);
17491 }
17492 else
17493 {
17494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17495 "%s:HDD callback is null", __func__);
17496 VOS_ASSERT(0);
17497 }
17498
17499
17500error:
17501
17502 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17503 {
17504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17505 }
17506 if (pWdaParams->wdaMsgParam != NULL)
17507 {
17508 vos_mem_free(pWdaParams->wdaMsgParam);
17509 }
17510 vos_mem_free(pWdaParams) ;
17511
17512 return;
17513}
17514
17515/*==========================================================================
17516 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17517
17518 DESCRIPTION
17519 API to send EXTScan Set Significant RSSI Change RSP to HDD
17520
17521 PARAMETERS
17522 pEventData: Response from FW
17523 pUserData:
17524===========================================================================*/
17525void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17526{
17527 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17528 tWDA_CbContext *pWDA = NULL;
17529 void *pCallbackContext;
17530 tpAniSirGlobal pMac;
17531
17532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17533 "%s:", __func__);
17534 if (NULL == pWdaParams)
17535 {
17536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17537 "%s: pWdaParams received NULL", __func__);
17538 VOS_ASSERT(0) ;
17539 return;
17540 }
17541
17542 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17543
17544 if (NULL == pWDA)
17545 {
17546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17547 "%s: pWDA received NULL", __func__);
17548 VOS_ASSERT(0);
17549 goto error;
17550 }
17551
17552 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17553 if (NULL == pMac)
17554 {
17555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17556 "%s:pMac is NULL", __func__);
17557 VOS_ASSERT(0);
17558 goto error;
17559 }
17560
17561 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17562
17563 if (pMac->sme.pEXTScanIndCb)
17564 {
17565 pMac->sme.pEXTScanIndCb(pCallbackContext,
17566 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17567 pEventData);
17568 }
17569 else
17570 {
17571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17572 "%s:HDD callback is null", __func__);
17573 VOS_ASSERT(0);
17574 }
17575
17576
17577error:
17578
17579 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17580 {
17581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17582 }
17583 if (pWdaParams->wdaMsgParam != NULL)
17584 {
17585 vos_mem_free(pWdaParams->wdaMsgParam);
17586 }
17587 vos_mem_free(pWdaParams) ;
17588
17589 return;
17590}
17591
17592/*==========================================================================
17593 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17594
17595 DESCRIPTION
17596 API to send EXTScan Set Significant RSSI Change RSP to HDD
17597
17598 PARAMETERS
17599 pEventData: Response from FW
17600 pUserData:
17601===========================================================================*/
17602void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17603 void* pUserData)
17604{
17605 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17606 tWDA_CbContext *pWDA = NULL;
17607 void *pCallbackContext;
17608 tpAniSirGlobal pMac;
17609
17610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17611 "%s:", __func__);
17612 if (NULL == pWdaParams)
17613 {
17614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17615 "%s: pWdaParams received NULL", __func__);
17616 VOS_ASSERT(0) ;
17617 return;
17618 }
17619
17620 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17621
17622 if (NULL == pWDA)
17623 {
17624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17625 "%s: pWDA received NULL", __func__);
17626 VOS_ASSERT(0);
17627 goto error;
17628 }
17629
17630 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17631 if (NULL == pMac)
17632 {
17633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17634 "%s:pMac is NULL", __func__);
17635 VOS_ASSERT(0);
17636 goto error;
17637 }
17638
17639 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17640
17641 if (pMac->sme.pEXTScanIndCb)
17642 {
17643 pMac->sme.pEXTScanIndCb(pCallbackContext,
17644 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17645 pEventData);
17646 }
17647 else
17648 {
17649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17650 "%s:HDD callback is null", __func__);
17651 VOS_ASSERT(0);
17652 }
17653
17654
17655error:
17656
17657 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17658 {
17659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17660 }
17661 if (pWdaParams->wdaMsgParam != NULL)
17662 {
17663 vos_mem_free(pWdaParams->wdaMsgParam);
17664 }
17665 vos_mem_free(pWdaParams) ;
17666
17667 return;
17668}
17669
17670/*==========================================================================
17671 FUNCTION WDA_ProcessEXTScanStartReq
17672
17673 DESCRIPTION
17674 API to send EXTScan Start Request to WDI
17675
17676 PARAMETERS
17677 pWDA: Pointer to WDA context
17678 wdaRequest: Pointer to EXTScan req parameters
17679===========================================================================*/
17680VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17681 tSirEXTScanStartReqParams *wdaRequest)
17682{
17683 WDI_Status status = WDI_STATUS_SUCCESS;
17684 tWDA_ReqParams *pWdaParams;
17685
17686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17687 "%s: ", __func__);
17688 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17689 if (NULL == pWdaParams)
17690 {
17691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17692 "%s: VOS MEM Alloc Failure", __func__);
17693 VOS_ASSERT(0);
17694 return VOS_STATUS_E_NOMEM;
17695 }
17696 pWdaParams->pWdaContext = pWDA;
17697 pWdaParams->wdaMsgParam = wdaRequest;
17698 pWdaParams->wdaWdiApiMsgParam = NULL;
17699
17700 status = WDI_EXTScanStartReq((void *)wdaRequest,
17701 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17702 (void *)pWdaParams);
17703 if (IS_WDI_STATUS_FAILURE(status))
17704 {
17705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17706 "Failure to request. Free all the memory " );
17707 vos_mem_free(pWdaParams->wdaMsgParam);
17708 vos_mem_free(pWdaParams);
17709 }
17710 return CONVERT_WDI2VOS_STATUS(status);
17711}
17712
17713/*==========================================================================
17714 FUNCTION WDA_ProcessEXTScanStopReq
17715
17716 DESCRIPTION
17717 API to send EXTScan Start Request to WDI
17718
17719 PARAMETERS
17720 pWDA: Pointer to WDA context
17721 wdaRequest: Pointer to EXTScan req parameters
17722===========================================================================*/
17723VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17724 tSirEXTScanStopReqParams *wdaRequest)
17725{
17726 WDI_Status status = WDI_STATUS_SUCCESS;
17727 tWDA_ReqParams *pWdaParams;
17728
17729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17730 "%s:", __func__);
17731 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17732 if (NULL == pWdaParams)
17733 {
17734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17735 "%s: VOS MEM Alloc Failure", __func__);
17736 VOS_ASSERT(0);
17737 return VOS_STATUS_E_NOMEM;
17738 }
17739 pWdaParams->pWdaContext = pWDA;
17740 pWdaParams->wdaMsgParam = wdaRequest;
17741 pWdaParams->wdaWdiApiMsgParam = NULL;
17742
17743 status = WDI_EXTScanStopReq((void *)wdaRequest,
17744 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17745 (void *)pWdaParams);
17746 if (IS_WDI_STATUS_FAILURE(status))
17747 {
17748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17749 "Failure to request. Free all the memory " );
17750 vos_mem_free(pWdaParams->wdaMsgParam);
17751 vos_mem_free(pWdaParams);
17752 }
17753 return CONVERT_WDI2VOS_STATUS(status);
17754}
17755
17756/*==========================================================================
17757 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17758
17759 DESCRIPTION
17760 API to send EXTScan Get Cached Results Request to WDI
17761
17762 PARAMETERS
17763 pWDA: Pointer to WDA context
17764 wdaRequest: Pointer to EXTScan req parameters
17765===========================================================================*/
17766VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17767 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17768{
17769 WDI_Status status = WDI_STATUS_SUCCESS;
17770 tWDA_ReqParams *pWdaParams;
17771
17772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17773 "%s: ", __func__);
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_EXTScanGetCachedResultsReq((void *)wdaRequest,
17787 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
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_ProcessEXTScanGetCapabilitiesReq
17801
17802 DESCRIPTION
17803 API to send EXTScan Get Capabilities Request to WDI
17804
17805 PARAMETERS
17806 pWDA: Pointer to WDA context
17807 wdaRequest: Pointer to EXTScan req parameters
17808===========================================================================*/
17809VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17810 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17811{
17812 WDI_Status status = WDI_STATUS_SUCCESS;
17813 tWDA_ReqParams *pWdaParams;
17814
17815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17816 "%s:", __func__);
17817 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17818 if (NULL == pWdaParams)
17819 {
17820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17821 "%s: VOS MEM Alloc Failure", __func__);
17822 VOS_ASSERT(0);
17823 return VOS_STATUS_E_NOMEM;
17824 }
17825 pWdaParams->pWdaContext = pWDA;
17826 pWdaParams->wdaMsgParam = wdaRequest;
17827 pWdaParams->wdaWdiApiMsgParam = NULL;
17828
17829 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17830 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17831 (void *)pWdaParams);
17832 if (IS_WDI_STATUS_FAILURE(status))
17833 {
17834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17835 "Failure to request. Free all the memory " );
17836 vos_mem_free(pWdaParams->wdaMsgParam);
17837 vos_mem_free(pWdaParams);
17838 }
17839 return CONVERT_WDI2VOS_STATUS(status);
17840}
17841
17842/*==========================================================================
17843 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17844
17845 DESCRIPTION
17846 API to send Set BSSID Hotlist Request to WDI
17847
17848 PARAMETERS
17849 pWDA: Pointer to WDA context
17850 wdaRequest: Pointer to EXTScan req parameters
17851===========================================================================*/
17852VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17853 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17854{
17855 WDI_Status status = WDI_STATUS_SUCCESS;
17856 tWDA_ReqParams *pWdaParams;
17857
17858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17859 "%s: ", __func__);
17860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17861 if (NULL == pWdaParams)
17862 {
17863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17864 "%s: VOS MEM Alloc Failure", __func__);
17865 VOS_ASSERT(0);
17866 return VOS_STATUS_E_NOMEM;
17867 }
17868 pWdaParams->pWdaContext = pWDA;
17869 pWdaParams->wdaMsgParam = wdaRequest;
17870 pWdaParams->wdaWdiApiMsgParam = NULL;
17871
17872 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17873 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17874 (void *)pWdaParams);
17875 if (IS_WDI_STATUS_FAILURE(status))
17876 {
17877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17878 "Failure to request. Free all the memory " );
17879 vos_mem_free(pWdaParams->wdaMsgParam);
17880 vos_mem_free(pWdaParams);
17881 }
17882 return CONVERT_WDI2VOS_STATUS(status);
17883}
17884
17885/*==========================================================================
17886 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17887
17888 DESCRIPTION
17889 API to send Reset BSSID Hotlist Request to WDI
17890
17891 PARAMETERS
17892 pWDA: Pointer to WDA context
17893 wdaRequest: Pointer to EXTScan req parameters
17894===========================================================================*/
17895VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17896 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17897{
17898 WDI_Status status = WDI_STATUS_SUCCESS;
17899 tWDA_ReqParams *pWdaParams;
17900
17901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17902 "%s:", __func__);
17903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17904 if (NULL == pWdaParams)
17905 {
17906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17907 "%s: VOS MEM Alloc Failure", __func__);
17908 VOS_ASSERT(0);
17909 return VOS_STATUS_E_NOMEM;
17910 }
17911 pWdaParams->pWdaContext = pWDA;
17912 pWdaParams->wdaMsgParam = wdaRequest;
17913 pWdaParams->wdaWdiApiMsgParam = NULL;
17914
17915 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17916 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17917 (void *)pWdaParams);
17918 if (IS_WDI_STATUS_FAILURE(status))
17919 {
17920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17921 "Failure to request. Free all the memory " );
17922 vos_mem_free(pWdaParams->wdaMsgParam);
17923 vos_mem_free(pWdaParams);
17924 }
17925 return CONVERT_WDI2VOS_STATUS(status);
17926}
17927
17928/*==========================================================================
17929 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17930
17931 DESCRIPTION
17932 API to send Set Significant RSSI Change Request to WDI
17933
17934 PARAMETERS
17935 pWDA: Pointer to WDA context
17936 wdaRequest: Pointer to EXTScan req parameters
17937===========================================================================*/
17938VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17939 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17940{
17941 WDI_Status status = WDI_STATUS_SUCCESS;
17942 tWDA_ReqParams *pWdaParams;
17943
17944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17945 "%s: ", __func__);
17946 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17947 if (NULL == pWdaParams)
17948 {
17949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17950 "%s: VOS MEM Alloc Failure", __func__);
17951 VOS_ASSERT(0);
17952 return VOS_STATUS_E_NOMEM;
17953 }
17954 pWdaParams->pWdaContext = pWDA;
17955 pWdaParams->wdaMsgParam = wdaRequest;
17956 pWdaParams->wdaWdiApiMsgParam = NULL;
17957
17958 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17959 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17960 (void *)pWdaParams);
17961 if (IS_WDI_STATUS_FAILURE(status))
17962 {
17963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17964 "Failure to request. Free all the memory " );
17965 vos_mem_free(pWdaParams->wdaMsgParam);
17966 vos_mem_free(pWdaParams);
17967 }
17968 return CONVERT_WDI2VOS_STATUS(status);
17969}
17970
17971/*==========================================================================
17972 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17973
17974 DESCRIPTION
17975 API to send Reset Significant RSSI Change Request to WDI
17976
17977 PARAMETERS
17978 pWDA: Pointer to WDA context
17979 wdaRequest: Pointer to EXTScan req parameters
17980===========================================================================*/
17981VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17982 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17983{
17984 WDI_Status status = WDI_STATUS_SUCCESS;
17985 tWDA_ReqParams *pWdaParams;
17986
17987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17988 "%s:", __func__);
17989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17990 if (NULL == pWdaParams)
17991 {
17992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17993 "%s: VOS MEM Alloc Failure", __func__);
17994 VOS_ASSERT(0);
17995 return VOS_STATUS_E_NOMEM;
17996 }
17997 pWdaParams->pWdaContext = pWDA;
17998 pWdaParams->wdaMsgParam = wdaRequest;
17999 pWdaParams->wdaWdiApiMsgParam = NULL;
18000
18001 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18002 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18003 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18004 (void *)pWdaParams);
18005 if (IS_WDI_STATUS_FAILURE(status))
18006 {
18007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18008 "Failure to request. Free all the memory " );
18009 vos_mem_free(pWdaParams->wdaMsgParam);
18010 vos_mem_free(pWdaParams);
18011 }
18012 return CONVERT_WDI2VOS_STATUS(status);
18013}
18014#endif /* WLAN_FEATURE_EXTSCAN */
18015
Sunil Duttbd736ed2014-05-26 21:19:41 +053018016#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18017
18018/*==========================================================================
18019 FUNCTION WDA_LLStatsSetRspCallback
18020
18021 DESCRIPTION
18022 API to process set link layer statistics response from FW
18023
18024 PARAMETERS
18025 pRsp: Pointer to set link layer statistics response
18026 pUserData: Pointer to user data
18027
18028 RETURN VALUE
18029 NONE
18030
18031===========================================================================*/
18032void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18033{
18034 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18035
18036
18037 if (NULL == pWdaParams)
18038 {
18039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18040 "%s: pWdaParams received NULL", __func__);
18041 VOS_ASSERT(0) ;
18042 return ;
18043 }
18044
18045 /* Do not need to send notification to upper layer
18046 * Just free allocated resources */
18047 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18048 {
18049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18050 }
18051 if (pWdaParams->wdaMsgParam != NULL)
18052 {
18053 vos_mem_free(pWdaParams->wdaMsgParam);
18054 }
18055 vos_mem_free(pWdaParams) ;
18056
18057 return;
18058}
18059
18060/*==========================================================================
18061 FUNCTION WDA_ProcessLLStatsSetReq
18062
18063 DESCRIPTION
18064 API to send Set Link Layer Stats request to WDI
18065
18066 PARAMETERS
18067 pWDA: Pointer to WDA context
18068 wdaRequest: Pointer to set Link Layer Stats req parameters
18069===========================================================================*/
18070VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18071 tSirLLStatsSetReq *wdaRequest)
18072{
18073 WDI_Status status = WDI_STATUS_SUCCESS;
18074 tWDA_ReqParams *pWdaParams;
18075
18076 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18077 if (NULL == pWdaParams)
18078 {
18079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18080 "%s: VOS MEM Alloc Failure", __func__);
18081 VOS_ASSERT(0);
18082 return VOS_STATUS_E_NOMEM;
18083 }
18084 pWdaParams->pWdaContext = pWDA;
18085 pWdaParams->wdaMsgParam = wdaRequest;
18086 pWdaParams->wdaWdiApiMsgParam = NULL;
18087
18088 status = WDI_LLStatsSetReq((void *)wdaRequest,
18089 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18090 (void *)pWdaParams);
18091 if (IS_WDI_STATUS_FAILURE(status))
18092 {
18093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18094 "Failure to request. Free all the memory " );
18095 vos_mem_free(pWdaParams->wdaMsgParam);
18096 vos_mem_free(pWdaParams);
18097 }
18098 return CONVERT_WDI2VOS_STATUS(status);
18099}
18100
18101/*==========================================================================
18102 FUNCTION WDA_LLStatsGetRspCallback
18103
18104 DESCRIPTION
18105 API to process get link layer statistics response from FW
18106
18107 PARAMETERS
18108 pRsp: Pointer to get link layer statistics response
18109 pUserData: Pointer to user data
18110
18111 RETURN VALUE
18112 NONE
18113
18114===========================================================================*/
18115void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18116{
18117 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18118
18119 if (NULL == pWdaParams)
18120 {
18121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18122 "%s: pWdaParams received NULL", __func__);
18123 VOS_ASSERT(0) ;
18124 return ;
18125 }
18126
18127 /* Do not need to send notification to upper layer
18128 * Just free allocated resources */
18129 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18130 {
18131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18132 }
18133 if (pWdaParams->wdaMsgParam != NULL)
18134 {
18135 vos_mem_free(pWdaParams->wdaMsgParam);
18136 }
18137 vos_mem_free(pWdaParams) ;
18138
18139 return;
18140}
18141
18142/*==========================================================================
18143 FUNCTION WDA_ProcessLLStatsGetReq
18144
18145 DESCRIPTION
18146 API to send Get Link Layer Stats request to WDI
18147
18148 PARAMETERS
18149 pWDA: Pointer to WDA context
18150 wdaRequest: Pointer to get Link Layer Stats req parameters
18151===========================================================================*/
18152VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18153 tSirLLStatsGetReq *wdaRequest)
18154{
18155 WDI_Status status = WDI_STATUS_SUCCESS;
18156 tWDA_ReqParams *pWdaParams;
18157
18158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18159 if (NULL == pWdaParams)
18160 {
18161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18162 "%s: VOS MEM Alloc Failure", __func__);
18163 VOS_ASSERT(0);
18164 return VOS_STATUS_E_NOMEM;
18165 }
18166 pWdaParams->pWdaContext = pWDA;
18167 pWdaParams->wdaMsgParam = wdaRequest;
18168 pWdaParams->wdaWdiApiMsgParam = NULL;
18169
18170 status = WDI_LLStatsGetReq((void *) wdaRequest,
18171 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18172 (void *)pWdaParams);
18173 if (IS_WDI_STATUS_FAILURE(status))
18174 {
18175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18176 "Failure to request. Free all the memory " );
18177 vos_mem_free(pWdaParams->wdaMsgParam);
18178 vos_mem_free(pWdaParams);
18179 }
18180 return CONVERT_WDI2VOS_STATUS(status);
18181}
18182
18183/*==========================================================================
18184 FUNCTION WDA_LLStatsClearRspCallback
18185
18186 DESCRIPTION
18187 API to process clear link layer statistics response from FW
18188
18189 PARAMETERS
18190 pRsp: Pointer to clear link layer statistics response
18191 pUserData: Pointer to user data
18192
18193 RETURN VALUE
18194 NONE
18195
18196===========================================================================*/
18197void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18198{
18199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18200
18201
18202 if (NULL == pWdaParams)
18203 {
18204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18205 "%s: pWdaParams received NULL", __func__);
18206 VOS_ASSERT(0) ;
18207 return ;
18208 }
18209 /* Do not need to send notification to upper layer
18210 * Just free allocated resources */
18211 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18212 {
18213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18214 }
18215 if (pWdaParams->wdaMsgParam != NULL)
18216 {
18217 vos_mem_free(pWdaParams->wdaMsgParam);
18218 }
18219 vos_mem_free(pWdaParams) ;
18220 return;
18221}
18222
18223/*==========================================================================
18224 FUNCTION WDA_ProcessLLStatsClearReq
18225
18226 DESCRIPTION
18227 API to send Clear Link Layer Stats request to WDI
18228
18229 PARAMETERS
18230 pWDA: Pointer to WDA context
18231 wdaRequest: Pointer to earLink Layer Stats req
18232===========================================================================*/
18233VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18234 tSirLLStatsClearReq *wdaRequest)
18235{
18236 WDI_Status status = WDI_STATUS_SUCCESS;
18237 tWDA_ReqParams *pWdaParams;
18238
18239 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18240 if (NULL == pWdaParams)
18241 {
18242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18243 "%s: VOS MEM Alloc Failure", __func__);
18244 VOS_ASSERT(0);
18245 return VOS_STATUS_E_NOMEM;
18246 }
18247 pWdaParams->pWdaContext = pWDA;
18248 pWdaParams->wdaMsgParam = wdaRequest;
18249 pWdaParams->wdaWdiApiMsgParam = NULL;
18250
18251 status = WDI_LLStatsClearReq((void *) wdaRequest,
18252 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18253 (void *)pWdaParams);
18254 if (IS_WDI_STATUS_FAILURE(status))
18255 {
18256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18257 "Failure to request. Free all the memory " );
18258 vos_mem_free(pWdaParams->wdaMsgParam);
18259 vos_mem_free(pWdaParams);
18260 }
18261 return CONVERT_WDI2VOS_STATUS(status);
18262}
18263
18264#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018265
Abhishek Singh85b74712014-10-08 11:38:19 +053018266void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18267{
18268 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18269
18270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18271 "<------ %s " ,__func__);
18272 if (NULL == fwStatsinfo)
18273 {
18274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18275 "%s: pWdaParams received NULL", __func__);
18276 VOS_ASSERT(0);
18277 return;
18278 }
18279
18280 if(fwStatsinfo->callback)
18281 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18282
18283 vos_mem_free(pUserData);
18284 return;
18285}
18286
18287
18288v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18289 tSirFWStatsGetReq *pData)
18290{
18291
18292 WDI_Status wdiStatus;
18293 tSirFWStatsInfo *fwStatsinfo;
18294
18295 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18296 "------> %s" , __func__);
18297
18298 fwStatsinfo =
18299 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18300 if (NULL == fwStatsinfo)
18301 {
18302 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18303 "%s: VOS MEM Alloc Failure", __func__);
18304 VOS_ASSERT(0);
18305 vos_mem_free(pData);
18306 return;
18307 }
18308
18309 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18310 fwStatsinfo->data = pData->data;
18311
18312 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18313 WDA_FWStatsGetRspCallback,
18314 pData->stats);
18315 if (WDI_STATUS_PENDING == wdiStatus)
18316 {
18317 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18318 "Pending received for %s:%d ", __func__, __LINE__);
18319 }
18320 else if (WDI_STATUS_SUCCESS != wdiStatus)
18321 {
18322 if (fwStatsinfo->callback)
18323 {
18324 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18325 }
18326 vos_mem_free(fwStatsinfo);
18327 }
18328 vos_mem_free(pData);
18329}
18330
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018331/*==========================================================================
18332 FUNCTION WDA_EncryptMsgRspCallback
18333
18334 DESCRIPTION
18335 API to send Encrypt message response to HDD
18336
18337 PARAMETERS
18338 pEventData: Response from FW
18339 pUserData: Data sent to firmware as part of request
18340===========================================================================*/
18341void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18342 void* pUserData)
18343{
18344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18345 tWDA_CbContext *pWDA = NULL;
18346 tpAniSirGlobal pMac;
18347 vos_msg_t vosMsg;
18348 tpSirEncryptedDataRspParams pEncRspParams;
18349 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18350
18351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18352 FL("%s:"), __func__);
18353 if (NULL == pWdaParams)
18354 {
18355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18356 FL("%s: pWdaParams received NULL"), __func__);
18357 VOS_ASSERT(0);
18358 return;
18359 }
18360
18361 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18362
18363 if (NULL == pWDA)
18364 {
18365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18366 FL("%s: pWDA received NULL"), __func__);
18367 VOS_ASSERT(0);
18368 goto error;
18369 }
18370
18371 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18372 if (NULL == pMac)
18373 {
18374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18375 FL("%s:pMac is NULL"), __func__);
18376 VOS_ASSERT(0);
18377 goto error;
18378 }
18379
18380 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18381
18382 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18383 if (NULL == pEncRspParams)
18384 {
18385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18386 FL("%s: VOS MEM Alloc Failure"), __func__);
18387 VOS_ASSERT(0);
18388 goto error;
18389 }
18390
18391 /* Message Header */
18392 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18393 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18394 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18395 pEncryptedDataRsp->encryptedPayload.length;
18396 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18397 pEncryptedDataRsp->encryptedPayload.data,
18398 pEncryptedDataRsp->encryptedPayload.length);
18399
18400 /* VOS message wrapper */
18401 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18402 vosMsg.bodyptr = (void *)pEncRspParams;
18403 vosMsg.bodyval = 0;
18404
18405 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18406 {
18407 /* free the mem */
18408 vos_mem_free((v_VOID_t *) pEncRspParams);
18409 }
18410
18411error:
18412
18413 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18414 {
18415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18416 }
18417 if (pWdaParams->wdaMsgParam != NULL)
18418 {
18419 vos_mem_free(pWdaParams->wdaMsgParam);
18420 }
18421 vos_mem_free(pWdaParams) ;
18422
18423 return;
18424}
18425/*==========================================================================
18426 FUNCTION WDA_ProcessEncryptMsgReq
18427
18428 DESCRIPTION
18429 API to send Encrypt message Request to WDI
18430
18431 PARAMETERS
18432 pWDA: Pointer to WDA context
18433 wdaRequest: Pointer to Encrypt_msg req parameters
18434===========================================================================*/
18435VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18436 u8 *wdaRequest)
18437{
18438 WDI_Status status = WDI_STATUS_SUCCESS;
18439 tWDA_ReqParams *pWdaParams;
18440
18441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18442 FL("%s: "), __func__);
18443 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18444 if (NULL == pWdaParams)
18445 {
18446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18447 FL("%s: VOS MEM Alloc Failure"), __func__);
18448 VOS_ASSERT(0);
18449 return VOS_STATUS_E_NOMEM;
18450 }
18451 pWdaParams->pWdaContext = pWDA;
18452 pWdaParams->wdaMsgParam = wdaRequest;
18453 pWdaParams->wdaWdiApiMsgParam = NULL;
18454
18455 status = WDI_EncryptMsgReq((void *)wdaRequest,
18456 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18457 (void *)pWdaParams);
18458 if (IS_WDI_STATUS_FAILURE(status))
18459 {
18460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18461 FL("Failure to request. Free all the memory " ));
18462 vos_mem_free(pWdaParams->wdaMsgParam);
18463 vos_mem_free(pWdaParams);
18464 }
18465 return CONVERT_WDI2VOS_STATUS(status);
18466}