blob: 6fffce3c6d2a5f4cad0778395de2b11f99549e02 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040 Copyright (c) 2010-2011 QUALCOMM Incorporated.
41 All Rights Reserved.
42 Qualcomm Confidential and Proprietary
43===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070044/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070045 EDIT HISTORY FOR FILE
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 This section contains comments describing changes made to the module.
48 Notice that changes are listed in reverse chronological order.
49
Jeff Johnson295189b2012-06-20 16:38:30 -070050 $Header$$DateTime$$Author$
51
Jeff Johnson295189b2012-06-20 16:38:30 -070052 when who what, where, why
53---------- --- -------------------------------------------------
5410/05/2011 haparna Adding support for Keep Alive Feature
552010-12-30 smiryala UMAC convergence changes
562010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
57===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070058#include "vos_mq.h"
59#include "vos_api.h"
60#include "vos_packet.h"
61#include "vos_nvitem.h"
62#include "sirApi.h"
63#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053064#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070065#include "wlan_qct_wda.h"
66#include "wlan_qct_wda_msg.h"
67#include "wlan_qct_wdi_cfg.h"
68#include "wlan_qct_wdi.h"
69#include "wlan_qct_wdi_ds.h"
70#include "wlan_hal_cfg.h"
71/**********************/
72#include "wniApi.h"
73#include "cfgApi.h"
74#include "limApi.h"
75#include "wlan_qct_tl.h"
76#include "wlan_qct_tli_ba.h"
77#include "limUtils.h"
78#include "btcApi.h"
79#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070080#include "pttMsgApi.h"
81#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070082/* Used MACRO's */
83/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080084#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
86#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070088#define CONVERT_WDI2SIR_STATUS(x) \
89 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
90
91#define IS_WDI_STATUS_FAILURE(status) \
92 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070093#define CONVERT_WDI2VOS_STATUS(x) \
94 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
95
96/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070097#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define WDA_GET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
101
102#define WDA_SET_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
104
105#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
106 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700107#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
108 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109/* timer related Macros */
110#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
111 tx_timer_create(a, b, c, d, e, f, g)
112#define WDA_START_TIMER(a) tx_timer_activate(a)
113#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
114#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700115#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116
117#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
118 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700122#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800123#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700124
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700125#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700127#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700128#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
129 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
130 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
131
132#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
133#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800134#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
135
Jeff Johnson295189b2012-06-20 16:38:30 -0700136/* extern declarations */
137extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700138extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
139
Jeff Johnson295189b2012-06-20 16:38:30 -0700140/* forward declarations */
141void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
142 void *pBodyptr, tANI_U32 bodyVal) ;
143VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
144 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700145VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
146VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
147
148extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
149 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530150void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
c_hpothu92367912014-05-01 15:18:17 +0530211v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
212 tSirBcnMissRateReq *pData);
213
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Leo Chang9056f462013-08-01 19:21:11 -0700220
221#ifdef FEATURE_WLAN_LPHB
222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
223 tSirLPHBReq *pData);
224#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530225
Dino Mycle41bdc942014-06-10 11:30:24 +0530226#ifdef WLAN_FEATURE_EXTSCAN
227VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
228 tSirEXTScanStartReqParams *wdaRequest);
229VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
230 tSirEXTScanStopReqParams *wdaRequest);
231VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
232 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
233VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
234 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
235VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
236 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
237VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
238 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
239VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
240 tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
241VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
242 tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
243#endif /* WLAN_FEATURE_EXTSCAN */
244
Sunil Duttbd736ed2014-05-26 21:19:41 +0530245#ifdef WLAN_FEATURE_LINK_LAYER_STATS
246VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
247 tSirLLStatsSetReq *wdaRequest);
248
249VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
250 tSirLLStatsGetReq *wdaRequest);
251
252VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
253 tSirLLStatsClearReq *wdaRequest);
254#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530255
256v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
257 tSirFWStatsGetReq *wdaRequest);
258
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530259VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
260 u8 *wdaRequest);
261
Jeff Johnson295189b2012-06-20 16:38:30 -0700262/*
263 * FUNCTION: WDA_open
264 * Allocate the WDA context
265 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530266VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 tMacOpenParameters *pMacParams )
268{
269 tWDA_CbContext *wdaContext;
270 VOS_STATUS status;
271 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 /* Allocate WDA context */
273 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
274 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 return VOS_STATUS_E_NOMEM;
278 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 /*__asm int 3;*/
280 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
281
282 /* Initialize data structures */
283 wdaContext->pVosContext = pVosContext;
284 wdaContext->wdaState = WDA_INIT_STATE;
285 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
286
287 /* Initialize WDA-WDI synchronization event */
288 status = vos_event_init(&wdaContext->wdaWdiEvent);
289 if(!VOS_IS_STATUS_SUCCESS(status))
290 {
291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800292 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800293 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700294 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700295 /* Init Frame transfer event */
296 status = vos_event_init(&wdaContext->txFrameEvent);
297 if(!VOS_IS_STATUS_SUCCESS(status))
298 {
299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800300 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800301 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700303 status = vos_event_init(&wdaContext->suspendDataTxEvent);
304 if(!VOS_IS_STATUS_SUCCESS(status))
305 {
306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800307 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800308 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700310 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
311 if(!VOS_IS_STATUS_SUCCESS(status))
312 {
313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800314 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800315 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530319 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 &wdiDevCapability, pMacParams->driverType))
321 {
322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
323 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800324 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 }
326 else
327 {
328 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
329 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
330 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 /* update max STA in WDA used for BA */
332 wdaContext->wdaMaxSta = pMacParams->maxStation;
333 /* store the frameTransRequired flag in wdaContext, to send this to HAL
334 * in WDA_Start
335 */
336 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
337 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800339
340error:
341 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
342 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700343}
344
Jeff Johnson295189b2012-06-20 16:38:30 -0700345/*
346 * FUNCTION: WDA_preStart
347 * Trigger DAL-AL to start CFG download
348 */
349VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
350{
351 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
352 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700353 /*
354 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
355 */
356 wdaMsg.type = WNI_CFG_DNLD_REQ ;
357 wdaMsg.bodyptr = NULL;
358 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* post the message.. */
360 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
361 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
362 {
363 vosStatus = VOS_STATUS_E_BADMSG;
364 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 return( vosStatus );
366}
Jeff Johnson295189b2012-06-20 16:38:30 -0700367/*
368 * FUNCTION: WDA_wdiStartCallback
369 * Once WDI_Start is finished, WDI start callback will be called by WDI
370 * to indicate completion of WDI_Start.
371 */
372void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
373 void *pVosContext)
374{
375 tWDA_CbContext *wdaContext;
376 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700377 if (NULL == pVosContext)
378 {
379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700380 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 return;
382 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
384 if (NULL == wdaContext)
385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700387 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 return;
389 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
391 {
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700393 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 }
395 else
396 {
397 wdaContext->wdaState = WDA_START_STATE;
398 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 /* extract and save version information from the Start Response */
400 wdaContext->wcnssWlanCompiledVersion.major =
401 wdiRspParams->wlanCompiledVersion.major;
402 wdaContext->wcnssWlanCompiledVersion.minor =
403 wdiRspParams->wlanCompiledVersion.minor;
404 wdaContext->wcnssWlanCompiledVersion.version =
405 wdiRspParams->wlanCompiledVersion.version;
406 wdaContext->wcnssWlanCompiledVersion.revision =
407 wdiRspParams->wlanCompiledVersion.revision;
408 wdaContext->wcnssWlanReportedVersion.major =
409 wdiRspParams->wlanReportedVersion.major;
410 wdaContext->wcnssWlanReportedVersion.minor =
411 wdiRspParams->wlanReportedVersion.minor;
412 wdaContext->wcnssWlanReportedVersion.version =
413 wdiRspParams->wlanReportedVersion.version;
414 wdaContext->wcnssWlanReportedVersion.revision =
415 wdiRspParams->wlanReportedVersion.revision;
416 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
417 wdiRspParams->wcnssSoftwareVersion,
418 sizeof(wdaContext->wcnssSoftwareVersionString));
419 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
420 wdiRspParams->wcnssHardwareVersion,
421 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 /* Notify WDA_start that WDI_Start has completed */
423 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700424 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 {
426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700427 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 return;
430}
431
Jeff Johnson295189b2012-06-20 16:38:30 -0700432/*
433 * FUNCTION: WDA_start
434 * Prepare TLV configuration and call WDI_Start.
435 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700436VOS_STATUS WDA_start(v_PVOID_t pVosContext)
437{
438 tWDA_CbContext *wdaContext;
439 VOS_STATUS status;
440 WDI_Status wdiStatus;
441 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 if (NULL == pVosContext)
443 {
444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700445 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 return VOS_STATUS_E_FAILURE;
447 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
449 if (NULL == wdaContext)
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700452 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 return VOS_STATUS_E_FAILURE;
454 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 /* Non-FTM mode, WDA status for START must be INIT
456 * FTM mode, WDA Status for START can be INIT or STOP */
457 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
458 (WDA_STOP_STATE != wdaContext->wdaState) )
459 {
460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
461 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700462 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 return VOS_STATUS_E_FAILURE;
464 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 /* initialize the wdiStartParam. Note that we can create this on
466 the stack since we won't exit until WDI_Start() completes or
467 times out */
468 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 /* prepare the config TLV for the WDI */
471 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
472 if ( !VOS_IS_STATUS_SUCCESS(status) )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 return VOS_STATUS_E_FAILURE;
477 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* note from here onwards if an error occurs we must
479 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
481 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
482 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* initialize the WDA-WDI synchronization event */
484 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* call WDI start */
486 wdiStatus = WDI_Start(&wdiStartParam,
487 (WDI_StartRspCb)WDA_wdiStartCallback,
488 (v_VOID_t *)pVosContext);
489 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
490 {
491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700492 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 vos_mem_free(wdiStartParam.pConfigBuffer);
494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* wait for WDI start to invoke our callback */
497 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
498 WDA_WDI_START_TIMEOUT );
499 if ( !VOS_IS_STATUS_SUCCESS(status) )
500 {
501 if ( VOS_STATUS_E_TIMEOUT == status )
502 {
503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700504 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 }
506 else
507 {
508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
509 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700510 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 }
512 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530513 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 /* we no longer need the config TLV */
517 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 /* if we are not in the START state then WDI_Start() failed */
519 if (WDA_START_STATE != wdaContext->wdaState)
520 {
521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700522 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 return VOS_STATUS_E_FAILURE;
524 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 /* FTM mode does not need to monitor BA activity */
526 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
527 {
528 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800529 if(VOS_STATUS_SUCCESS == status)
530 {
531 wdaContext->wdaTimersCreated = VOS_TRUE;
532 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 }
Leo Chang9d76f622013-08-23 16:34:52 -0700534 else
535 {
536 vos_event_init(&wdaContext->ftmStopDoneEvent);
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 return status;
539}
540
Jeff Johnson295189b2012-06-20 16:38:30 -0700541/*
542 * FUNCTION: WDA_prepareConfigTLV
543 * Function to prepare CFG for DAL(WDA)
544 */
545VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
546 WDI_StartReqParamsType *wdiStartParams )
547{
548 /* get pMac to acess CFG data base */
549 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
550 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
551 tHalCfg *tlvStruct = NULL ;
552 tANI_U8 *tlvStructStart = NULL ;
553 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
554 v_PVOID_t *configParam;
555 tANI_U32 configParamSize;
556 tANI_U32 *configDataValue;
557 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700558 tANI_U8 i;
559
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 if ((NULL == pMac)||(NULL == wdaContext))
561 {
562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700563 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 VOS_ASSERT(0);
565 return VOS_STATUS_E_FAILURE;
566 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
568 WNI_CFG_STA_ID_LEN +
569 WNI_CFG_EDCA_WME_ACBK_LEN +
570 WNI_CFG_EDCA_WME_ACBE_LEN +
571 WNI_CFG_EDCA_WME_ACVI_LEN +
572 WNI_CFG_EDCA_WME_ACVO_LEN +
573 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 /* malloc memory for all configs in one shot */
575 configParam = vos_mem_malloc(configParamSize);
576
577 if(NULL == configParam )
578 {
579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700580 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 VOS_ASSERT(0) ;
582 return VOS_STATUS_E_NOMEM;
583 }
584 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 tlvStruct = (tHalCfg *)configParam;
587 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 /* TODO: Remove Later */
589 /* QWLAN_HAL_CFG_STA_ID */
590 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
591 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
592 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
593 eSIR_SUCCESS)
594 {
595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
596 "Failed to get value for WNI_CFG_STA_ID");
597 goto handle_failure;
598 }
599 tlvStruct->length = strLength ;
600 /* calculate the pad bytes to have the CFG in aligned format */
601 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
602 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
604 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
606 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
610 != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
619 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
623 eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
632 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length)) ;
644
645 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
646 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
647 tlvStruct->length = sizeof(tANI_U32);
648 configDataValue = (tANI_U32 *)(tlvStruct + 1);
649 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
650 configDataValue ) != eSIR_SUCCESS)
651 {
652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
653 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
654 goto handle_failure;
655 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
657 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 /* QWLAN_HAL_CFG_CAL_PERIOD */
659 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
660 tlvStruct->length = sizeof(tANI_U32);
661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
662 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
663 != eSIR_SUCCESS)
664 {
665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
666 "Failed to get value for WNI_CFG_CAL_PERIOD");
667 goto handle_failure;
668 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
670 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* QWLAN_HAL_CFG_CAL_CONTROL */
672 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
673 tlvStruct->length = sizeof(tANI_U32);
674 configDataValue = (tANI_U32 *)(tlvStruct + 1);
675 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
676 != eSIR_SUCCESS)
677 {
678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
679 "Failed to get value for WNI_CFG_CAL_CONTROL");
680 goto handle_failure;
681 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
683 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 /* QWLAN_HAL_CFG_PROXIMITY */
685 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
686 tlvStruct->length = sizeof(tANI_U32);
687 configDataValue = (tANI_U32 *)(tlvStruct + 1);
688 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
689 != eSIR_SUCCESS)
690 {
691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
692 "Failed to get value for WNI_CFG_PROXIMITY");
693 goto handle_failure;
694 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
696 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
698 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
699 tlvStruct->length = sizeof(tANI_U32);
700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
701 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
702 != eSIR_SUCCESS)
703 {
704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
705 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
706 goto handle_failure;
707 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700708 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
709 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
711 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
712 tlvStruct->length = sizeof(tANI_U32);
713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
714 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
715 eSIR_SUCCESS)
716 {
717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
718 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
719 goto handle_failure;
720 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700721 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
722 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
724 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
725 tlvStruct->length = sizeof(tANI_U32);
726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
727 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
728 configDataValue ) != eSIR_SUCCESS)
729 {
730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
731 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
732 goto handle_failure;
733 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
735 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
737 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
738 tlvStruct->length = sizeof(tANI_U32);
739 configDataValue = (tANI_U32 *)(tlvStruct + 1);
740 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
741 eSIR_SUCCESS)
742 {
743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
744 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
745 goto handle_failure;
746 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
748 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
750 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
751 tlvStruct->length = sizeof(tANI_U32);
752 configDataValue = (tANI_U32 *)(tlvStruct + 1);
753 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
754 eSIR_SUCCESS)
755 {
756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
757 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
758 goto handle_failure;
759 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700760 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
761 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
763 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
767 eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
776 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700788 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
789 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
793 configDataValue ) != eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
797 goto handle_failure;
798 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
800 + sizeof(tHalCfg) + tlvStruct->length));
801
802 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
803 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
804 tlvStruct->length = sizeof(tANI_U32);
805 configDataValue = (tANI_U32 *)(tlvStruct + 1);
806 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
807 configDataValue ) != eSIR_SUCCESS)
808 {
809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
810 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
811 goto handle_failure;
812 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700813 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
814 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700815 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
816 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
817 tlvStruct->length = sizeof(tANI_U32);
818 configDataValue = (tANI_U32 *)(tlvStruct + 1);
819 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
820 configDataValue ) != eSIR_SUCCESS)
821 {
822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
823 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
824 goto handle_failure;
825 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
827 + sizeof(tHalCfg) + tlvStruct->length));
828
829 /* QWLAN_HAL_CFG_FIXED_RATE */
830 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
831 tlvStruct->length = sizeof(tANI_U32);
832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
833 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
834 != eSIR_SUCCESS)
835 {
836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
837 "Failed to get value for WNI_CFG_FIXED_RATE");
838 goto handle_failure;
839 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
841 + sizeof(tHalCfg) + tlvStruct->length));
842
843 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
844 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
848 != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length));
856
857 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
858 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
862 configDataValue ) != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
871 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
875 configDataValue ) != eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
879 goto handle_failure;
880 }
881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
884 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
897 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
910 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
922
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
924 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
928 configDataValue ) != eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
937 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
950 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
954 eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
962
963 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
964 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
965 tlvStruct->length = sizeof(tANI_U32);
966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
967 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
968 configDataValue ) != eSIR_SUCCESS)
969 {
970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
971 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
972 goto handle_failure;
973 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700974 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
975 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
977 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
981 configDataValue ) != eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
990 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
994 configDataValue ) != eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1003 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1007 configDataValue ) != eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length);
1015
1016 /* QWLAN_HAL_CFG_STATS_PERIOD */
1017 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1018 tlvStruct->length = sizeof(tANI_U32);
1019 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1020 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1021 eSIR_SUCCESS)
1022 {
1023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1024 "Failed to get value for WNI_CFG_STATS_PERIOD");
1025 goto handle_failure;
1026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001027 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1028 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001029 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1030 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1031 tlvStruct->length = sizeof(tANI_U32);
1032 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1033 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1034 eSIR_SUCCESS)
1035 {
1036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1037 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1038 goto handle_failure;
1039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1043 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1044 tlvStruct->length = sizeof(tANI_U32);
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1047 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001048 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1049 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001050 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1051 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1052 tlvStruct->length = sizeof(tANI_U32);
1053 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1054 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1055 != eSIR_SUCCESS)
1056 {
1057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1058 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1059 goto handle_failure;
1060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001061 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1062 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001063 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1064 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1065 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1066 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1067 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1068 &strLength) != eSIR_SUCCESS)
1069 {
1070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1071 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1072 goto handle_failure;
1073 }
1074 tlvStruct->length = strLength;
1075 /* calculate the pad bytes to have the CFG in aligned format */
1076 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1077 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001078 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1079 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1081 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1082 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1083 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1084 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1085 &strLength) != eSIR_SUCCESS)
1086 {
1087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1088 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1089 goto handle_failure;
1090 }
1091 tlvStruct->length = strLength;
1092 /* calculate the pad bytes to have the CFG in aligned format */
1093 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1094 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001095 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1096 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001097 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1098 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1099 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1100 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1101 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1102 &strLength) != eSIR_SUCCESS)
1103 {
1104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1105 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1106 goto handle_failure;
1107 }
1108 tlvStruct->length = strLength;
1109 /* calculate the pad bytes to have the CFG in aligned format */
1110 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1111 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1113 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1115 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1116 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1117 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1118 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1119 &strLength) != eSIR_SUCCESS)
1120 {
1121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1122 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1123 goto handle_failure;
1124 }
1125 tlvStruct->length = strLength;
1126 /* calculate the pad bytes to have the CFG in aligned format */
1127 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1128 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001129 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1130 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1132 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1133 tlvStruct->length = sizeof(tANI_U32);
1134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1135 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1136 != eSIR_SUCCESS)
1137 {
1138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1139 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1140 goto handle_failure;
1141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001142 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1143 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1145 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1146 tlvStruct->length = sizeof(tANI_U32);
1147 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1148 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1149 != eSIR_SUCCESS)
1150 {
1151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1152 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1153 goto handle_failure;
1154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1156 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001157 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1158 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1159 tlvStruct->length = sizeof(tANI_U32);
1160 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1161 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1162 != eSIR_SUCCESS)
1163 {
1164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1165 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1166 goto handle_failure;
1167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1169 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1171 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1172 tlvStruct->length = sizeof(tANI_U32);
1173 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1174 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1175 != eSIR_SUCCESS)
1176 {
1177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1178 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1179 goto handle_failure;
1180 }
1181 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1182 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001183 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1184 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1185 tlvStruct->length = sizeof(tANI_U32);
1186 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1187 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1188 != eSIR_SUCCESS)
1189 {
1190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1191 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1192 goto handle_failure;
1193 }
1194 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1195 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001196 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1197 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1198 tlvStruct->length = sizeof(tANI_U32);
1199 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1200 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1201 != eSIR_SUCCESS)
1202 {
1203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1204 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1205 goto handle_failure;
1206 }
1207 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1208 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001209 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1210 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1211 tlvStruct->length = sizeof(tANI_U32);
1212 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1213 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1214 != eSIR_SUCCESS)
1215 {
1216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1217 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1218 goto handle_failure;
1219 }
1220 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1221 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001222 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1223 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1224 tlvStruct->length = sizeof(tANI_U32);
1225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1226 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1227 != eSIR_SUCCESS)
1228 {
1229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1230 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1231 goto handle_failure;
1232 }
1233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1234 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1236 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1237 tlvStruct->length = sizeof(tANI_U32);
1238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1239 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1240 != eSIR_SUCCESS)
1241 {
1242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1243 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1244 goto handle_failure;
1245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1247 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1249 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1253 != eSIR_SUCCESS)
1254 {
1255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1256 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1257 goto handle_failure;
1258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1262 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1266 != eSIR_SUCCESS)
1267 {
1268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1269 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1270 goto handle_failure;
1271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1275 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1276 * into FW, so the parameters are added here.
1277 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001285 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001292 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1293 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1294 tlvStruct->length = sizeof(tANI_U32);
1295 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1296 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1297 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1298 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001299 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1300 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1301 tlvStruct->length = sizeof(tANI_U32);
1302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1303 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
1306
1307 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1308 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1309 tlvStruct->length = sizeof(tANI_U32);
1310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1311 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
1314
1315 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1316 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
1322
1323 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1324 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1325 tlvStruct->length = sizeof(tANI_U32);
1326 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1327 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
1330
1331 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1332 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1333 tlvStruct->length = sizeof(tANI_U32);
1334 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1335 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1337 + sizeof(tHalCfg) + tlvStruct->length) ;
1338
1339 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1340 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1344 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1345 + sizeof(tHalCfg) + tlvStruct->length) ;
1346
1347 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1348 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1349 tlvStruct->length = sizeof(tANI_U32);
1350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1351 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
1354
1355 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1356 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1357 tlvStruct->length = sizeof(tANI_U32);
1358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1359 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362
1363 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1364 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1365 tlvStruct->length = sizeof(tANI_U32);
1366 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1367 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1368 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1369 + sizeof(tHalCfg) + tlvStruct->length) ;
1370
1371 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1372 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1373 tlvStruct->length = sizeof(tANI_U32);
1374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1375 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1376 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1377 + sizeof(tHalCfg) + tlvStruct->length) ;
1378
1379 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1380 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1381 tlvStruct->length = sizeof(tANI_U32);
1382 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1383 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1384 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1385 + sizeof(tHalCfg) + tlvStruct->length) ;
1386
1387 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1388 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1389 tlvStruct->length = sizeof(tANI_U32);
1390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1391 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1392 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1393 + sizeof(tHalCfg) + tlvStruct->length) ;
1394
1395 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1396 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1400 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1401 + sizeof(tHalCfg) + tlvStruct->length) ;
1402
Wilson Tsaof8b37942013-09-06 10:49:00 -07001403 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1404 {
1405 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1406 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1407 tlvStruct->length = sizeof(tANI_U32);
1408 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1409 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1410 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1411 + sizeof(tHalCfg) + tlvStruct->length) ;
1412
1413 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1414 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1418 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1419 + sizeof(tHalCfg) + tlvStruct->length) ;
1420
1421 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1422 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428
1429 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1430 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1431 tlvStruct->length = sizeof(tANI_U32);
1432 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1433 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436 }
1437
1438 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1439 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1444 + sizeof(tHalCfg) + tlvStruct->length) ;
1445
1446 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1447 {
1448 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1449 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1450 tlvStruct->length = sizeof(tANI_U32);
1451 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1452 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1453 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1454 + sizeof(tHalCfg) + tlvStruct->length) ;
1455 }
1456
1457 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1458 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1459 tlvStruct->length = sizeof(tANI_U32);
1460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1461 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464
Jeff Johnson32d95a32012-09-10 13:15:23 -07001465 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001466 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1470 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1471 wcnssCompiledApiVersion.minor,
1472 wcnssCompiledApiVersion.version,
1473 wcnssCompiledApiVersion.revision);
1474 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1475 + sizeof(tHalCfg) + tlvStruct->length) ;
1476
Jeff Johnsond13512a2012-07-17 11:42:19 -07001477 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1478 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1479 tlvStruct->length = sizeof(tANI_U32);
1480 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1481 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1482 configDataValue ) != eSIR_SUCCESS)
1483 {
1484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1485 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1486 goto handle_failure;
1487 }
1488
1489 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1490 + sizeof(tHalCfg) + tlvStruct->length) ;
1491 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1492 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1496 configDataValue ) != eSIR_SUCCESS)
1497 {
1498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1499 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1500 goto handle_failure;
1501 }
1502
1503 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1504 + sizeof(tHalCfg) + tlvStruct->length) ;
1505
1506 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1507 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1508 tlvStruct->length = sizeof(tANI_U32);
1509 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1510 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1511 != eSIR_SUCCESS)
1512 {
1513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1514 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1515 goto handle_failure;
1516 }
1517
1518 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1519 + sizeof(tHalCfg) + tlvStruct->length) ;
1520
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001521 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1522 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1523 tlvStruct->length = sizeof(tANI_U32);
1524 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1525 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1526 != eSIR_SUCCESS)
1527 {
1528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1529 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1530 goto handle_failure;
1531 }
1532
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001535#ifdef WLAN_SOFTAP_VSTA_FEATURE
1536 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1537 tlvStruct->length = sizeof(tANI_U32);
1538 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1539 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1540 != eSIR_SUCCESS)
1541 {
1542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1543 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1544 goto handle_failure;
1545 }
1546
1547 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1548 + sizeof(tHalCfg) + tlvStruct->length) ;
1549#endif
1550
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001551 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1552 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1553 tlvStruct->length = sizeof(tANI_U32);
1554 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1555
1556 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1557 != eSIR_SUCCESS)
1558 {
1559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1560 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1561 goto handle_failure;
1562 }
1563
1564 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1565 + sizeof(tHalCfg) + tlvStruct->length) ;
1566
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301567/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1568 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1569 tlvStruct->length = sizeof(tANI_U32);
1570 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1571 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1572 configDataValue ) != eSIR_SUCCESS)
1573 {
1574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1575 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1576 goto handle_failure;
1577 }
1578
1579 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1580 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301581#ifdef FEATURE_WLAN_TDLS
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
1595
1596 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1597 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1598 tlvStruct->length = sizeof(tANI_U32);
1599 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1600 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1601 configDataValue ) != eSIR_SUCCESS)
1602 {
1603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1604 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1605 goto handle_failure;
1606 }
1607 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1608 + sizeof(tHalCfg) + tlvStruct->length) ;
1609 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1610 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1611 tlvStruct->length = sizeof(tANI_U32);
1612 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1613 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1614 configDataValue ) != eSIR_SUCCESS)
1615 {
1616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1617 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1618 goto handle_failure;
1619 }
1620 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1621 + sizeof(tHalCfg) + tlvStruct->length) ;
1622 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1623 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1624 tlvStruct->length = sizeof(tANI_U32);
1625 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1626 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1627 configDataValue ) != eSIR_SUCCESS)
1628 {
1629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1630 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1631 goto handle_failure;
1632 }
1633 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1634 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301635 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1636 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1637 tlvStruct->length = sizeof(tANI_U32);
1638 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1639 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1640 configDataValue ) != eSIR_SUCCESS)
1641 {
1642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1643 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1644 goto handle_failure;
1645 }
1646 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1647 + sizeof(tHalCfg) + tlvStruct->length) ;
1648
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301649#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301650
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001651 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1652 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1656 configDataValue ) != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001665
1666 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1667 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1668 tlvStruct->length = sizeof(tANI_U32);
1669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1670 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1671 != eSIR_SUCCESS)
1672 {
1673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1675 goto handle_failure;
1676 }
1677 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1678 + sizeof(tHalCfg) + tlvStruct->length));
1679
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301680 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1681 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1682 tlvStruct->length = sizeof(tANI_U32);
1683 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1684 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1685 configDataValue ) != eSIR_SUCCESS)
1686 {
1687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1688 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1689 goto handle_failure;
1690 }
1691
1692 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1693 + sizeof(tHalCfg) + tlvStruct->length) ;
1694
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301695 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1696 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1697 tlvStruct->length = sizeof(tANI_U32);
1698 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1699 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1700 configDataValue ) != eSIR_SUCCESS)
1701 {
1702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1703 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1704 goto handle_failure;
1705 }
1706 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1707 + sizeof(tHalCfg) + tlvStruct->length) ;
1708
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301709 /* QWLAN_HAL_CFG_ATH_DISABLE */
1710 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1711 tlvStruct->length = sizeof(tANI_U32);
1712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1713 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1714 configDataValue ) != eSIR_SUCCESS)
1715 {
1716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1717 "Failed to get value for WNI_CFG_ATH_DISABLE");
1718 goto handle_failure;
1719 }
1720 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1721 + sizeof(tHalCfg) + tlvStruct->length) ;
1722
c_hpothu6d7dc922013-12-02 12:36:41 +05301723 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1724 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1725 tlvStruct->length = sizeof(tANI_U32);
1726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1727 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1728 configDataValue ) != eSIR_SUCCESS)
1729 {
1730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1731 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1732 goto handle_failure;
1733 }
1734 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1735 + sizeof(tHalCfg) + tlvStruct->length) ;
1736
1737 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1738 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1739 tlvStruct->length = sizeof(tANI_U32);
1740 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1741 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1742 configDataValue ) != eSIR_SUCCESS)
1743 {
1744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1745 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1746 goto handle_failure;
1747 }
1748 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1749 + sizeof(tHalCfg) + tlvStruct->length) ;
1750
1751 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1752 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1753 tlvStruct->length = sizeof(tANI_U32);
1754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1755 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1756 configDataValue ) != eSIR_SUCCESS)
1757 {
1758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1759 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1760 goto handle_failure;
1761 }
1762 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1763 + sizeof(tHalCfg) + tlvStruct->length) ;
1764
1765 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1766 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1767 tlvStruct->length = sizeof(tANI_U32);
1768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1769 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1770 configDataValue ) != eSIR_SUCCESS)
1771 {
1772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1773 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1774 goto handle_failure;
1775 }
1776 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1777 + sizeof(tHalCfg) + tlvStruct->length) ;
1778
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301779 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1780 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1781 tlvStruct->length = sizeof(tANI_U32);
1782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1783 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1784 configDataValue ) != eSIR_SUCCESS)
1785 {
1786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1787 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1788 goto handle_failure;
1789 }
1790 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1791 + sizeof(tHalCfg) + tlvStruct->length) ;
1792
1793 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1794 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1795 tlvStruct->length = sizeof(tANI_U32);
1796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1797 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1798 configDataValue ) != eSIR_SUCCESS)
1799 {
1800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1801 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1802 goto handle_failure;
1803 }
1804 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1805 + sizeof(tHalCfg) + tlvStruct->length) ;
1806
1807 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1808 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1809 tlvStruct->length = sizeof(tANI_U32);
1810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1811 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1812 configDataValue ) != eSIR_SUCCESS)
1813 {
1814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1815 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1816 goto handle_failure;
1817 }
1818 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1819 + sizeof(tHalCfg) + tlvStruct->length) ;
1820
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001821 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1822 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1823 tlvStruct->length = sizeof(tANI_U32);
1824 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1825 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1826 configDataValue ) != eSIR_SUCCESS)
1827 {
1828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1829 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1830 goto handle_failure;
1831 }
1832 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1833 + sizeof(tHalCfg) + tlvStruct->length) ;
1834
c_hpothu5bd1ae42014-03-07 20:28:22 +05301835 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1836 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1837 tlvStruct->length = sizeof(tANI_U32);
1838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1839
1840 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1841 configDataValue ) != eSIR_SUCCESS)
1842 {
1843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1844 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1845 goto handle_failure;
1846 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301847 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1848 + sizeof(tHalCfg) + tlvStruct->length) ;
1849
1850 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1851 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1852 tlvStruct->length = sizeof(tANI_U32);
1853 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1854
1855 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1856 configDataValue ) != eSIR_SUCCESS)
1857 {
1858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1859 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1860 goto handle_failure;
1861 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301862 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1863 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301864
c_hpothu2d0f1c42014-04-01 18:38:51 +05301865 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1866 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1867 tlvStruct->length = sizeof(tANI_U32);
1868 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1869
1870 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1871 configDataValue ) != eSIR_SUCCESS)
1872 {
1873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1874 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1875 goto handle_failure;
1876 }
1877 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1878 + sizeof(tHalCfg) + tlvStruct->length) ;
1879
1880 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1881 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1882 tlvStruct->length = sizeof(tANI_U32);
1883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1884
1885 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1886 configDataValue ) != eSIR_SUCCESS)
1887 {
1888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1889 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1890 goto handle_failure;
1891 }
1892 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1893 + sizeof(tHalCfg) + tlvStruct->length) ;
1894
1895 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1896 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1897 tlvStruct->length = sizeof(tANI_U32);
1898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1899
1900 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1901 configDataValue ) != eSIR_SUCCESS)
1902 {
1903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1904 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1905 goto handle_failure;
1906 }
1907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1908 + sizeof(tHalCfg) + tlvStruct->length) ;
1909
1910 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1911 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1912 tlvStruct->length = sizeof(tANI_U32);
1913 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1914
1915 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1916 configDataValue ) != eSIR_SUCCESS)
1917 {
1918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1919 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1920 goto handle_failure;
1921 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1923 + sizeof(tHalCfg) + tlvStruct->length) ;
1924
Mihir Shetec34258c2014-07-30 17:50:27 +05301925 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1926 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1927 tlvStruct->length = sizeof(tANI_U32);
1928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1929
1930 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1931 configDataValue ) != eSIR_SUCCESS)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1934 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1935 goto handle_failure;
1936 }
1937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1938 + sizeof(tHalCfg) + tlvStruct->length) ;
1939
1940 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1941 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1942 tlvStruct->length = sizeof(tANI_U32);
1943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1944
1945 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1946 configDataValue ) != eSIR_SUCCESS)
1947 {
1948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1949 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1950 goto handle_failure;
1951 }
1952 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1953 + sizeof(tHalCfg) + tlvStruct->length) ;
1954
1955 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1956 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1957 tlvStruct->length = sizeof(tANI_U32);
1958 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1959
1960 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1961 configDataValue ) != eSIR_SUCCESS)
1962 {
1963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1964 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1965 goto handle_failure;
1966 }
1967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1968 + sizeof(tHalCfg) + tlvStruct->length) ;
1969
1970 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1971 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1972 tlvStruct->length = sizeof(tANI_U32);
1973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1974
1975 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1976 configDataValue ) != eSIR_SUCCESS)
1977 {
1978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1979 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1980 goto handle_failure;
1981 }
1982 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1983 + sizeof(tHalCfg) + tlvStruct->length) ;
1984
1985 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1986 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1987 tlvStruct->length = sizeof(tANI_U32);
1988 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1989
1990 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1991 configDataValue ) != eSIR_SUCCESS)
1992 {
1993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1994 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1995 goto handle_failure;
1996 }
1997 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1998 + sizeof(tHalCfg) + tlvStruct->length) ;
1999
2000 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2001 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2002 tlvStruct->length = sizeof(tANI_U32);
2003 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2004
2005 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2006 configDataValue ) != eSIR_SUCCESS)
2007 {
2008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2009 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2010 goto handle_failure;
2011 }
2012 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2013 + sizeof(tHalCfg) + tlvStruct->length) ;
2014
2015 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2016 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2017 tlvStruct->length = sizeof(tANI_U32);
2018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2019
2020 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2021 configDataValue ) != eSIR_SUCCESS)
2022 {
2023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2024 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2025 goto handle_failure;
2026 }
2027 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2028 + sizeof(tHalCfg) + tlvStruct->length) ;
2029
2030 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2031 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2032 tlvStruct->length = sizeof(tANI_U32);
2033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2034
2035 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2036 configDataValue ) != eSIR_SUCCESS)
2037 {
2038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2039 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2040 goto handle_failure;
2041 }
2042 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2043 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302044
2045 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2046 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2047 tlvStruct->length = sizeof(tANI_U32);
2048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2049
2050 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2051 configDataValue ) != eSIR_SUCCESS)
2052 {
2053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2054 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2055 goto handle_failure;
2056 }
2057 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2058 + sizeof(tHalCfg) + tlvStruct->length) ;
2059
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302060 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2061 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2062 tlvStruct->length = sizeof(tANI_U32);
2063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2064
2065 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2066 configDataValue ) != eSIR_SUCCESS)
2067 {
2068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2069 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2070 goto handle_failure;
2071 }
2072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2073 + sizeof(tHalCfg) + tlvStruct->length) ;
2074
2075
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002077#ifdef WLAN_DEBUG
2078 {
2079 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002080 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2081 "****** Dumping CFG TLV ***** ");
2082 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2083 {
2084 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2085 "%02x %02x %02x %02x %02x %02x %02x %02x",
2086 tlvStructStart[i],
2087 tlvStructStart[i+1],
2088 tlvStructStart[i+2],
2089 tlvStructStart[i+3],
2090 tlvStructStart[i+4],
2091 tlvStructStart[i+5],
2092 tlvStructStart[i+6],
2093 tlvStructStart[i+7]);
2094 }
2095 /* Dump the bytes in the last line*/
2096 for (; i < wdiStartParams->usConfigBufferLen; i++)
2097 {
2098 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2099 "%02x ",tlvStructStart[i]);
2100 }
2101 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2102 "**************************** ");
2103 }
2104#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002106handle_failure:
2107 vos_mem_free(configParam);
2108 return VOS_STATUS_E_FAILURE;
2109}
Jeff Johnson295189b2012-06-20 16:38:30 -07002110/*
2111 * FUNCTION: WDA_wdiCompleteCB
2112 * call the voss call back function
2113 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002114void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002115{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2117 tWDA_CbContext *wdaContext;
2118
2119 if(NULL == pWdaParams)
2120 {
2121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002122 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002123 VOS_ASSERT(0) ;
2124 return ;
2125 }
2126
2127 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2128
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 if (NULL == wdaContext)
2130 {
2131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002132 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 return ;
2134 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002135
Jeff Johnson295189b2012-06-20 16:38:30 -07002136 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002137 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002141 vos_mem_free(pWdaParams);
2142
Jeff Johnson295189b2012-06-20 16:38:30 -07002143 if(WDI_STATUS_SUCCESS != status)
2144 {
2145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2146 "WDI stop callback returned failure" );
2147 VOS_ASSERT(0) ;
2148 }
2149 else
2150 {
2151 wdaContext->wdaState = WDA_STOP_STATE;
2152 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002153
Leo Chang9d76f622013-08-23 16:34:52 -07002154 /* FTM Driver stop procedure should be synced.
2155 * Stop and Close will happen on same context */
2156 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2157 {
2158 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2159 {
2160 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2161 "%s: FTM Stop Event Set Fail", __func__);
2162 VOS_ASSERT(0);
2163 }
2164 }
2165
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002167 vos_WDAComplete_cback(wdaContext->pVosContext);
2168
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 return ;
2170}
Jeff Johnson295189b2012-06-20 16:38:30 -07002171/*
2172 * FUNCTION: WDA_stop
2173 * call WDI_stop
2174 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002175VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2176{
2177 WDI_Status wdiStatus;
2178 VOS_STATUS status = VOS_STATUS_SUCCESS;
2179 WDI_StopReqParamsType *wdiStopReq;
2180 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002181 tWDA_ReqParams *pWdaParams ;
2182
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 if (NULL == pWDA)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002186 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 VOS_ASSERT(0);
2188 return VOS_STATUS_E_FAILURE;
2189 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002190 if (pWDA->wdiFailed == true)
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002194 return VOS_STATUS_E_ALREADY;
2195 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002196
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 /* FTM mode stay START_STATE */
2198 if( (WDA_READY_STATE != pWDA->wdaState) &&
2199 (WDA_INIT_STATE != pWDA->wdaState) &&
2200 (WDA_START_STATE != pWDA->wdaState) )
2201 {
2202 VOS_ASSERT(0);
2203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 wdiStopReq = (WDI_StopReqParamsType *)
2205 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2206 if(NULL == wdiStopReq)
2207 {
2208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002210 VOS_ASSERT(0);
2211 return VOS_STATUS_E_NOMEM;
2212 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002213
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 wdiStopReq->wdiStopReason = reason;
2215 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002216
2217 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2218 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 {
2220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 VOS_ASSERT(0);
2223 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002224 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002226
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002227 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2228 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 {
2230 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002231 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002233
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002234 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2235 pWdaParams->wdaMsgParam = NULL;
2236 pWdaParams->pWdaContext = pWDA;
2237
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 /* call WDI stop */
2239 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002240 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2241
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2245 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2247 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 status = VOS_STATUS_E_FAILURE;
2249 }
Leo Chang9d76f622013-08-23 16:34:52 -07002250
2251 /* FTM Driver stop procedure should be synced.
2252 * Stop and Close will happen on same context */
2253 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2254 {
2255 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2256 WDI_RESPONSE_TIMEOUT);
2257 if (status != VOS_STATUS_SUCCESS)
2258 {
2259 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2260 "%s: FTM Stop Timepoout", __func__);
2261 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002262 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302263 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 return status;
2266}
Jeff Johnson295189b2012-06-20 16:38:30 -07002267/*
2268 * FUNCTION: WDA_close
2269 * call WDI_close and free the WDA context
2270 */
2271VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2272{
Jeff Johnson43971f52012-07-17 12:26:56 -07002273 VOS_STATUS status = VOS_STATUS_SUCCESS;
2274 WDI_Status wstatus;
2275 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 if (NULL == wdaContext)
2278 {
2279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002280 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 return VOS_STATUS_E_FAILURE;
2282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2284 (WDA_STOP_STATE != wdaContext->wdaState))
2285 {
2286 VOS_ASSERT(0);
2287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002289 wstatus = WDI_Close();
2290 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 {
2292 status = VOS_STATUS_E_FAILURE;
2293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002296 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2297 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 {
2299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002300 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 status = VOS_STATUS_E_FAILURE;
2302 }
2303
Jeff Johnson43971f52012-07-17 12:26:56 -07002304 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002305 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002308 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 status = VOS_STATUS_E_FAILURE;
2310 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002311 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002312 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 {
2314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002315 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 status = VOS_STATUS_E_FAILURE;
2317 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002318 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002319 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 {
2321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002322 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 status = VOS_STATUS_E_FAILURE;
2324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002326 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002327 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 {
2329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2330 "error in WDA close " );
2331 status = VOS_STATUS_E_FAILURE;
2332 }
2333 return status;
2334}
Jeff Johnson295189b2012-06-20 16:38:30 -07002335/*
2336 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2337 * returns 1 if the compiled version is greater than or equal to the input version
2338 */
2339
2340uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2341{
2342 VOS_STATUS status = VOS_STATUS_SUCCESS;
2343 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2344 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002346 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2347 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2348 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2349 (compiledVersion.revision >= revision)))
2350 return 1;
2351 else
2352 return 0;
2353}
Jeff Johnson295189b2012-06-20 16:38:30 -07002354/*
2355 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2356 * returns 1 if the compiled version is greater than or equal to the input version
2357 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002358uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2359{
2360 VOS_STATUS status = VOS_STATUS_SUCCESS;
2361 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2362 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002364 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2365 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2366 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2367 (reportedVersion.revision >= revision)))
2368 return 1;
2369 else
2370 return 0;
2371}
Jeff Johnson295189b2012-06-20 16:38:30 -07002372/*
2373 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2374 * Returns the version of the WCNSS WLAN API with which the HOST
2375 * device driver was compiled
2376 */
2377VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2378 tSirVersionType *pVersion)
2379{
2380 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 if ((NULL == pvosGCtx) || (NULL == pVersion))
2382 {
2383 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002384 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 VOS_ASSERT(0);
2386 return VOS_STATUS_E_FAILURE;
2387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2389 if (NULL == pWDA )
2390 {
2391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002392 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 VOS_ASSERT(0);
2394 return VOS_STATUS_E_FAILURE;
2395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 *pVersion = pWDA->wcnssWlanCompiledVersion;
2397 return VOS_STATUS_SUCCESS;
2398}
Jeff Johnson295189b2012-06-20 16:38:30 -07002399/*
2400 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2401 * Returns the version of the WCNSS WLAN API with which the WCNSS
2402 * device driver was compiled
2403 */
2404VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2405 tSirVersionType *pVersion)
2406{
2407 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 if ((NULL == pvosGCtx) || (NULL == pVersion))
2409 {
2410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002411 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 VOS_ASSERT(0);
2413 return VOS_STATUS_E_FAILURE;
2414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2416 if (NULL == pWDA )
2417 {
2418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002419 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 VOS_ASSERT(0);
2421 return VOS_STATUS_E_FAILURE;
2422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 *pVersion = pWDA->wcnssWlanReportedVersion;
2424 return VOS_STATUS_SUCCESS;
2425}
Jeff Johnson295189b2012-06-20 16:38:30 -07002426/*
2427 * FUNCTION: WDA_GetWcnssSoftwareVersion
2428 * Returns the WCNSS Software version string
2429 */
2430VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2431 tANI_U8 *pVersion,
2432 tANI_U32 versionBufferSize)
2433{
2434 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002436 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 if ((NULL == pvosGCtx) || (NULL == pVersion))
2438 {
2439 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002440 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 VOS_ASSERT(0);
2442 return VOS_STATUS_E_FAILURE;
2443 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2445 if (NULL == pWDA )
2446 {
2447 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002448 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 VOS_ASSERT(0);
2450 return VOS_STATUS_E_FAILURE;
2451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2453 return VOS_STATUS_SUCCESS;
2454}
Jeff Johnson295189b2012-06-20 16:38:30 -07002455/*
2456 * FUNCTION: WDA_GetWcnssHardwareVersion
2457 * Returns the WCNSS Hardware version string
2458 */
2459VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2460 tANI_U8 *pVersion,
2461 tANI_U32 versionBufferSize)
2462{
2463 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002465 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 if ((NULL == pvosGCtx) || (NULL == pVersion))
2467 {
2468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 VOS_ASSERT(0);
2471 return VOS_STATUS_E_FAILURE;
2472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2474 if (NULL == pWDA )
2475 {
2476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002477 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0);
2479 return VOS_STATUS_E_FAILURE;
2480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2482 return VOS_STATUS_SUCCESS;
2483}
Jeff Johnson295189b2012-06-20 16:38:30 -07002484/*
2485 * FUNCTION: WDA_WniCfgDnld
2486 * Trigger CFG Download
2487 */
2488VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2489{
2490 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302491 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002492
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 if (NULL == pMac )
2494 {
2495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002496 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 VOS_ASSERT(0);
2498 return VOS_STATUS_E_FAILURE;
2499 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302500 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 return vosStatus;
2502}
Jeff Johnson295189b2012-06-20 16:38:30 -07002503/* -----------------------------------------------------------------
2504 * WDI interface
2505 * -----------------------------------------------------------------
2506 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002507/*
2508 * FUNCTION: WDA_suspendDataTxCallback
2509 * call back function called from TL after suspend Transmission
2510 */
2511VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2512 v_U8_t* ucSTAId,
2513 VOS_STATUS vosStatus)
2514{
2515 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002517 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 if (NULL == pWDA )
2519 {
2520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002521 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 VOS_ASSERT(0);
2523 return VOS_STATUS_E_FAILURE;
2524 }
2525 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2526 {
2527 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2528 }
2529 else
2530 {
2531 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2532 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 /* Trigger the event to bring the WDA TL suspend function to come
2534 * out of wait*/
2535 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2536 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2537 {
2538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002539 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 /* If TL suspended had timedout before this callback was called, resume back
2542 * TL.*/
2543 if (pWDA->txSuspendTimedOut)
2544 {
2545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002546 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 WDA_ResumeDataTx(pWDA);
2548 pWDA->txSuspendTimedOut = FALSE;
2549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 return VOS_STATUS_SUCCESS;
2551}
Jeff Johnson295189b2012-06-20 16:38:30 -07002552/*
2553 * FUNCTION: WDA_suspendDataTx
2554 * Update TL to suspend the data Transmission
2555 */
2556VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2557{
2558 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2559 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002560
2561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002562 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 if (pWDA->txSuspendTimedOut)
2565 {
2566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002567 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 return status;
2569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 /* Reset the event to be not signalled */
2571 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2572 if(!VOS_IS_STATUS_SUCCESS(status))
2573 {
2574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002575 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 return VOS_STATUS_E_FAILURE;
2577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002579 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 WDA_SuspendDataTxCallback);
2581 if(status != VOS_STATUS_SUCCESS)
2582 {
2583 return status;
2584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 /* Wait for the event to be set by the TL, to get the response of
2586 * suspending the TX queues, this event should be set by the Callback
2587 * function called by TL*/
2588 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2589 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2590 if(!VOS_IS_STATUS_SUCCESS(status))
2591 {
2592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2593 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002594 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 /* Set this flag to true when TL suspend times out, so that when TL
2596 * suspend eventually happens and calls the callback, TL can be resumed
2597 * right away by looking at this flag when true.*/
2598 pWDA->txSuspendTimedOut = TRUE;
2599 }
2600 else
2601 {
2602 pWDA->txSuspendTimedOut = FALSE;
2603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2605 {
2606 status = VOS_STATUS_SUCCESS;
2607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 return status;
2609}
Jeff Johnson295189b2012-06-20 16:38:30 -07002610/*
2611 * FUNCTION: WDA_resumeDataTx
2612 * Update TL to resume the data Transmission
2613 */
2614VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2615{
2616 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002617
2618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002619 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002620
2621 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 return status;
2623}
Jeff Johnson295189b2012-06-20 16:38:30 -07002624/*
2625 * FUNCTION: WDA_InitScanReqCallback
2626 * Trigger Init SCAN callback
2627 */
2628void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2629{
2630 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2631 tWDA_CbContext *pWDA;
2632 tInitScanParams *pWDA_ScanParam ;
2633 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002635 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 if(NULL == pWdaParams)
2637 {
2638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002639 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 VOS_ASSERT(0) ;
2641 return ;
2642 }
2643 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2644 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 if(NULL == pWDA_ScanParam)
2646 {
2647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002648 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002649 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2651 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 return ;
2653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 if(WDI_STATUS_SUCCESS != wdiStatus)
2655 {
2656 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 if(VOS_STATUS_SUCCESS != status)
2658 {
2659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002660 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 }
2662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 /* free WDI command buffer */
2664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002666
Jeff Johnson295189b2012-06-20 16:38:30 -07002667
2668 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002669 /* without converting the Status to Failure or Success Just
2670 pass the same status to lim */
2671 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 /* send SCAN RSP message back to PE */
2673 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 return ;
2675}
2676
2677/*
2678 * FUNCTION: WDA_ProcessInitScanReq
2679 * Trigger Init SCAN in DAL
2680 */
2681VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2682 tInitScanParams *initScanParams)
2683{
2684 WDI_Status status = WDI_STATUS_SUCCESS ;
2685 WDI_InitScanReqParamsType *wdiInitScanParam =
2686 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2687 sizeof(WDI_InitScanReqParamsType)) ;
2688 tWDA_ReqParams *pWdaParams;
2689 tANI_U8 i = 0;
2690
2691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002692 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 if(NULL == wdiInitScanParam)
2694 {
2695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002696 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 VOS_ASSERT(0);
2698 return VOS_STATUS_E_NOMEM;
2699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2701 if(NULL == pWdaParams)
2702 {
2703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 VOS_ASSERT(0);
2706 vos_mem_free(wdiInitScanParam);
2707 return VOS_STATUS_E_NOMEM;
2708 }
2709
2710 /* Copy init Scan params to WDI structure */
2711 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2712 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2713 sizeof(tSirMacAddr)) ;
2714 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2715 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2716 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2718 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2720 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2722 {
2723 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2724 initScanParams->scanEntry.bssIdx[i] ;
2725 }
2726
2727 /* if Frame length, copy macMgmtHdr or WDI structure */
2728 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2729 {
2730 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2731 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2732 }
2733 wdiInitScanParam->wdiReqStatusCB = NULL ;
2734
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 /* Store Init Req pointer, as this will be used for response */
2736 pWdaParams->pWdaContext = pWDA;
2737 pWdaParams->wdaMsgParam = initScanParams;
2738 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 /* first try to suspend TX */
2740 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 if(WDI_STATUS_SUCCESS != status)
2742 {
2743 goto handleWdiFailure;
2744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 /* call DAL API to pass init scan request to DAL */
2746 status = WDI_InitScanReq(wdiInitScanParam,
2747 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002748 if(IS_WDI_STATUS_FAILURE(status))
2749 {
2750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2751 "error in WDA Init Scan, Resume Tx " );
2752 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 VOS_ASSERT(0) ;
2754
2755 goto handleWdiFailure;
2756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002758handleWdiFailure:
2759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2760 "Failure in WDI Api, free all the memory " );
2761 /* free WDI command buffer */
2762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2763 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 /* send Failure to PE */
2765 initScanParams->status = eSIR_FAILURE ;
2766 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 return CONVERT_WDI2VOS_STATUS(status) ;
2768}
2769
Jeff Johnson295189b2012-06-20 16:38:30 -07002770/*
2771 * FUNCTION: WDA_StartScanReqCallback
2772 * send Start SCAN RSP back to PE
2773 */
2774void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2775 void* pUserData)
2776{
2777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2778 tWDA_CbContext *pWDA;
2779 tStartScanParams *pWDA_ScanParam;
2780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002781 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 if(NULL == pWdaParams)
2783 {
2784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002785 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002786 VOS_ASSERT(0) ;
2787 return ;
2788 }
2789 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2790 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 if(NULL == pWDA_ScanParam)
2792 {
2793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002794 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002796 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 return ;
2798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2800 {
2801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002802 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002804 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002805 return ;
2806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2808 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002809
Jeff Johnson295189b2012-06-20 16:38:30 -07002810
2811 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002812 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 /* send SCAN RSP message back to PE */
2814 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 return ;
2816}
2817
Jeff Johnson295189b2012-06-20 16:38:30 -07002818/*
2819 * FUNCTION: WDA_ProcessStartScanReq
2820 * Trigger start SCAN in WDI
2821 */
2822VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2823 tStartScanParams *startScanParams)
2824{
2825 WDI_Status status = WDI_STATUS_SUCCESS;
2826 WDI_StartScanReqParamsType *wdiStartScanParams =
2827 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2828 sizeof(WDI_StartScanReqParamsType)) ;
2829 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002831 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 if(NULL == wdiStartScanParams)
2833 {
2834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 VOS_ASSERT(0);
2837 return VOS_STATUS_E_NOMEM;
2838 }
2839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2840 if(NULL == pWdaParams)
2841 {
2842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 VOS_ASSERT(0);
2845 vos_mem_free(wdiStartScanParams);
2846 return VOS_STATUS_E_NOMEM;
2847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 /* Copy init Scan params to WDI structure */
2849 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2850 wdiStartScanParams->wdiReqStatusCB = NULL ;
2851
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 /* Store Init Req pointer, as this will be used for response */
2853 /* store Params pass it to WDI */
2854 pWdaParams->pWdaContext = pWDA;
2855 pWdaParams->wdaMsgParam = startScanParams;
2856 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 /* call DAL API to pass init scan request to DAL */
2858 status = WDI_StartScanReq(wdiStartScanParams,
2859 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 /* failure returned by WDI API */
2861 if(IS_WDI_STATUS_FAILURE(status))
2862 {
2863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2864 "Failure in Start Scan WDI API, free all the memory "
2865 "It should be due to previous abort scan." );
2866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2867 vos_mem_free(pWdaParams) ;
2868 startScanParams->status = eSIR_FAILURE ;
2869 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 return CONVERT_WDI2VOS_STATUS(status) ;
2872}
Jeff Johnson295189b2012-06-20 16:38:30 -07002873/*
2874 * FUNCTION: WDA_EndScanReqCallback
2875 * END SCAN callback
2876 */
2877void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2878{
2879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2880 tWDA_CbContext *pWDA;
2881 tEndScanParams *endScanParam;
2882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 if(NULL == pWdaParams)
2885 {
2886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002887 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 VOS_ASSERT(0) ;
2889 return ;
2890 }
2891 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2892 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 if(NULL == endScanParam)
2894 {
2895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002896 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2899 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return ;
2901 }
2902
2903 /* Free WDI command buffer */
2904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2905 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002907 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 /* send response back to PE */
2909 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2910 return ;
2911}
2912
Jeff Johnson295189b2012-06-20 16:38:30 -07002913/*
2914 * FUNCTION: WDA_ProcessEndScanReq
2915 * Trigger END SCAN in WDI
2916 */
2917VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2918 tEndScanParams *endScanParams)
2919{
2920 WDI_Status status = WDI_STATUS_SUCCESS;
2921 WDI_EndScanReqParamsType *wdiEndScanParams =
2922 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2923 sizeof(WDI_EndScanReqParamsType)) ;
2924 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002926 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 if(NULL == wdiEndScanParams)
2928 {
2929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 VOS_ASSERT(0);
2932 return VOS_STATUS_E_NOMEM;
2933 }
2934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2935 if(NULL == pWdaParams)
2936 {
2937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 VOS_ASSERT(0);
2940 vos_mem_free(wdiEndScanParams);
2941 return VOS_STATUS_E_NOMEM;
2942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 /* Copy init Scan params to WDI structure */
2944 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2945 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 /* Store Init Req pointer, as this will be used for response */
2947 /* store Params pass it to WDI */
2948 pWdaParams->pWdaContext = pWDA;
2949 pWdaParams->wdaMsgParam = endScanParams;
2950 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 /* call DAL API to pass init scan request to DAL */
2952 status = WDI_EndScanReq(wdiEndScanParams,
2953 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 if(IS_WDI_STATUS_FAILURE(status))
2955 {
2956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2957 "Failure in End Scan WDI API, free all the memory "
2958 "It should be due to previous abort scan." );
2959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2960 vos_mem_free(pWdaParams) ;
2961 endScanParams->status = eSIR_FAILURE ;
2962 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 return CONVERT_WDI2VOS_STATUS(status) ;
2965}
Jeff Johnson295189b2012-06-20 16:38:30 -07002966/*
2967 * FUNCTION: WDA_FinishScanReqCallback
2968 * Trigger Finish SCAN callback
2969 */
2970void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2971{
2972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2973 tWDA_CbContext *pWDA;
2974 tFinishScanParams *finishScanParam;
2975 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002977 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 if(NULL == pWdaParams)
2979 {
2980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002981 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 VOS_ASSERT(0) ;
2983 return ;
2984 }
2985
2986 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2987 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 if(NULL == finishScanParam)
2989 {
2990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002991 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2994 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 return ;
2996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2998 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 /*
3000 * Now Resume TX, if we reached here means, TX is already suspended, we
3001 * have to resume it unconditionaly
3002 */
3003 status = WDA_ResumeDataTx(pWDA) ;
3004
3005 if(VOS_STATUS_SUCCESS != status)
3006 {
3007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003008 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003010 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3012 return ;
3013}
Jeff Johnson295189b2012-06-20 16:38:30 -07003014/*
3015 * FUNCTION: WDA_ProcessFinshScanReq
3016 * Trigger Finish SCAN in WDI
3017 */
3018VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3019 tFinishScanParams *finishScanParams)
3020{
3021 WDI_Status status = WDI_STATUS_SUCCESS;
3022 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3023 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3024 sizeof(WDI_FinishScanReqParamsType)) ;
3025 tWDA_ReqParams *pWdaParams ;
3026 tANI_U8 i = 0;
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 if(NULL == wdiFinishScanParams)
3030 {
3031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 VOS_ASSERT(0);
3034 return VOS_STATUS_E_NOMEM;
3035 }
3036 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3037 if(NULL == pWdaParams)
3038 {
3039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003040 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 VOS_ASSERT(0);
3042 vos_mem_free(wdiFinishScanParams);
3043 return VOS_STATUS_E_NOMEM;
3044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 /* Copy init Scan params to WDI structure */
3046 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3047 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3048 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3050 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3051 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3052 finishScanParams->frameLength ;
3053 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3054 finishScanParams->currentOperChannel ;
3055 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3056 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3057 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3059 {
3060 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3061 finishScanParams->scanEntry.bssIdx[i] ;
3062 }
3063
3064
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 /* if Frame length, copy macMgmtHdr ro WDI structure */
3066 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3067 {
3068 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3069 &finishScanParams->macMgmtHdr,
3070 sizeof(WDI_MacMgmtHdr)) ;
3071 }
3072 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 /* Store Init Req pointer, as this will be used for response */
3074 /* store Params pass it to WDI */
3075 pWdaParams->pWdaContext = pWDA;
3076 pWdaParams->wdaMsgParam = finishScanParams;
3077 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 /* call DAL API to pass init scan request to DAL */
3079 status = WDI_FinishScanReq(wdiFinishScanParams,
3080 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003081
Jeff Johnson295189b2012-06-20 16:38:30 -07003082
3083 /*
3084 * WDI API returns failure..
3085 */
3086 if(IS_WDI_STATUS_FAILURE( status))
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3089 "Failure in Finish Scan WDI API, free all the memory " );
3090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3091 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 finishScanParams->status = eSIR_FAILURE ;
3093 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 return CONVERT_WDI2VOS_STATUS(status) ;
3096}
Jeff Johnson295189b2012-06-20 16:38:30 -07003097/*---------------------------------------------------------------------
3098 * ASSOC API's
3099 *---------------------------------------------------------------------
3100 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003101/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303102 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 * Trigger Init SCAN callback
3104 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303105void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003106{
3107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3108 tWDA_CbContext *pWDA;
3109 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003111 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 if(NULL == pWdaParams)
3113 {
3114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003115 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 VOS_ASSERT(0) ;
3117 return ;
3118 }
3119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3120 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3122 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 /* reset macBSSID */
3124 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 /* reset macSTASelf */
3126 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003127 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return ;
3130}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303131
3132/*
3133 * FUNCTION: WDA_JoinReqCallback
3134 * Free memory and send SWITCH CHANNEL RSP back to PE.
3135 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3136 */
3137void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3138{
3139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3140 tWDA_CbContext *pWDA;
3141 tSwitchChannelParams *joinReqParam;
3142
3143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3144 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3145
3146 if(NULL == pWdaParams)
3147 {
3148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3149 "%s: pWdaParams received NULL", __func__);
3150 VOS_ASSERT(0);
3151 return;
3152 }
3153
3154 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3155 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3156 joinReqParam->status = wdiStatus;
3157
3158 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3159 {
3160 /* reset macBSSID */
3161 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3162 /* reset macSTASelf */
3163 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3164
3165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3166 vos_mem_free(pWdaParams);
3167 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3168 }
3169
3170 return;
3171}
3172
Jeff Johnson295189b2012-06-20 16:38:30 -07003173/*
3174 * FUNCTION: WDA_ProcessJoinReq
3175 * Trigger Join REQ in WDI
3176 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003177VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3178 tSwitchChannelParams* joinReqParam)
3179{
3180 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 WDI_JoinReqParamsType *wdiJoinReqParam =
3182 (WDI_JoinReqParamsType *)vos_mem_malloc(
3183 sizeof(WDI_JoinReqParamsType)) ;
3184 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(NULL == wdiJoinReqParam)
3188 {
3189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003192 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 return VOS_STATUS_E_NOMEM;
3194 }
3195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3196 if(NULL == pWdaParams)
3197 {
3198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 VOS_ASSERT(0);
3201 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003202 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 return VOS_STATUS_E_NOMEM;
3204 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003205
3206 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3207 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3208 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3211 "%s: received join request when BSSID or self-STA is NULL "
3212 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003213 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003214 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3215 VOS_ASSERT(0);
3216 vos_mem_free(wdiJoinReqParam);
3217 vos_mem_free(pWdaParams);
3218 joinReqParam->status = eSIR_FAILURE ;
3219 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3220 return VOS_STATUS_E_INVAL;
3221 }
3222
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 /* copy the BSSID for pWDA */
3224 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3225 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3227 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3229 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003230#ifdef WLAN_FEATURE_VOWIFI
3231 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3232 joinReqParam->maxTxPower ;
3233#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3235 joinReqParam->localPowerConstraint ;
3236#endif
3237 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3238 joinReqParam->secondaryChannelOffset ;
3239 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3240
Sachin Ahuja935eda782014-07-30 14:57:41 +05303241 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3242 wdiJoinReqParam->pUserData = pWdaParams;
3243
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 /* Store Init Req pointer, as this will be used for response */
3245 /* store Params pass it to WDI */
3246 pWdaParams->pWdaContext = pWDA;
3247 pWdaParams->wdaMsgParam = joinReqParam;
3248 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303250 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 if(IS_WDI_STATUS_FAILURE(status))
3252 {
3253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3254 "Failure in Join WDI API, free all the memory " );
3255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3256 vos_mem_free(pWdaParams) ;
3257 joinReqParam->status = eSIR_FAILURE ;
3258 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 return CONVERT_WDI2VOS_STATUS(status) ;
3261}
Jeff Johnson295189b2012-06-20 16:38:30 -07003262/*
3263 * FUNCTION: WDA_SwitchChannelReqCallback
3264 * send Switch channel RSP back to PE
3265 */
3266void WDA_SwitchChannelReqCallback(
3267 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3268{
3269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3270 tWDA_CbContext *pWDA;
3271 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003273 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 if(NULL == pWdaParams)
3275 {
3276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 VOS_ASSERT(0) ;
3279 return ;
3280 }
3281 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3282 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3283
3284#ifdef WLAN_FEATURE_VOWIFI
3285 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3286#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3288 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003290 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 return ;
3293}
Jeff Johnson295189b2012-06-20 16:38:30 -07003294/*
3295 * FUNCTION: WDA_ProcessChannelSwitchReq
3296 * Request to WDI to switch channel REQ params.
3297 */
3298VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3299 tSwitchChannelParams *pSwitchChanParams)
3300{
3301 WDI_Status status = WDI_STATUS_SUCCESS ;
3302 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3303 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3304 sizeof(WDI_SwitchChReqParamsType)) ;
3305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 if(NULL == wdiSwitchChanParam)
3309 {
3310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 VOS_ASSERT(0);
3313 return VOS_STATUS_E_NOMEM;
3314 }
3315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3316 if(NULL == pWdaParams)
3317 {
3318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 VOS_ASSERT(0);
3321 vos_mem_free(wdiSwitchChanParam);
3322 return VOS_STATUS_E_NOMEM;
3323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3325#ifndef WLAN_FEATURE_VOWIFI
3326 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3327 pSwitchChanParams->localPowerConstraint;
3328#endif
3329 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3330 pSwitchChanParams->secondaryChannelOffset;
3331 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 /* Store req pointer, as this will be used for response */
3333 /* store Params pass it to WDI */
3334 pWdaParams->pWdaContext = pWDA;
3335 pWdaParams->wdaMsgParam = pSwitchChanParams;
3336 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003337#ifdef WLAN_FEATURE_VOWIFI
3338 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3339 = pSwitchChanParams->maxTxPower;
3340 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3341 pSwitchChanParams ->selfStaMacAddr,
3342 sizeof(tSirMacAddr));
3343#endif
3344 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3345 pSwitchChanParams->bssId,
3346 sizeof(tSirMacAddr));
3347
3348 status = WDI_SwitchChReq(wdiSwitchChanParam,
3349 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 if(IS_WDI_STATUS_FAILURE(status))
3351 {
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3353 "Failure in process channel switch Req WDI API, free all the memory " );
3354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3355 vos_mem_free(pWdaParams) ;
3356 pSwitchChanParams->status = eSIR_FAILURE ;
3357 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 return CONVERT_WDI2VOS_STATUS(status) ;
3360}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003361
3362/*
3363 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3364 * send Switch channel RSP back to PE
3365 */
3366void WDA_SwitchChannelReqCallback_V1(
3367 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3368 void* pUserData)
3369{
3370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3371 tWDA_CbContext *pWDA;
3372 tSwitchChannelParams *pSwitchChanParams;
3373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3374 "<------ %s " ,__func__);
3375
3376 if (NULL == pWdaParams)
3377 {
3378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3379 "%s: pWdaParams received NULL", __func__);
3380 VOS_ASSERT(0);
3381 return ;
3382 }
3383 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3384 pSwitchChanParams =
3385 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3386 pSwitchChanParams->channelSwitchSrc =
3387 wdiSwitchChanRsp->channelSwitchSrc;
3388#ifdef WLAN_FEATURE_VOWIFI
3389 pSwitchChanParams->txMgmtPower =
3390 wdiSwitchChanRsp->ucTxMgmtPower;
3391#endif
3392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3393 vos_mem_free(pWdaParams);
3394 pSwitchChanParams->status =
3395 wdiSwitchChanRsp->wdiStatus ;
3396 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3397 (void *)pSwitchChanParams , 0);
3398 return;
3399}
3400
3401/*
3402 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3403 * Request to WDI to switch channel REQ params.
3404 */
3405VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3406 tSwitchChannelParams *pSwitchChanParams)
3407{
3408 WDI_Status status = WDI_STATUS_SUCCESS ;
3409 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3410 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3411 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3412 tWDA_ReqParams *pWdaParams ;
3413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3414 "------> %s " ,__func__);
3415 if (NULL == wdiSwitchChanParam)
3416 {
3417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3418 "%s: VOS MEM Alloc Failure", __func__);
3419 VOS_ASSERT(0);
3420 return VOS_STATUS_E_NOMEM;
3421 }
3422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3423 if (NULL == pWdaParams)
3424 {
3425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3426 "%s: VOS MEM Alloc Failure", __func__);
3427 VOS_ASSERT(0);
3428 vos_mem_free(wdiSwitchChanParam);
3429 return VOS_STATUS_E_NOMEM;
3430 }
3431 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3432 pSwitchChanParams->channelSwitchSrc;
3433
3434 wdiSwitchChanParam->wdiChInfo.ucChannel =
3435 pSwitchChanParams->channelNumber;
3436#ifndef WLAN_FEATURE_VOWIFI
3437 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3438 pSwitchChanParams->localPowerConstraint;
3439#endif
3440 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3441 pSwitchChanParams->secondaryChannelOffset;
3442 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3443 /* Store req pointer, as this will be used for response */
3444 /* store Params pass it to WDI */
3445 pWdaParams->pWdaContext = pWDA;
3446 pWdaParams->wdaMsgParam = pSwitchChanParams;
3447 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3448#ifdef WLAN_FEATURE_VOWIFI
3449 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3450 pSwitchChanParams->maxTxPower;
3451 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3452 pSwitchChanParams ->selfStaMacAddr,
3453 sizeof(tSirMacAddr));
3454#endif
3455 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3456 pSwitchChanParams->bssId,
3457 sizeof(tSirMacAddr));
3458
3459 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3460 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3461 pWdaParams);
3462 if (IS_WDI_STATUS_FAILURE(status))
3463 {
3464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3465 "Failure in process channel switch Req WDI "
3466 "API, free all the memory " );
3467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3468 vos_mem_free(pWdaParams) ;
3469 pSwitchChanParams->status = eSIR_FAILURE ;
3470 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3471 (void *)pSwitchChanParams, 0) ;
3472 }
3473 return CONVERT_WDI2VOS_STATUS(status) ;
3474}
3475
Jeff Johnson295189b2012-06-20 16:38:30 -07003476/*
3477 * FUNCTION: WDA_ConfigBssReqCallback
3478 * config BSS Req Callback, called by WDI
3479 */
3480void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3481 ,void* pUserData)
3482{
3483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3484 tWDA_CbContext *pWDA;
3485 tAddBssParams *configBssReqParam;
3486 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003488 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 if(NULL == pWdaParams)
3490 {
3491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 VOS_ASSERT(0) ;
3494 return ;
3495 }
3496 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3497 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3498 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003500 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3502 {
3503 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3504 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3506 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3507 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3508
3509 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3510 {
3511 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3512 {
3513 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3514 staConfigBssParam->staType = STA_ENTRY_BSSID;
3515 }
3516 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3517 (staConfigBssParam->staType == STA_ENTRY_SELF))
3518 {
3519 /* This is the 1st add BSS Req for the BTAMP STA */
3520 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3521 staConfigBssParam->staType = STA_ENTRY_BSSID;
3522 }
3523 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3524 (staConfigBssParam->staType == STA_ENTRY_PEER))
3525 {
3526 /* This is the 2nd ADD BSS Request that is sent
3527 * on the BTAMP STA side. The Sta type is
3528 * set to STA_ENTRY_PEER here.*/
3529 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3530 }
3531 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3532 (staConfigBssParam->staType == STA_ENTRY_SELF))
3533 {
3534 /* statype is already set by PE.
3535 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3536 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3537 staConfigBssParam->staType = STA_ENTRY_BSSID;
3538 }
3539 else
3540 {
3541 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3542 staConfigBssParam->staType = STA_ENTRY_PEER;
3543 }
3544 }
3545 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3546 {
3547 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3548 staConfigBssParam->staType = STA_ENTRY_SELF;
3549 }
3550 else
3551 {
3552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3553 "Invalid operation mode specified");
3554 VOS_ASSERT(0);
3555 }
3556
3557 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3562 sizeof(tSirMacAddr));
3563 staConfigBssParam->txChannelWidthSet =
3564 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3566 staConfigBssParam->htCapable)
3567 {
3568 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3569 wdiConfigBssRsp->ucBSSIdx;
3570 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3571 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303572 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3573 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3576 wdiConfigBssRsp->ucBSSIdx,
3577 wdiConfigBssRsp->ucSTAIdx))
3578 {
3579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003580 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 VOS_ASSERT(0) ;
3582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3584 {
3585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_ASSERT(0) ;
3588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003589#ifdef WLAN_FEATURE_VOWIFI
3590 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3591#endif
3592 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303593 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3594 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3596 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 return ;
3599}
Jeff Johnson295189b2012-06-20 16:38:30 -07003600/*
3601 * FUNCTION: WDA_UpdateEdcaParamsForAC
3602 * Update WDI EDCA params with PE edca params
3603 */
3604void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3605 WDI_EdcaParamRecord *wdiEdcaParam,
3606 tSirMacEdcaParamRecord *macEdcaParam)
3607{
3608 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3609 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3610 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3611 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3612 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3613 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3614}
Jeff Johnson295189b2012-06-20 16:38:30 -07003615/*
3616 * FUNCTION: WDA_ProcessConfigBssReq
3617 * Configure BSS before starting Assoc with AP
3618 */
3619VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3620 tAddBssParams* configBssReqParam)
3621{
3622 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303623 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003626 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303627 if (NULL == configBssReqParam)
3628 {
3629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3630 "%s: configBssReqParam is NULL", __func__);
3631 return VOS_STATUS_E_INVAL;
3632 }
3633
3634 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3635 sizeof(WDI_ConfigBSSReqParamsType)) ;
3636
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 if(NULL == wdiConfigBssReqParam)
3638 {
3639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_ASSERT(0);
3642 return VOS_STATUS_E_NOMEM;
3643 }
3644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3645 if(NULL == pWdaParams)
3646 {
3647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 VOS_ASSERT(0);
3650 vos_mem_free(wdiConfigBssReqParam);
3651 return VOS_STATUS_E_NOMEM;
3652 }
Kiran4a17ebe2013-01-31 10:43:43 -08003653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3654 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3657 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 /* Store Init Req pointer, as this will be used for response */
3659 /* store Params pass it to WDI */
3660 pWdaParams->pWdaContext = pWDA;
3661 pWdaParams->wdaMsgParam = configBssReqParam;
3662 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003663 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3664 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 if(IS_WDI_STATUS_FAILURE(status))
3666 {
3667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3668 "Failure in Config BSS WDI API, free all the memory " );
3669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3670 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 return CONVERT_WDI2VOS_STATUS(status) ;
3675}
Jeff Johnson295189b2012-06-20 16:38:30 -07003676#ifdef ENABLE_HAL_COMBINED_MESSAGES
3677/*
3678 * FUNCTION: WDA_PostAssocReqCallback
3679 * Post ASSOC req callback, send RSP back to PE
3680 */
3681void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3682 void* pUserData)
3683{
3684 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3685 tPostAssocParams *postAssocReqParam =
3686 (tPostAssocParams *)pWDA->wdaMsgParam ;
3687 /*STA context within the BSS Params*/
3688 tAddStaParams *staPostAssocParam =
3689 &postAssocReqParam->addBssParams.staContext ;
3690 /*STA Params for self STA*/
3691 tAddStaParams *selfStaPostAssocParam =
3692 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003696 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3698 {
3699 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3700 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3701 sizeof(tSirMacAddr)) ;
3702 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3703 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3704 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3706 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303707 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3709 pWDA->wdaWdiApiMsgParam = NULL;
3710 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 return ;
3713}
Jeff Johnson295189b2012-06-20 16:38:30 -07003714/*
3715 * FUNCTION: WDA_ProcessPostAssocReq
3716 * Trigger POST ASSOC processing in WDI
3717 */
3718VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3719 tPostAssocParams *postAssocReqParam)
3720{
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 WDI_Status status = WDI_STATUS_SUCCESS ;
3722
3723 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3724 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3725 sizeof(WDI_PostAssocReqParamsType)) ;
3726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003727 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003728
Jeff Johnson295189b2012-06-20 16:38:30 -07003729 if(NULL == wdiPostAssocReqParam)
3730 {
3731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003733 VOS_ASSERT(0);
3734 return VOS_STATUS_E_NOMEM;
3735 }
3736
3737 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3738 {
3739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003740 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 VOS_ASSERT(0);
3742 return VOS_STATUS_E_FAILURE;
3743 }
3744
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 /* update BSS params into WDI structure */
3746 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3747 &postAssocReqParam->addBssParams) ;
3748 /* update STA params into WDI structure */
3749 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3750 &postAssocReqParam->addStaParams) ;
3751
3752 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3753 postAssocReqParam->addBssParams.highPerformance;
3754 WDA_UpdateEdcaParamsForAC(pWDA,
3755 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3756 &postAssocReqParam->addBssParams.acbe);
3757 WDA_UpdateEdcaParamsForAC(pWDA,
3758 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3759 &postAssocReqParam->addBssParams.acbk);
3760 WDA_UpdateEdcaParamsForAC(pWDA,
3761 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3762 &postAssocReqParam->addBssParams.acvi);
3763 WDA_UpdateEdcaParamsForAC(pWDA,
3764 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3765 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 /* Store Init Req pointer, as this will be used for response */
3767 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 /* store Params pass it to WDI */
3769 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3771 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 if(IS_WDI_STATUS_FAILURE(status))
3773 {
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3775 "Failure in Post Assoc WDI API, free all the memory " );
3776 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3777 pWDA->wdaWdiApiMsgParam = NULL;
3778 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 return CONVERT_WDI2VOS_STATUS(status) ;
3783}
3784#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003785/*
3786 * FUNCTION: WDA_AddStaReqCallback
3787 * ADD STA req callback, send RSP back to PE
3788 */
3789void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3790 void* pUserData)
3791{
3792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3793 tWDA_CbContext *pWDA;
3794 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003796 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 if(NULL == pWdaParams)
3798 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 VOS_ASSERT(0) ;
3801 return ;
3802 }
3803 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3804 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003805 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003806 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3808 {
3809 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3810 /*TODO: UMAC structure doesn't have these fields*/
3811 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3812 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3813 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3814 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3815 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3816 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003817#ifdef FEATURE_WLAN_TDLS
3818 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3819 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3820#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003822#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 {
3824 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3825 wdiConfigStaRsp->ucBssIdx;
3826 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3827 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303828 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3829 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003830 }
3831 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3832 {
3833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003834 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 VOS_ASSERT(0) ;
3836 return ;
3837 }
3838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3840 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003841 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003842 return ;
3843}
Jeff Johnson295189b2012-06-20 16:38:30 -07003844/*
3845 * FUNCTION: WDA_ConfigStaReq
3846 * Trigger Config STA processing in WDI
3847 */
3848VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3849 tAddStaParams *addStaReqParam)
3850{
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3853 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3854 sizeof(WDI_ConfigSTAReqParamsType)) ;
3855 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003857 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 if(NULL == wdiConfigStaReqParam)
3859 {
3860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003861 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003862 VOS_ASSERT(0);
3863 return VOS_STATUS_E_NOMEM;
3864 }
3865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3866 if(NULL == pWdaParams)
3867 {
3868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 VOS_ASSERT(0);
3871 vos_mem_free(wdiConfigStaReqParam);
3872 return VOS_STATUS_E_NOMEM;
3873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 /* update STA params into WDI structure */
3876 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3877 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 /* Store Init Req pointer, as this will be used for response */
3879 /* store Params pass it to WDI */
3880 pWdaParams->pWdaContext = pWDA;
3881 pWdaParams->wdaMsgParam = addStaReqParam;
3882 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3884 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 if(IS_WDI_STATUS_FAILURE(status))
3886 {
3887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3888 "Failure in Config STA WDI API, free all the memory " );
3889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3890 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003891 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 return CONVERT_WDI2VOS_STATUS(status) ;
3895}
Jeff Johnson295189b2012-06-20 16:38:30 -07003896/*
3897 * FUNCTION: WDA_DelBSSReqCallback
3898 * Dens DEL BSS RSP back to PE
3899 */
3900void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3901 void* pUserData)
3902{
3903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3904 tWDA_CbContext *pWDA;
3905 tDeleteBssParams *delBssReqParam;
3906 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003908 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 if(NULL == pWdaParams)
3910 {
3911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003912 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003913 VOS_ASSERT(0) ;
3914 return ;
3915 }
3916 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3917 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003918 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3920 {
3921 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3922 sizeof(tSirMacAddr)) ;
3923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3925 {
3926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003927 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 VOS_ASSERT(0) ;
3929 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3931 {
3932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003933 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 VOS_ASSERT(0) ;
3935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3937 {
3938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003939 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 VOS_ASSERT(0) ;
3941 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303942
3943 WLANTL_StartForwarding(staIdx,0,0);
3944
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3946 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 /* reset the the system role*/
3948 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3949
3950 /* Reset the BA related information */
3951 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3952 {
3953 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3954 {
3955 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3956 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303957 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 /* Reset framesTxed counters here */
3959 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3960 {
3961 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3962 }
3963 }
3964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 return ;
3967}
3968
Jeff Johnson295189b2012-06-20 16:38:30 -07003969/*
3970 * FUNCTION: WDA_ProcessDelBssReq
3971 * Init DEL BSS req with WDI
3972 */
3973VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3974 tDeleteBssParams *delBssParam)
3975{
3976 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3978 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3979 sizeof(WDI_DelBSSReqParamsType)) ;
3980 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003982 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 if(NULL == wdiDelBssReqParam)
3984 {
3985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 VOS_ASSERT(0);
3988 return VOS_STATUS_E_NOMEM;
3989 }
3990 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3991 if(NULL == pWdaParams)
3992 {
3993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 VOS_ASSERT(0);
3996 vos_mem_free(wdiDelBssReqParam);
3997 return VOS_STATUS_E_NOMEM;
3998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4000 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4001
4002 /* Store Init Req pointer, as this will be used for response */
4003 /* store Params pass it to WDI */
4004 pWdaParams->pWdaContext = pWDA;
4005 pWdaParams->wdaMsgParam = delBssParam;
4006 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 status = WDI_DelBSSReq(wdiDelBssReqParam,
4008 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 if(IS_WDI_STATUS_FAILURE(status))
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4012 "Failure in Del BSS WDI API, free all the memory " );
4013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4014 vos_mem_free(pWdaParams) ;
4015 delBssParam->status = eSIR_FAILURE ;
4016 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 return CONVERT_WDI2VOS_STATUS(status) ;
4019}
Jeff Johnson295189b2012-06-20 16:38:30 -07004020/*
4021 * FUNCTION: WDA_DelSTAReqCallback
4022 * Dens DEL STA RSP back to PE
4023 */
4024void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4025 void* pUserData)
4026{
4027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4028 tWDA_CbContext *pWDA;
4029 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004031 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 if(NULL == pWdaParams)
4033 {
4034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004035 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 VOS_ASSERT(0) ;
4037 return ;
4038 }
4039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4040 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004041 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004042 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4043 {
4044 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4045 {
4046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004047 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 VOS_ASSERT(0) ;
4049 }
4050 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304051 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 }
4053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4054 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 /*Reset the BA information corresponding to this STAIdx */
4056 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4057 WDA_INVALID_STA_INDEX;
4058 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304059 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 return ;
4062}
Jeff Johnson295189b2012-06-20 16:38:30 -07004063/*
4064 * FUNCTION: WDA_ProcessDelStaReq
4065 * Init DEL STA req with WDI
4066 */
4067VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4068 tDeleteStaParams *delStaParam)
4069{
4070 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4072 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4073 sizeof(WDI_DelSTAReqParamsType)) ;
4074 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004076 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 if(NULL == wdiDelStaReqParam)
4078 {
4079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 VOS_ASSERT(0);
4082 return VOS_STATUS_E_NOMEM;
4083 }
4084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4085 if(NULL == pWdaParams)
4086 {
4087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 VOS_ASSERT(0);
4090 vos_mem_free(wdiDelStaReqParam);
4091 return VOS_STATUS_E_NOMEM;
4092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4094 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 /* Store Init Req pointer, as this will be used for response */
4096 /* store Params pass it to WDI */
4097 pWdaParams->pWdaContext = pWDA;
4098 pWdaParams->wdaMsgParam = delStaParam;
4099 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 status = WDI_DelSTAReq(wdiDelStaReqParam,
4101 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 if(IS_WDI_STATUS_FAILURE(status))
4103 {
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4105 "Failure in Del STA WDI API, free all the memory status = %d",
4106 status );
4107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4108 vos_mem_free(pWdaParams) ;
4109 delStaParam->status = eSIR_FAILURE ;
4110 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 return CONVERT_WDI2VOS_STATUS(status) ;
4113}
Jeff Johnson295189b2012-06-20 16:38:30 -07004114void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4115{
4116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4117 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304118 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004120 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 if(NULL == pWdaParams)
4122 {
4123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004124 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 VOS_ASSERT(0) ;
4126 return ;
4127 }
4128 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4129 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4131 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4133 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4134 pwdiAddSTASelfRsp->macSelfSta,
4135 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304136 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4137 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4138 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4139 {
4140 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4141 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 return ;
4145}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304146
Jeff Johnson295189b2012-06-20 16:38:30 -07004147/*
4148 * FUNCTION: WDA_ProcessAddStaSelfReq
4149 *
4150 */
4151VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4152{
4153 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004154 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4156 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4157 sizeof(WDI_AddSTASelfReqParamsType)) ;
4158 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004160 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304161 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 if( NULL == wdiAddStaSelfReq )
4163 {
4164 VOS_ASSERT( 0 );
4165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004166 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304167 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4168 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 return( VOS_STATUS_E_NOMEM );
4170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 if( NULL == pWdaParams )
4173 {
4174 VOS_ASSERT( 0 );
4175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004176 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304177 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4178 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 vos_mem_free(wdiAddStaSelfReq) ;
4180 return( VOS_STATUS_E_NOMEM );
4181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004184 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 /* Store Init Req pointer, as this will be used for response */
4186 /* store Params pass it to WDI */
4187 pWdaParams->pWdaContext = pWDA;
4188 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4189 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004190 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004191
Jeff Johnson43971f52012-07-17 12:26:56 -07004192 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 {
4194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4195 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004196 wstatus );
4197 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4199 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304200 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4201 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 pAddStaSelfReq->status = eSIR_FAILURE ;
4203 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4204 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004205 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206}
Jeff Johnson295189b2012-06-20 16:38:30 -07004207/*
4208 * FUNCTION: WDA_DelSTASelfRespCallback
4209 *
4210 */
4211void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4212 wdiDelStaSelfRspParams , void* pUserData)
4213{
4214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4215 tWDA_CbContext *pWDA;
4216 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004218 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 if (NULL == pWdaParams)
4220 {
4221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004222 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 VOS_ASSERT(0);
4224 return;
4225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4227 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004229 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230
4231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4232 vos_mem_free(pWdaParams) ;
4233
4234 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 return ;
4236}
Jeff Johnson295189b2012-06-20 16:38:30 -07004237/*
4238 * FUNCTION: WDA_DelSTASelfReqCallback
4239 *
4240 */
4241void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4242 void* pUserData)
4243{
4244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4245 tWDA_CbContext *pWDA;
4246 tDelStaSelfParams *delStaSelfParams;
4247
4248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304249 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004250 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004251
4252 if (NULL == pWdaParams)
4253 {
4254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004255 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 VOS_ASSERT(0);
4257 return;
4258 }
4259
4260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4261 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4262
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004263 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004264
4265 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4266 {
4267 VOS_ASSERT(0);
4268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4269 vos_mem_free(pWdaParams) ;
4270 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4271 }
4272
4273 return ;
4274}
4275
4276/*
4277 * FUNCTION: WDA_DelSTASelfReq
4278 * Trigger Config STA processing in WDI
4279 */
4280VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4281 tDelStaSelfParams* pDelStaSelfReqParam)
4282{
4283 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004284 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 tWDA_ReqParams *pWdaParams = NULL;
4286 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4287 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4288 sizeof(WDI_DelSTASelfReqParamsType)) ;
4289
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 if( NULL == wdiDelStaSelfReq )
4293 {
4294 VOS_ASSERT( 0 );
4295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004296 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 return( VOS_STATUS_E_NOMEM );
4298 }
4299
4300 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4301 if( NULL == pWdaParams )
4302 {
4303 VOS_ASSERT( 0 );
4304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004305 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 vos_mem_free(wdiDelStaSelfReq) ;
4307 return( VOS_STATUS_E_NOMEM );
4308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 pWdaParams->pWdaContext = pWDA;
4310 /* Store param pointer as passed in by caller */
4311 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4312 /* store Params pass it to WDI */
4313 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4315 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4316
4317 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4318 wdiDelStaSelfReq->pUserData = pWdaParams;
4319
Jeff Johnson43971f52012-07-17 12:26:56 -07004320 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4322
Jeff Johnson43971f52012-07-17 12:26:56 -07004323 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 {
4325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4326 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4327 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004328 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4330 vos_mem_free(pWdaParams) ;
4331 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4332 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4333 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004334 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335}
4336
Jeff Johnson295189b2012-06-20 16:38:30 -07004337/*
4338 * FUNCTION: WDA_SendMsg
4339 * Send Message back to PE
4340 */
4341void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4342 void *pBodyptr, tANI_U32 bodyVal)
4343{
4344 tSirMsgQ msg = {0} ;
4345 tANI_U32 status = VOS_STATUS_SUCCESS ;
4346 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 msg.type = msgType;
4348 msg.bodyval = bodyVal;
4349 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 if (VOS_STATUS_SUCCESS != status)
4352 {
4353 if(NULL != pBodyptr)
4354 {
4355 vos_mem_free(pBodyptr);
4356 }
4357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004358 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 VOS_ASSERT(0) ;
4360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 return ;
4362}
Jeff Johnson295189b2012-06-20 16:38:30 -07004363/*
4364 * FUNCTION: WDA_UpdateBSSParams
4365 * Translated WDA/PE BSS info into WDI BSS info..
4366 */
4367void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4368 WDI_ConfigBSSReqInfoType *wdiBssParams,
4369 tAddBssParams *wdaBssParams)
4370{
4371 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 /* copy bssReq Params to WDI structure */
4373 vos_mem_copy(wdiBssParams->macBSSID,
4374 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4375 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4376 sizeof(tSirMacAddr)) ;
4377 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4378 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4379 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 wdiBssParams->ucShortSlotTimeSupported =
4381 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4383 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4384 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4385 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4386 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4387
4388 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4389 wdiBssParams->ucTXOPProtectionFullSupport =
4390 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4392 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4395 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4396 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4397 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4398
Chet Lanctot186b5732013-03-18 10:26:30 -07004399 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4400
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 /* copy SSID into WDI structure */
4402 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4403 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4404 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004405 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4406 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004407 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004408#ifdef WLAN_FEATURE_VOWIFI
4409 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4410#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004411 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004413#ifdef WLAN_FEATURE_VOWIFI_11R
4414 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 if(wdiBssParams->bExtSetStaKeyParamValid)
4416 {
4417 /* copy set STA key params to WDI structure */
4418 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4419 wdaBssParams->extSetStaKeyParam.staIdx;
4420 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4421 wdaBssParams->extSetStaKeyParam.encType;
4422 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4423 wdaBssParams->extSetStaKeyParam.wepType;
4424 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4425 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004426 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4427 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004428 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4430 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4431 {
4432 WDA_GetWepKeysFromCfg( pWDA,
4433 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4434 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4435 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4436 }
4437 else
4438 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004439 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4440 keyIndex++)
4441 {
4442 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4443 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4444 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4445 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4446 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4447 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4449 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4450 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4451 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4452 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4453 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4454 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4455 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4458 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 }
4460 }
4461 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4462 }
4463 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4464 {
4465 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4466 sizeof(wdaBssParams->extSetStaKeyParam) );
4467 }
4468#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004469#ifdef WLAN_FEATURE_11AC
4470 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4471 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4472#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004473
4474 return ;
4475}
Jeff Johnson295189b2012-06-20 16:38:30 -07004476/*
4477 * FUNCTION: WDA_UpdateSTAParams
4478 * Translated WDA/PE BSS info into WDI BSS info..
4479 */
4480void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4481 WDI_ConfigStaReqInfoType *wdiStaParams,
4482 tAddStaParams *wdaStaParams)
4483{
4484 tANI_U8 i = 0;
4485 /* Update STA params */
4486 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4487 sizeof(tSirMacAddr)) ;
4488 wdiStaParams->usAssocId = wdaStaParams->assocId;
4489 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004490 wdiStaParams->staIdx = wdaStaParams->staIdx;
4491
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 wdiStaParams->ucShortPreambleSupported =
4493 wdaStaParams->shortPreambleSupported;
4494 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4495 sizeof(tSirMacAddr)) ;
4496 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4497
4498 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4499
4500 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4501 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4502 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4503 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4504 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4505 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4506 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4507
4508 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4509 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004510 wdiStaParams->wdiSupportedRates.opRateMode =
4511 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4513 {
4514 wdiStaParams->wdiSupportedRates.llbRates[i] =
4515 wdaStaParams->supportedRates.llbRates[i];
4516 }
4517 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4518 {
4519 wdiStaParams->wdiSupportedRates.llaRates[i] =
4520 wdaStaParams->supportedRates.llaRates[i];
4521 }
4522 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4523 {
4524 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4525 wdaStaParams->supportedRates.aniLegacyRates[i];
4526 }
4527 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4528 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004529#ifdef WLAN_FEATURE_11AC
4530 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4531 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4532 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4533 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4534#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4536 {
4537 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4538 wdaStaParams->supportedRates.supportedMCSSet[i];
4539 }
4540 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4541 wdaStaParams->supportedRates.rxHighestDataRate;
4542
4543 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4544
4545 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4546
4547 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4548 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4549 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4550
4551 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4552 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4553 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4554 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004556#ifdef WLAN_FEATURE_11AC
4557 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4558 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004559 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304560 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4561 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4562 * must be set by default */
4563 if ( wdiStaParams->vhtTxMUBformeeCapable )
4564 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004565#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004566 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4567 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004568 return ;
4569}
Jeff Johnson295189b2012-06-20 16:38:30 -07004570/*
4571 * -------------------------------------------------------------------------
4572 * CFG update to WDI
4573 * -------------------------------------------------------------------------
4574 */
4575
4576 /*
4577 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4578 * Convert the WNI CFG ID to HAL CFG ID
4579 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004580static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004581{
4582 switch(wniCfgId)
4583 {
4584 case WNI_CFG_STA_ID:
4585 return QWLAN_HAL_CFG_STA_ID;
4586 case WNI_CFG_CURRENT_TX_ANTENNA:
4587 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4588 case WNI_CFG_CURRENT_RX_ANTENNA:
4589 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4590 case WNI_CFG_LOW_GAIN_OVERRIDE:
4591 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4592 case WNI_CFG_POWER_STATE_PER_CHAIN:
4593 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4594 case WNI_CFG_CAL_PERIOD:
4595 return QWLAN_HAL_CFG_CAL_PERIOD;
4596 case WNI_CFG_CAL_CONTROL:
4597 return QWLAN_HAL_CFG_CAL_CONTROL;
4598 case WNI_CFG_PROXIMITY:
4599 return QWLAN_HAL_CFG_PROXIMITY;
4600 case WNI_CFG_NETWORK_DENSITY:
4601 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4602 case WNI_CFG_MAX_MEDIUM_TIME:
4603 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4604 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4605 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4606 case WNI_CFG_RTS_THRESHOLD:
4607 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4608 case WNI_CFG_SHORT_RETRY_LIMIT:
4609 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4610 case WNI_CFG_LONG_RETRY_LIMIT:
4611 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4612 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4613 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4614 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4615 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4616 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4617 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4618 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4619 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4620 case WNI_CFG_FIXED_RATE:
4621 return QWLAN_HAL_CFG_FIXED_RATE;
4622 case WNI_CFG_RETRYRATE_POLICY:
4623 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4624 case WNI_CFG_RETRYRATE_SECONDARY:
4625 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4626 case WNI_CFG_RETRYRATE_TERTIARY:
4627 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4628 case WNI_CFG_FORCE_POLICY_PROTECTION:
4629 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4630 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4631 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4632 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4633 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4634 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4635 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4636 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4637 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4638 case WNI_CFG_MAX_BA_SESSIONS:
4639 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4640 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4641 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4642 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4643 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4644 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4645 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4646 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4647 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4648 case WNI_CFG_STATS_PERIOD:
4649 return QWLAN_HAL_CFG_STATS_PERIOD;
4650 case WNI_CFG_CFP_MAX_DURATION:
4651 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4652#if 0 /*This is not part of CFG*/
4653 case WNI_CFG_FRAME_TRANS_ENABLED:
4654 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4655#endif
4656 case WNI_CFG_DTIM_PERIOD:
4657 return QWLAN_HAL_CFG_DTIM_PERIOD;
4658 case WNI_CFG_EDCA_WME_ACBK:
4659 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4660 case WNI_CFG_EDCA_WME_ACBE:
4661 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4662 case WNI_CFG_EDCA_WME_ACVI:
4663 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4664 case WNI_CFG_EDCA_WME_ACVO:
4665 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4666#if 0
4667 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4668 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4669 case WNI_CFG_TELE_BCN_TRANS_LI:
4670 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4671 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4672 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4673 case WNI_CFG_TELE_BCN_MAX_LI:
4674 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4675 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4676 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4677#endif
4678 case WNI_CFG_ENABLE_CLOSE_LOOP:
4679 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004680 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4681 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004682 default:
4683 {
4684 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004685 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 wniCfgId);
4687 return VOS_STATUS_E_INVAL;
4688 }
4689 }
4690}
Jeff Johnson295189b2012-06-20 16:38:30 -07004691/*
4692 * FUNCTION: WDA_UpdateCfgCallback
4693 *
4694 */
4695void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4696{
4697 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4698 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4699 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004701 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 /*
4703 * currently there is no response message is expected between PE and
4704 * WDA, Failure return from WDI is a ASSERT condition
4705 */
4706 if(WDI_STATUS_SUCCESS != wdiStatus)
4707 {
4708 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004709 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004710 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4711 }
4712
4713 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4714 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4715 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 return ;
4717}
Jeff Johnson295189b2012-06-20 16:38:30 -07004718/*
4719 * FUNCTION: WDA_UpdateCfg
4720 *
4721 */
4722VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4723{
4724
4725 WDI_Status status = WDI_STATUS_SUCCESS ;
4726 tANI_U32 val =0;
4727 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4728 tHalCfg *configData;
4729 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4730 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004732 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004733 if (NULL == pMac )
4734 {
4735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004736 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 return VOS_STATUS_E_FAILURE;
4738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 if(WDA_START_STATE != pWDA->wdaState)
4740 {
4741 return VOS_STATUS_E_FAILURE;
4742 }
4743
4744 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4745 {
4746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004747 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004748 VOS_ASSERT(0);
4749 return VOS_STATUS_E_FAILURE;
4750 }
4751
4752 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4753 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004754 if(NULL == wdiCfgReqParam)
4755 {
4756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004758 VOS_ASSERT(0);
4759 return VOS_STATUS_E_NOMEM;
4760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4762 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 if(NULL == wdiCfgReqParam->pConfigBuffer)
4764 {
4765 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 vos_mem_free(wdiCfgReqParam);
4768 VOS_ASSERT(0);
4769 return VOS_STATUS_E_NOMEM;
4770 }
4771
4772 /*convert the WNI CFG Id to HAL CFG Id*/
4773 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4774 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4775
4776 /*TODO: revisit this for handling string parameters */
4777 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4778 &val) != eSIR_SUCCESS)
4779 {
4780 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004781 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004782 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4783 vos_mem_free(wdiCfgReqParam);
4784 return eSIR_FAILURE;
4785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4787 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4788 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4789 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4790 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4791
4792 /* store Params pass it to WDI */
4793 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004794#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4795 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4796 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 if(IS_WDI_STATUS_FAILURE(status))
4798 {
4799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4800 "Failure in Update CFG WDI API, free all the memory " );
4801 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4802 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4803 pWDA->wdaWdiCfgApiMsgParam = NULL;
4804 /* Failure is not expected */
4805 VOS_ASSERT(0) ;
4806 }
4807#else
4808 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4809 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4810 pWDA->wdaWdiCfgApiMsgParam = NULL;
4811#endif
4812 return CONVERT_WDI2VOS_STATUS(status) ;
4813}
4814
Jeff Johnson295189b2012-06-20 16:38:30 -07004815VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4816 v_U8_t *pDefaultKeyId,
4817 v_U8_t *pNumKeys,
4818 WDI_KeysType *pWdiKeys )
4819{
4820 v_U32_t i, j, defKeyId = 0;
4821 v_U32_t val = SIR_MAC_KEY_LENGTH;
4822 VOS_STATUS status = WDI_STATUS_SUCCESS;
4823 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 if (NULL == pMac )
4825 {
4826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004827 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 return VOS_STATUS_E_FAILURE;
4829 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004830 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4831 &defKeyId ))
4832 {
4833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4834 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4835 }
4836
4837 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004838 /* Need to extract ALL of the configured WEP Keys */
4839 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4840 {
4841 val = SIR_MAC_KEY_LENGTH;
4842 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4843 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4844 pWdiKeys[j].key,
4845 &val ))
4846 {
4847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004848 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 }
4850 else
4851 {
4852 pWdiKeys[j].keyId = (tANI_U8) i;
4853 /*
4854 * Actually, a DC (Don't Care) because
4855 * this is determined (and set) by PE/MLME
4856 */
4857 pWdiKeys[j].unicast = 0;
4858 /*
4859 * Another DC (Don't Care)
4860 */
4861 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4862 /* Another DC (Don't Care). Unused for WEP */
4863 pWdiKeys[j].paeRole = 0;
4864 /* Determined from wlan_cfgGetStr() above.*/
4865 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004866 j++;
4867 *pNumKeys = (tANI_U8) j;
4868 }
4869 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 return status;
4871}
Jeff Johnson295189b2012-06-20 16:38:30 -07004872/*
4873 * FUNCTION: WDA_SetBssKeyReqCallback
4874 * send SET BSS key RSP back to PE
4875 */
4876void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4877{
4878 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4879 tWDA_CbContext *pWDA;
4880 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004882 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 if(NULL == pWdaParams)
4884 {
4885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004886 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 VOS_ASSERT(0) ;
4888 return ;
4889 }
4890 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4891 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304892 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4893 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4895 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004896 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004898 return ;
4899}
Jeff Johnson295189b2012-06-20 16:38:30 -07004900/*
4901 * FUNCTION: WDA_ProcessSetBssKeyReq
4902 * Request to WDI for programming the BSS key( key for
4903 * broadcast/multicast frames Encryption)
4904 */
4905VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4906 tSetBssKeyParams *setBssKeyParams )
4907{
4908 WDI_Status status = WDI_STATUS_SUCCESS ;
4909 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4910 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4911 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4912 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004915 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 if(NULL == wdiSetBssKeyParam)
4917 {
4918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004919 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004920 VOS_ASSERT(0);
4921 return VOS_STATUS_E_NOMEM;
4922 }
4923 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4924 if(NULL == pWdaParams)
4925 {
4926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 VOS_ASSERT(0);
4929 vos_mem_free(wdiSetBssKeyParam);
4930 return VOS_STATUS_E_NOMEM;
4931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 /* copy set BSS params to WDI structure */
4934 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4935 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4936 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004937 if(setBssKeyParams->encType != eSIR_ED_NONE)
4938 {
4939 if( setBssKeyParams->numKeys == 0 &&
4940 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4941 setBssKeyParams->encType == eSIR_ED_WEP104))
4942 {
4943 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4945 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4946 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4947 }
4948 else
4949 {
4950 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4951 {
4952 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4953 setBssKeyParams->key[keyIndex].keyId;
4954 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4955 setBssKeyParams->key[keyIndex].unicast;
4956 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4957 setBssKeyParams->key[keyIndex].keyDirection;
4958 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4959 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4960 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4961 setBssKeyParams->key[keyIndex].paeRole;
4962 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4963 setBssKeyParams->key[keyIndex].keyLength;
4964 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4965 setBssKeyParams->key[keyIndex].key,
4966 SIR_MAC_MAX_KEY_LENGTH);
4967 }
4968 }
4969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4971 setBssKeyParams->singleTidRc;
4972 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 /* Store set key pointer, as this will be used for response */
4974 /* store Params pass it to WDI */
4975 pWdaParams->pWdaContext = pWDA;
4976 pWdaParams->wdaMsgParam = setBssKeyParams;
4977 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4979 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4980
4981 if(IS_WDI_STATUS_FAILURE(status))
4982 {
4983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4984 "Failure in Set BSS Key Req WDI API, free all the memory " );
4985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4986 vos_mem_free(pWdaParams) ;
4987 setBssKeyParams->status = eSIR_FAILURE ;
4988 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 return CONVERT_WDI2VOS_STATUS(status) ;
4991}
Jeff Johnson295189b2012-06-20 16:38:30 -07004992/*
4993 * FUNCTION: WDA_RemoveBssKeyReqCallback
4994 * send SET BSS key RSP back to PE
4995 */
4996void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4997{
4998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4999 tWDA_CbContext *pWDA;
5000 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005002 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 if(NULL == pWdaParams)
5004 {
5005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005006 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_ASSERT(0) ;
5008 return ;
5009 }
5010 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5011 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5013 vos_mem_free(pWdaParams) ;
5014
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005015 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005017 return ;
5018}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305019
5020/*
5021 * FUNCTION: WDA_SpoofMacAddrRspCallback
5022 * recieves spoof mac addr response from FW
5023 */
5024void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5025{
5026 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5027 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305028
Siddharth Bhal171788a2014-09-29 21:02:40 +05305029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5030 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305031
Siddharth Bhal171788a2014-09-29 21:02:40 +05305032 if(NULL == pWdaParams)
5033 {
5034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5035 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305036 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305037 return ;
5038 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305040
Siddharth Bhal029d6732014-10-09 21:31:23 +05305041 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305043 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305044 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305045 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5046 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305047
Siddharth Bhal171788a2014-09-29 21:02:40 +05305048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305049 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305050 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305051
5052 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305053}
5054
Jeff Johnson295189b2012-06-20 16:38:30 -07005055/*
5056 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5057 * Request to WDI to remove the BSS key( key for broadcast/multicast
5058 * frames Encryption)
5059 */
5060VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5061 tRemoveBssKeyParams *removeBssKeyParams )
5062{
5063 WDI_Status status = WDI_STATUS_SUCCESS ;
5064 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5065 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5066 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5067 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005069 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 if(NULL == wdiRemoveBssKeyParam)
5071 {
5072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 VOS_ASSERT(0);
5075 return VOS_STATUS_E_NOMEM;
5076 }
5077 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5078 if(NULL == pWdaParams)
5079 {
5080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 VOS_ASSERT(0);
5083 vos_mem_free(wdiRemoveBssKeyParam);
5084 return VOS_STATUS_E_NOMEM;
5085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005086 /* copy Remove BSS key params to WDI structure*/
5087 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5088 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5089 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5090 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5091 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 /* Store remove key pointer, as this will be used for response */
5093 /* store Params pass it to WDI */
5094 pWdaParams->pWdaContext = pWDA;
5095 pWdaParams->wdaMsgParam = removeBssKeyParams;
5096 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5098 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 if(IS_WDI_STATUS_FAILURE(status))
5100 {
5101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5102 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5104 vos_mem_free(pWdaParams) ;
5105 removeBssKeyParams->status = eSIR_FAILURE ;
5106 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5107 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005108 return CONVERT_WDI2VOS_STATUS(status) ;
5109}
Jeff Johnson295189b2012-06-20 16:38:30 -07005110/*
5111 * FUNCTION: WDA_SetBssKeyReqCallback
5112 * send SET BSS key RSP back to PE
5113 */
5114void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5115{
5116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5117 tWDA_CbContext *pWDA;
5118 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005120 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 if(NULL == pWdaParams)
5122 {
5123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005124 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005125 VOS_ASSERT(0) ;
5126 return ;
5127 }
5128 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5129 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305130 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5131 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5133 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005134 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 return ;
5137}
Jeff Johnson295189b2012-06-20 16:38:30 -07005138/*
5139 * FUNCTION: WDA_ProcessSetStaKeyReq
5140 * Request to WDI for programming the STA key( key for Unicast frames
5141 * Encryption)
5142 */
5143VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5144 tSetStaKeyParams *setStaKeyParams )
5145{
5146 WDI_Status status = WDI_STATUS_SUCCESS ;
5147 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5148 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5149 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5150 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005153 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 if(NULL == wdiSetStaKeyParam)
5155 {
5156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 VOS_ASSERT(0);
5159 return VOS_STATUS_E_NOMEM;
5160 }
5161 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5162 if(NULL == pWdaParams)
5163 {
5164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 VOS_ASSERT(0);
5167 vos_mem_free(wdiSetStaKeyParam);
5168 return VOS_STATUS_E_NOMEM;
5169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005171 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 /* copy set STA key params to WDI structure */
5173 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5174 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5175 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5176 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005177 if(setStaKeyParams->encType != eSIR_ED_NONE)
5178 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005179 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5181 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5182 {
5183 WDA_GetWepKeysFromCfg( pWDA,
5184 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5185 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5186 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5187 }
5188 else
5189 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005190 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5191 keyIndex++)
5192 {
5193 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5194 setStaKeyParams->key[keyIndex].keyId;
5195 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5196 setStaKeyParams->key[keyIndex].unicast;
5197 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5198 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5200 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5201 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5202 setStaKeyParams->key[keyIndex].paeRole;
5203 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5204 setStaKeyParams->key[keyIndex].keyLength;
5205 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5206 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5207 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5208 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5209 {
5210 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5211 }
5212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005213 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5214 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 }
5216 }
5217 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5218 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 /* Store set key pointer, as this will be used for response */
5220 /* store Params pass it to WDI */
5221 pWdaParams->pWdaContext = pWDA;
5222 pWdaParams->wdaMsgParam = setStaKeyParams;
5223 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005224 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5225 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 if(IS_WDI_STATUS_FAILURE(status))
5227 {
5228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5229 "Failure in set STA Key Req WDI API, free all the memory " );
5230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5231 vos_mem_free(pWdaParams) ;
5232 setStaKeyParams->status = eSIR_FAILURE ;
5233 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 return CONVERT_WDI2VOS_STATUS(status) ;
5236}
Jeff Johnson295189b2012-06-20 16:38:30 -07005237/*
5238 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5239 * send SET Bcast STA key RSP back to PE
5240 */
5241void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5242{
5243 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5244 tWDA_CbContext *pWDA;
5245 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005247 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 if(NULL == pWdaParams)
5249 {
5250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005251 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 VOS_ASSERT(0) ;
5253 return ;
5254 }
5255 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5256 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5258 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005259 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005261 return ;
5262}
5263
Jeff Johnson295189b2012-06-20 16:38:30 -07005264/*
5265 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5266 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5267 * Encryption)
5268 */
5269VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5270 tSetStaKeyParams *setStaKeyParams )
5271{
5272 WDI_Status status = WDI_STATUS_SUCCESS ;
5273 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5274 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5275 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5276 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005279 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005280 if(NULL == wdiSetStaKeyParam)
5281 {
5282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005284 VOS_ASSERT(0);
5285 return VOS_STATUS_E_NOMEM;
5286 }
5287 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5288 if(NULL == pWdaParams)
5289 {
5290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 VOS_ASSERT(0);
5293 vos_mem_free(wdiSetStaKeyParam);
5294 return VOS_STATUS_E_NOMEM;
5295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005298 /* copy set STA key params to WDI structure */
5299 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5300 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5301 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5302 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 if(setStaKeyParams->encType != eSIR_ED_NONE)
5304 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5306 keyIndex++)
5307 {
5308 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5309 setStaKeyParams->key[keyIndex].keyId;
5310 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5311 setStaKeyParams->key[keyIndex].unicast;
5312 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5313 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005314 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5315 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5316 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5317 setStaKeyParams->key[keyIndex].paeRole;
5318 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5319 setStaKeyParams->key[keyIndex].keyLength;
5320 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5321 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5324 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 }
5326 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 /* Store set key pointer, as this will be used for response */
5328 /* store Params pass it to WDI */
5329 pWdaParams->pWdaContext = pWDA;
5330 pWdaParams->wdaMsgParam = setStaKeyParams;
5331 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5333 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 if(IS_WDI_STATUS_FAILURE(status))
5335 {
5336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5337 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5339 vos_mem_free(pWdaParams) ;
5340 setStaKeyParams->status = eSIR_FAILURE ;
5341 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 return CONVERT_WDI2VOS_STATUS(status) ;
5344}
Jeff Johnson295189b2012-06-20 16:38:30 -07005345/*
5346 * FUNCTION: WDA_RemoveStaKeyReqCallback
5347 * send SET BSS key RSP back to PE
5348 */
5349void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5350{
5351 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5352 tWDA_CbContext *pWDA;
5353 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005355 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 if(NULL == pWdaParams)
5357 {
5358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005359 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 VOS_ASSERT(0) ;
5361 return ;
5362 }
5363 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5364 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5366 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005367 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 return ;
5370}
5371
Jeff Johnson295189b2012-06-20 16:38:30 -07005372/*
5373 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5374 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5375 */
5376VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5377 tRemoveStaKeyParams *removeStaKeyParams )
5378{
5379 WDI_Status status = WDI_STATUS_SUCCESS ;
5380 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5381 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5382 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5383 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005385 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 if(NULL == wdiRemoveStaKeyParam)
5387 {
5388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 VOS_ASSERT(0);
5391 return VOS_STATUS_E_NOMEM;
5392 }
5393 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5394 if(NULL == pWdaParams)
5395 {
5396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005397 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005398 VOS_ASSERT(0);
5399 vos_mem_free(wdiRemoveStaKeyParam);
5400 return VOS_STATUS_E_NOMEM;
5401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 /* copy remove STA key params to WDI structure*/
5403 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5404 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5405 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5406 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5407 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 /* Store remove key pointer, as this will be used for response */
5409 /* store Params pass it to WDI */
5410 pWdaParams->pWdaContext = pWDA;
5411 pWdaParams->wdaMsgParam = removeStaKeyParams;
5412 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5414 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 if(IS_WDI_STATUS_FAILURE(status))
5416 {
5417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5418 "Failure in remove STA Key Req WDI API, free all the memory " );
5419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5420 vos_mem_free(pWdaParams) ;
5421 removeStaKeyParams->status = eSIR_FAILURE ;
5422 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5423 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005424 return CONVERT_WDI2VOS_STATUS(status) ;
5425}
Jeff Johnson295189b2012-06-20 16:38:30 -07005426/*
5427 * FUNCTION: WDA_IsHandleSetLinkStateReq
5428 * Update the WDA state and return the status to handle this message or not
5429 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005430WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5431 tWDA_CbContext *pWDA,
5432 tLinkStateParams *linkStateParams)
5433{
5434 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 switch(linkStateParams->state)
5436 {
5437 case eSIR_LINK_PREASSOC_STATE:
5438 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5439 /*
5440 * set the WDA state to PRE ASSOC
5441 * copy the BSSID into pWDA to use it in join request and return,
5442 * No need to handle these messages.
5443 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005444 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5445 {
5446 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005448 }
5449 else
5450 {
5451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005452 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005453 VOS_ASSERT(0);
5454 }
5455
5456 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5457 {
5458 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005460 }
5461 else
5462 {
5463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005464 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005465 VOS_ASSERT(0);
5466 }
5467
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5469 *channel and after ) so reset the WDA state to ready when the second
5470 * time UMAC issue the link state with PREASSOC
5471 */
5472 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5473 {
5474 /* RESET WDA state back to WDA_READY_STATE */
5475 pWDA->wdaState = WDA_READY_STATE;
5476 }
5477 else
5478 {
5479 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5480 }
5481 //populate linkState info in WDACbCtxt
5482 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005484 default:
5485 if(pWDA->wdaState != WDA_READY_STATE)
5486 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005487 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5488 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5489 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5490 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5491 *the ASSERT in WDA_Stop during module unload.*/
5492 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5493 {
5494 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005495 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005496 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005497 else
5498 {
5499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005500 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005501 status = WDA_IGNORE_SET_LINK_STATE;
5502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 }
5504 break;
5505 }
5506
5507 return status;
5508}
Jeff Johnson295189b2012-06-20 16:38:30 -07005509/*
5510 * FUNCTION: WDA_SetLinkStateCallback
5511 * call back function for set link state from WDI
5512 */
5513void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5514{
5515 tWDA_CbContext *pWDA;
5516 tLinkStateParams *linkStateParams;
5517 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005519 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 if(NULL == pWdaParams)
5521 {
5522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005523 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 VOS_ASSERT(0) ;
5525 return ;
5526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005527 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 /*
5530 * In STA mode start the BA activity check timer after association
5531 * and in AP mode start BA activity check timer after BSS start */
5532 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5533 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005534 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5535 ((status == WDI_STATUS_SUCCESS) &&
5536 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 {
5538 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 /*
5542 * No respone required for WDA_SET_LINK_STATE so free the request
5543 * param here
5544 */
5545 if( pWdaParams != NULL )
5546 {
5547 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5548 {
5549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5550 }
5551 vos_mem_free(pWdaParams);
5552 }
5553 return ;
5554}
Jeff Johnson295189b2012-06-20 16:38:30 -07005555/*
5556 * FUNCTION: WDA_ProcessSetLinkState
5557 * Request to WDI to set the link status.
5558 */
5559VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5560 tLinkStateParams *linkStateParams)
5561{
5562 WDI_Status status = WDI_STATUS_SUCCESS ;
5563 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5564 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5565 sizeof(WDI_SetLinkReqParamsType)) ;
5566 tWDA_ReqParams *pWdaParams ;
5567 tpAniSirGlobal pMac;
5568 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5569
5570 if(NULL == pMac)
5571 {
5572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005573 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005575 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 return VOS_STATUS_E_FAILURE;
5577 }
5578
5579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005580 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 if(NULL == wdiSetLinkStateParam)
5582 {
5583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005584 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005585 VOS_ASSERT(0);
5586 return VOS_STATUS_E_NOMEM;
5587 }
5588 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5589 if(NULL == pWdaParams)
5590 {
5591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 VOS_ASSERT(0);
5594 vos_mem_free(wdiSetLinkStateParam);
5595 return VOS_STATUS_E_NOMEM;
5596 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 if(WDA_IGNORE_SET_LINK_STATE ==
5598 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5599 {
5600 status = WDI_STATUS_E_FAILURE;
5601 }
5602 else
5603 {
5604 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5605 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5607 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5609 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 pWdaParams->pWdaContext = pWDA;
5611 /* Store remove key pointer, as this will be used for response */
5612 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 /* store Params pass it to WDI */
5614 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5615 /* Stop Timer only other than GO role and concurrent session */
5616 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005617 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5619 {
5620 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5621 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5623 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005624 if(IS_WDI_STATUS_FAILURE(status))
5625 {
5626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5627 "Failure in set link state Req WDI API, free all the memory " );
5628 }
5629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 if(IS_WDI_STATUS_FAILURE(status))
5631 {
5632 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005633 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 vos_mem_free(pWdaParams);
5635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005636 return CONVERT_WDI2VOS_STATUS(status) ;
5637}
Jeff Johnson295189b2012-06-20 16:38:30 -07005638/*
5639 * FUNCTION: WDA_GetStatsReqParamsCallback
5640 * send the response to PE with Stats received from WDI
5641 */
5642void WDA_GetStatsReqParamsCallback(
5643 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5644 void* pUserData)
5645{
5646 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5647 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5648
5649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005650 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 pGetPEStatsRspParams =
5652 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5653 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5654
5655 if(NULL == pGetPEStatsRspParams)
5656 {
5657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 VOS_ASSERT(0);
5660 return;
5661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5663 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5664 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5665 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005666
5667 //Fill the Session Id Properly in PE
5668 pGetPEStatsRspParams->sessionId = 0;
5669 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005670 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5672 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 vos_mem_copy( pGetPEStatsRspParams + 1,
5674 wdiGetStatsRsp + 1,
5675 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005676 /* send response to UMAC*/
5677 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5678
5679 return;
5680}
5681
Jeff Johnson295189b2012-06-20 16:38:30 -07005682/*
5683 * FUNCTION: WDA_ProcessGetStatsReq
5684 * Request to WDI to get the statistics
5685 */
5686VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5687 tAniGetPEStatsReq *pGetStatsParams)
5688{
5689 WDI_Status status = WDI_STATUS_SUCCESS ;
5690 WDI_GetStatsReqParamsType wdiGetStatsParam;
5691 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005693 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005694 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5695 pGetStatsParams->staId;
5696 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5697 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005698 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 status = WDI_GetStatsReq(&wdiGetStatsParam,
5700 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005701 if(IS_WDI_STATUS_FAILURE(status))
5702 {
5703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5704 "Failure in Get Stats Req WDI API, free all the memory " );
5705 pGetPEStatsRspParams =
5706 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5707 if(NULL == pGetPEStatsRspParams)
5708 {
5709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005710 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005711 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005712 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 return VOS_STATUS_E_NOMEM;
5714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005715 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5716 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5717 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5718 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5719 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5720 (void *)pGetPEStatsRspParams, 0) ;
5721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005722 /* Free the request message */
5723 vos_mem_free(pGetStatsParams);
5724 return CONVERT_WDI2VOS_STATUS(status);
5725}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005726
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005727#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005728/*
5729 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5730 * send the response to PE with roam Rssi received from WDI
5731 */
5732void WDA_GetRoamRssiReqParamsCallback(
5733 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5734 void* pUserData)
5735{
5736 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5737 tWDA_CbContext *pWDA = NULL;
5738 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5739 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5741 "<------ %s " ,__func__);
5742 if(NULL == pWdaParams)
5743 {
5744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5745 "%s: pWdaParams received NULL", __func__);
5746 VOS_ASSERT(0) ;
5747 return ;
5748 }
5749 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5750 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5751
5752 if(NULL == pGetRoamRssiReqParams)
5753 {
5754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5755 "%s: pGetRoamRssiReqParams received NULL", __func__);
5756 VOS_ASSERT(0);
5757 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5758 vos_mem_free(pWdaParams);
5759 return ;
5760 }
5761 pGetRoamRssiRspParams =
5762 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5763
5764 if(NULL == pGetRoamRssiRspParams)
5765 {
5766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5767 "%s: VOS MEM Alloc Failure", __func__);
5768 VOS_ASSERT(0);
5769 return;
5770 }
5771 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5772 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005773 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005774 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5775 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5776
5777 /* Assign get roam rssi req (backup) in to the response */
5778 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5779
5780 /* free WDI command buffer */
5781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5782 vos_mem_free(pWdaParams) ;
5783
5784 /* send response to UMAC*/
5785 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5786
5787 return;
5788}
5789
5790
5791
5792/*
5793 * FUNCTION: WDA_ProcessGetRoamRssiReq
5794 * Request to WDI to get the statistics
5795 */
5796VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5797 tAniGetRssiReq *pGetRoamRssiParams)
5798{
5799 WDI_Status status = WDI_STATUS_SUCCESS ;
5800 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5801 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5802 tWDA_ReqParams *pWdaParams = NULL;
5803
5804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5805 "------> %s " ,__func__);
5806 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5807 pGetRoamRssiParams->staId;
5808 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5809
5810 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5811 if(NULL == pWdaParams)
5812 {
5813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5814 "%s: VOS MEM Alloc Failure", __func__);
5815 VOS_ASSERT(0);
5816 return VOS_STATUS_E_NOMEM;
5817 }
5818
5819 /* Store Init Req pointer, as this will be used for response */
5820 pWdaParams->pWdaContext = pWDA;
5821
5822 /* Take Get roam Rssi req backup as it stores the callback to be called after
5823 receiving the response */
5824 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5825 pWdaParams->wdaWdiApiMsgParam = NULL;
5826
5827 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5828 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5829 if(IS_WDI_STATUS_FAILURE(status))
5830 {
5831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5832 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5833 pGetRoamRssiRspParams =
5834 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5835 if(NULL == pGetRoamRssiRspParams)
5836 {
5837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5838 "%s: VOS MEM Alloc Failure", __func__);
5839 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305840 vos_mem_free(pGetRoamRssiParams);
5841 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005842 return VOS_STATUS_E_NOMEM;
5843 }
5844 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5845 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5846 pGetRoamRssiRspParams->rssi = 0;
5847 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5848 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5849 (void *)pGetRoamRssiRspParams, 0) ;
5850 }
5851 return CONVERT_WDI2VOS_STATUS(status);
5852}
5853#endif
5854
5855
Jeff Johnson295189b2012-06-20 16:38:30 -07005856/*
5857 * FUNCTION: WDA_UpdateEDCAParamCallback
5858 * call back function for Update EDCA params from WDI
5859 */
5860void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5861{
5862 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5863 tEdcaParams *pEdcaParams;
5864
5865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005866 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005867 if(NULL == pWdaParams)
5868 {
5869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005870 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 VOS_ASSERT(0) ;
5872 return ;
5873 }
5874 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5876 vos_mem_free(pWdaParams);
5877 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 return ;
5879}
Jeff Johnson295189b2012-06-20 16:38:30 -07005880/*
5881 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5882 * Request to WDI to Update the EDCA params.
5883 */
5884VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5885 tEdcaParams *pEdcaParams)
5886{
5887 WDI_Status status = WDI_STATUS_SUCCESS ;
5888 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5889 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5890 sizeof(WDI_UpdateEDCAParamsType)) ;
5891 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005893 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 if(NULL == wdiEdcaParam)
5895 {
5896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005898 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005899 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 return VOS_STATUS_E_NOMEM;
5901 }
5902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5903 if(NULL == pWdaParams)
5904 {
5905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 VOS_ASSERT(0);
5908 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005909 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005910 return VOS_STATUS_E_NOMEM;
5911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005913 /*
5914 Since firmware is not using highperformance flag, we have removed
5915 this flag from wdiEDCAInfo structure to match sizeof the structure
5916 between host and firmware.In future if we are planning to use
5917 highperformance flag then Please define this flag in wdiEDCAInfo
5918 structure, update it here and send it to firmware. i.e.
5919 Following is the original line which we removed as part of the fix
5920 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5921 pEdcaParams->highPerformance;
5922 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5924 &pEdcaParams->acbe);
5925 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5926 &pEdcaParams->acbk);
5927 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5928 &pEdcaParams->acvi);
5929 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5930 &pEdcaParams->acvo);
5931 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 pWdaParams->pWdaContext = pWDA;
5933 /* Store remove key pointer, as this will be used for response */
5934 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005935 /* store Params pass it to WDI */
5936 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5938 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 if(IS_WDI_STATUS_FAILURE(status))
5940 {
5941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5942 "Failure in Update EDCA Params WDI API, free all the memory " );
5943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5944 vos_mem_free(pWdaParams);
5945 vos_mem_free(pEdcaParams);
5946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 return CONVERT_WDI2VOS_STATUS(status) ;
5948}
Jeff Johnson295189b2012-06-20 16:38:30 -07005949/*
5950 * FUNCTION: WDA_AddBAReqCallback
5951 * send ADD BA RSP back to PE
5952 */
5953void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5954 void* pUserData)
5955{
5956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5957 tWDA_CbContext *pWDA;
5958 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005960 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 if(NULL == pWdaParams)
5962 {
5963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005964 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 VOS_ASSERT(0) ;
5966 return ;
5967 }
5968 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5969 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5971 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005972 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005973 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005974 return ;
5975}
5976
Jeff Johnson295189b2012-06-20 16:38:30 -07005977/*
5978 * FUNCTION: WDA_ProcessAddBAReq
5979 * Request to WDI to Update the ADDBA REQ params.
5980 */
5981VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5982 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5983{
Jeff Johnson43971f52012-07-17 12:26:56 -07005984 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5986 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5987 sizeof(WDI_AddBAReqParamsType)) ;
5988 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005990 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 if(NULL == wdiAddBAReqParam)
5992 {
5993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005995 VOS_ASSERT(0);
5996 return VOS_STATUS_E_NOMEM;
5997 }
5998 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5999 if(NULL == pWdaParams)
6000 {
6001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006002 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 VOS_ASSERT(0);
6004 vos_mem_free(wdiAddBAReqParam);
6005 return VOS_STATUS_E_NOMEM;
6006 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 do
6008 {
6009 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 wdiAddBaInfo->ucSTAIdx = staIdx ;
6011 wdiAddBaInfo->ucBaSessionID = baSessionID ;
6012 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 } while(0) ;
6014 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 pWdaParams->pWdaContext = pWDA;
6016 /* store Params pass it to WDI */
6017 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6018 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006019 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6020 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006021
Jeff Johnson43971f52012-07-17 12:26:56 -07006022 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 {
6024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006025 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6026 status = CONVERT_WDI2VOS_STATUS(wstatus);
6027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 vos_mem_free(pWdaParams);
6029 pAddBAReqParams->status = eSIR_FAILURE;
6030 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6031 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006032 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006033}
Jeff Johnson295189b2012-06-20 16:38:30 -07006034/*
6035 * FUNCTION: WDA_AddBASessionReqCallback
6036 * send ADD BA SESSION RSP back to PE/(or TL)
6037 */
6038void WDA_AddBASessionReqCallback(
6039 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6040{
6041 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6043 tWDA_CbContext *pWDA;
6044 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006046 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 if(NULL == pWdaParams)
6048 {
6049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006050 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 VOS_ASSERT(0) ;
6052 return ;
6053 }
6054 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6055 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 if( NULL == pAddBAReqParams )
6057 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006059 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6062 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006063 return ;
6064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6066 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006067 /*
6068 * if WDA in update TL state, update TL with BA session parama and send
6069 * another request to HAL(/WDI) (ADD_BA_REQ)
6070 */
6071
6072 if((VOS_STATUS_SUCCESS ==
6073 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6074 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6075 {
6076 /* Update TL with BA info received from HAL/WDI */
6077 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6078 wdiAddBaSession->usBaSessionID,
6079 wdiAddBaSession->ucSTAIdx,
6080 wdiAddBaSession->ucBaTID,
6081 wdiAddBaSession->ucBaBufferSize,
6082 wdiAddBaSession->ucWinSize,
6083 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006084 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6085 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6086 }
6087 else
6088 {
6089 pAddBAReqParams->status =
6090 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6091
6092 /* Setting Flag to indicate that Set BA is success */
6093 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6094 {
6095 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6096 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6097 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 /*Reset the WDA state to READY */
6102 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 return ;
6104}
6105
Jeff Johnson295189b2012-06-20 16:38:30 -07006106/*
6107 * FUNCTION: WDA_ProcessAddBASessionReq
6108 * Request to WDI to Update the ADDBA REQ params.
6109 */
6110VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6111 tAddBAParams *pAddBAReqParams)
6112{
6113 WDI_Status status = WDI_STATUS_SUCCESS ;
6114 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6115 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6116 sizeof(WDI_AddBASessionReqParamsType)) ;
6117 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006118 WLANTL_STAStateType tlSTAState = 0;
6119
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006121 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 if(NULL == wdiAddBASessionReqParam)
6123 {
6124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006126 VOS_ASSERT(0);
6127 return VOS_STATUS_E_NOMEM;
6128 }
6129 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6130 if(NULL == pWdaParams)
6131 {
6132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006133 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006134 VOS_ASSERT(0);
6135 vos_mem_free(wdiAddBASessionReqParam);
6136 return VOS_STATUS_E_NOMEM;
6137 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 /*
6139 * Populate ADD BA parameters and pass these paarmeters to WDI.
6140 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6141 * the state to track if these is BA recipient case or BA initiator
6142 * case.
6143 */
6144 do
6145 {
6146 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6147 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6148 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6149 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6150 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6151 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6152 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6155 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6156 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6157 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6158 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 /* check the BA direction and update state accordingly */
6160 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6161 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6162 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6163
6164 }while(0) ;
6165 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006166 pWdaParams->pWdaContext = pWDA;
6167 /* Store ADD BA pointer, as this will be used for response */
6168 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6169 /* store Params pass it to WDI */
6170 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006171
6172 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6173 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6174 */
6175 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6176 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6177 {
6178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006179 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006180 status = WDI_STATUS_E_NOT_ALLOWED;
6181 pAddBAReqParams->status =
6182 CONVERT_WDI2SIR_STATUS(status) ;
6183 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6184 /*Reset the WDA state to READY */
6185 pWDA->wdaState = WDA_READY_STATE;
6186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6187 vos_mem_free(pWdaParams);
6188
6189 return CONVERT_WDI2VOS_STATUS(status) ;
6190 }
6191
Jeff Johnson295189b2012-06-20 16:38:30 -07006192 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6193 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 if(IS_WDI_STATUS_FAILURE(status))
6195 {
6196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006197 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006199 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006200 pAddBAReqParams->status =
6201 CONVERT_WDI2SIR_STATUS(status) ;
6202 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006203 /*Reset the WDA state to READY */
6204 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006206 vos_mem_free(pWdaParams);
6207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006208 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006209}
Jeff Johnson295189b2012-06-20 16:38:30 -07006210/*
6211 * FUNCTION: WDA_DelBANotifyTL
6212 * send DEL BA IND to TL
6213 */
6214void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6215 tDelBAParams *pDelBAReqParams)
6216{
6217 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6218 //tSirMsgQ msg;
6219 vos_msg_t vosMsg;
6220 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 if(NULL == pDelBAInd)
6222 {
6223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006224 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006225 VOS_ASSERT(0) ;
6226 return;
6227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6229 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6230 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6231 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006232
Jeff Johnson295189b2012-06-20 16:38:30 -07006233
6234 vosMsg.type = WDA_DELETEBA_IND;
6235 vosMsg.bodyptr = pDelBAInd;
6236 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6237 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6238 {
6239 vosStatus = VOS_STATUS_E_BADMSG;
6240 }
6241}
Jeff Johnson295189b2012-06-20 16:38:30 -07006242/*
6243 * FUNCTION: WDA_DelBAReqCallback
6244 * send DEL BA RSP back to PE
6245 */
6246void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6247{
6248 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6249 tWDA_CbContext *pWDA;
6250 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006252 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 if(NULL == pWdaParams)
6254 {
6255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006256 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 VOS_ASSERT(0) ;
6258 return ;
6259 }
6260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6261 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 /* Notify TL about DEL BA in case of recipinet */
6263 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6264 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6265 {
6266 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6267 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006268 /*
6269 * No respone required for WDA_DELBA_IND so just free the request
6270 * param here
6271 */
6272 vos_mem_free(pDelBAReqParams);
6273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6274 vos_mem_free(pWdaParams);
6275 return ;
6276}
6277
Jeff Johnson295189b2012-06-20 16:38:30 -07006278/*
6279 * FUNCTION: WDA_ProcessDelBAReq
6280 * Request to WDI to Update the DELBA REQ params.
6281 */
6282VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6283 tDelBAParams *pDelBAReqParams)
6284{
6285 WDI_Status status = WDI_STATUS_SUCCESS ;
6286 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6287 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6288 sizeof(WDI_DelBAReqParamsType)) ;
6289 tWDA_ReqParams *pWdaParams ;
6290 tANI_U16 staIdx = 0;
6291 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006293 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 if(NULL == wdiDelBAReqParam)
6295 {
6296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 VOS_ASSERT(0);
6299 return VOS_STATUS_E_NOMEM;
6300 }
6301 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6302 if(NULL == pWdaParams)
6303 {
6304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 VOS_ASSERT(0);
6307 vos_mem_free(wdiDelBAReqParam);
6308 return VOS_STATUS_E_NOMEM;
6309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6311 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6312 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6313 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 pWdaParams->pWdaContext = pWDA;
6315 /* Store DEL BA pointer, as this will be used for response */
6316 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 /* store Params pass it to WDI */
6318 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006319 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6320 * maintained in WDA, so that WDA can retry for another BA session
6321 */
6322 staIdx = pDelBAReqParams->staIdx;
6323 tid = pDelBAReqParams->baTID;
6324 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006325 status = WDI_DelBAReq(wdiDelBAReqParam,
6326 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 if(IS_WDI_STATUS_FAILURE(status))
6328 {
6329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6330 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6332 vos_mem_free(pWdaParams->wdaMsgParam);
6333 vos_mem_free(pWdaParams);
6334 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006336}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006337
6338/*
6339 * FUNCTION: WDA_UpdateChReqCallback
6340 *
6341 */
6342void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6343{
Siddharth Bhala006c122014-05-03 12:13:27 +05306344 tWDA_ReqParams *pWdaParams;
6345 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6346 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6347 WDI_UpdateChannelReqinfoType *pChanInfoType;
6348 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006349
6350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6351 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306352 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006353 {
6354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306355 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006356 VOS_ASSERT(0);
6357 return;
6358 }
6359
Siddharth Bhala006c122014-05-03 12:13:27 +05306360 pWdaParams = (tWDA_ReqParams *)pUserData;
6361 pwdiUpdateChReqParam =
6362 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6363 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6364 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6365 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006366 /*
6367 * currently there is no response message is expected between PE and
6368 * WDA, Failure return from WDI is a ASSERT condition
6369 */
6370 vos_mem_free(pChanInfoType);
6371 vos_mem_free(pChanList);
6372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6373 vos_mem_free(pWdaParams);
6374
6375 return;
6376}
6377
6378/*
6379 * FUNCTION: WDA_ProcessUpdateChannelList
6380 * Request to WDI to Update the ChannelList params.
6381 */
6382VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6383 tSirUpdateChanList *pChanList)
6384{
6385 WDI_Status status = WDI_STATUS_SUCCESS;
6386 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6387 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6388 WDI_UpdateChannelReqinfoType *pChanInfoType;
6389 tWDA_ReqParams *pWdaParams;
6390 wpt_uint8 i;
6391
6392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6393 "------> %s " ,__func__);
6394 if(NULL == pChanList)
6395 {
6396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6397 "%s: NULL pChanList", __func__);
6398 VOS_ASSERT(0);
6399 return VOS_STATUS_E_INVAL;
6400 }
6401
6402 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6403 {
6404 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6405 "Update channel list capability Not Supported");
6406 vos_mem_free(pChanList);
6407 return VOS_STATUS_E_INVAL;
6408 }
6409
6410 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6411 sizeof(WDI_UpdateChReqParamsType));
6412 if(NULL == pwdiUpdateChReqParam)
6413 {
6414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6415 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6416 __func__);
6417 VOS_ASSERT(0);
6418 vos_mem_free(pChanList);
6419 return VOS_STATUS_E_NOMEM;
6420 }
6421 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6422 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6423 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6424 pChanList->numChan);
6425 if(NULL == pChanInfoType)
6426 {
6427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6428 "%s: VOS MEM Alloc Failure", __func__);
6429 VOS_ASSERT(0);
6430 vos_mem_free(pChanList);
6431 vos_mem_free(pwdiUpdateChReqParam);
6432 return VOS_STATUS_E_NOMEM;
6433 }
6434 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6435 * pChanList->numChan);
6436 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6437
6438 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6439 if(NULL == pWdaParams)
6440 {
6441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6442 "%s: VOS MEM Alloc Failure", __func__);
6443 VOS_ASSERT(0);
6444 vos_mem_free(pChanList);
6445 vos_mem_free(pChanInfoType);
6446 vos_mem_free(pwdiUpdateChReqParam);
6447 return VOS_STATUS_E_NOMEM;
6448 }
6449 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6450
6451 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6452 {
6453 pChanInfoType->mhz =
6454 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6455
6456 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6457 pChanInfoType->band_center_freq2 = 0;
6458
6459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6460 "chan[%d] = %u", i, pChanInfoType->mhz);
6461 if (pChanList->chanParam[i].dfsSet)
6462 {
6463 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6465 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6466 pChanList->chanParam[i].dfsSet);
6467 }
6468
6469 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6470 {
6471 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6472 }
6473 else
6474 {
6475 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6476 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6477 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6478 }
6479
6480 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6481 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6482
6483 pChanInfoType++;
6484 }
6485
6486 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6487 pWdaParams->pWdaContext = pWDA;
6488 pWdaParams->wdaMsgParam = (void *)pChanList;
6489 /* store Params pass it to WDI */
6490 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6491 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6492 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6493 if(IS_WDI_STATUS_FAILURE(status))
6494 {
6495 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6496 "Failure in Update Channel REQ Params WDI API, free all the memory");
6497 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6498 vos_mem_free(pwdiUpdateChReqParam);
6499 vos_mem_free(pWdaParams->wdaMsgParam);
6500 vos_mem_free(pWdaParams);
6501 }
6502 return CONVERT_WDI2VOS_STATUS(status);
6503}
6504
Jeff Johnson295189b2012-06-20 16:38:30 -07006505/*
6506 * FUNCTION: WDA_AddTSReqCallback
6507 * send ADD TS RSP back to PE
6508 */
6509void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6510{
6511 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6512 tWDA_CbContext *pWDA;
6513 tAddTsParams *pAddTsReqParams;
6514
6515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006516 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006517 if(NULL == pWdaParams)
6518 {
6519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006520 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006521 VOS_ASSERT(0) ;
6522 return ;
6523 }
6524 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6525 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6527 vos_mem_free(pWdaParams);
6528
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006529 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 return ;
6532}
6533
Jeff Johnson295189b2012-06-20 16:38:30 -07006534/*
6535 * FUNCTION: WDA_ProcessAddTSReq
6536 * Request to WDI to Update the ADD TS REQ params.
6537 */
6538VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6539 tAddTsParams *pAddTsReqParams)
6540{
6541 WDI_Status status = WDI_STATUS_SUCCESS ;
6542 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6543 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6544 sizeof(WDI_AddTSReqParamsType)) ;
6545 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006547 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006548 if(NULL == wdiAddTSReqParam)
6549 {
6550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006551 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 VOS_ASSERT(0);
6553 return VOS_STATUS_E_NOMEM;
6554 }
6555 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6556 if(NULL == pWdaParams)
6557 {
6558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006559 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 VOS_ASSERT(0);
6561 vos_mem_free(wdiAddTSReqParam);
6562 return VOS_STATUS_E_NOMEM;
6563 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6565 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 //TS IE
6567 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6568 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6569 pAddTsReqParams->tspec.length;
6570
6571 //TS IE : TS INFO : TRAFFIC
6572 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6573 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6574 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6575 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6576 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6577 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6578 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6579 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6580 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6581 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6582 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6583 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6584 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6585 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6586 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6587 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6588
6589 //TS IE : TS INFO : SCHEDULE
6590 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6591 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6592 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6593 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 //TS IE
6595 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6596 pAddTsReqParams->tspec.nomMsduSz;
6597 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6598 pAddTsReqParams->tspec.maxMsduSz;
6599 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6600 pAddTsReqParams->tspec.minSvcInterval;
6601 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6602 pAddTsReqParams->tspec.maxSvcInterval;
6603 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6604 pAddTsReqParams->tspec.inactInterval;
6605 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6606 pAddTsReqParams->tspec.suspendInterval;
6607 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6608 pAddTsReqParams->tspec.svcStartTime;
6609 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6610 pAddTsReqParams->tspec.minDataRate;
6611 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6612 pAddTsReqParams->tspec.meanDataRate;
6613 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6614 pAddTsReqParams->tspec.peakDataRate;
6615 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6616 pAddTsReqParams->tspec.maxBurstSz;
6617 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6618 pAddTsReqParams->tspec.delayBound;
6619 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6620 pAddTsReqParams->tspec.minPhyRate;
6621 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6622 pAddTsReqParams->tspec.surplusBw;
6623 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6624 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006625 /* TODO: tAddTsParams doesn't have the following fields */
6626#if 0
6627 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6628 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6629 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6630 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6631#endif
6632 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6633
6634 pWdaParams->pWdaContext = pWDA;
6635 /* Store ADD TS pointer, as this will be used for response */
6636 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006637 /* store Params pass it to WDI */
6638 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006639 status = WDI_AddTSReq(wdiAddTSReqParam,
6640 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006641 if(IS_WDI_STATUS_FAILURE(status))
6642 {
6643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6644 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6646 vos_mem_free(pWdaParams);
6647 pAddTsReqParams->status = eSIR_FAILURE ;
6648 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006650 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006651}
6652
Jeff Johnson295189b2012-06-20 16:38:30 -07006653/*
6654 * FUNCTION: WDA_DelTSReqCallback
6655 * send DEL TS RSP back to PE
6656 */
6657void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6658{
6659 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006661 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6663 vos_mem_free(pWdaParams->wdaMsgParam) ;
6664 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006665 /*
6666 * No respone required for WDA_DEL_TS_REQ so just free the request
6667 * param here
6668 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006669 return ;
6670}
6671
Jeff Johnson295189b2012-06-20 16:38:30 -07006672/*
6673 * FUNCTION: WDA_ProcessDelTSReq
6674 * Request to WDI to Update the DELTS REQ params.
6675 */
6676VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6677 tDelTsParams *pDelTSReqParams)
6678{
6679 WDI_Status status = WDI_STATUS_SUCCESS ;
6680 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6681 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6682 sizeof(WDI_DelTSReqParamsType)) ;
6683 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006685 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006686 if(NULL == wdiDelTSReqParam)
6687 {
6688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006689 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 VOS_ASSERT(0);
6691 return VOS_STATUS_E_NOMEM;
6692 }
6693 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6694 if(NULL == pWdaParams)
6695 {
6696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 VOS_ASSERT(0);
6699 vos_mem_free(wdiDelTSReqParam);
6700 return VOS_STATUS_E_NOMEM;
6701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006702 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6703 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6704 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6705 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6706 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 pWdaParams->pWdaContext = pWDA;
6708 /* Store DEL TS pointer, as this will be used for response */
6709 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 /* store Params pass it to WDI */
6711 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 status = WDI_DelTSReq(wdiDelTSReqParam,
6713 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 if(IS_WDI_STATUS_FAILURE(status))
6715 {
6716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6717 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6719 vos_mem_free(pWdaParams->wdaMsgParam);
6720 vos_mem_free(pWdaParams);
6721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006723}
Jeff Johnson295189b2012-06-20 16:38:30 -07006724/*
6725 * FUNCTION: WDA_UpdateBeaconParamsCallback
6726 * Free the memory. No need to send any response to PE in this case
6727 */
6728void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6729{
6730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006732 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 if(NULL == pWdaParams)
6734 {
6735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006736 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006737 VOS_ASSERT(0) ;
6738 return ;
6739 }
6740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6741 vos_mem_free(pWdaParams->wdaMsgParam) ;
6742 vos_mem_free(pWdaParams);
6743 /*
6744 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6745 * param here
6746 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 return ;
6748}
Jeff Johnson295189b2012-06-20 16:38:30 -07006749/*
6750 * FUNCTION: WDA_ProcessUpdateBeaconParams
6751 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6752 */
6753VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6754 tUpdateBeaconParams *pUpdateBeaconParams)
6755{
6756 WDI_Status status = WDI_STATUS_SUCCESS ;
6757 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6758 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6759 sizeof(WDI_UpdateBeaconParamsType)) ;
6760 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006762 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 if(NULL == wdiUpdateBeaconParams)
6764 {
6765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006767 VOS_ASSERT(0);
6768 return VOS_STATUS_E_NOMEM;
6769 }
6770 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6771 if(NULL == pWdaParams)
6772 {
6773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 VOS_ASSERT(0);
6776 vos_mem_free(wdiUpdateBeaconParams);
6777 return VOS_STATUS_E_NOMEM;
6778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6780 pUpdateBeaconParams->bssIdx;
6781 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6782 pUpdateBeaconParams->fShortPreamble;
6783 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6784 pUpdateBeaconParams->fShortSlotTime;
6785 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6786 pUpdateBeaconParams->beaconInterval;
6787 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6788 pUpdateBeaconParams->llaCoexist;
6789 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6790 pUpdateBeaconParams->llbCoexist;
6791 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6792 pUpdateBeaconParams->llgCoexist;
6793 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6794 pUpdateBeaconParams->ht20MhzCoexist;
6795 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6796 pUpdateBeaconParams->llnNonGFCoexist;
6797 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6798 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6799 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6800 pUpdateBeaconParams->fRIFSMode;
6801 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6802 pUpdateBeaconParams->paramChangeBitmap;
6803 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6804
6805 pWdaParams->pWdaContext = pWDA;
6806 /* Store UpdateBeacon Req pointer, as this will be used for response */
6807 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 /* store Params pass it to WDI */
6809 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6811 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6812 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 if(IS_WDI_STATUS_FAILURE(status))
6814 {
6815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6816 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6818 vos_mem_free(pWdaParams->wdaMsgParam);
6819 vos_mem_free(pWdaParams);
6820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006822}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006823#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006824/*
6825 * FUNCTION: WDA_TSMStatsReqCallback
6826 * send TSM Stats RSP back to PE
6827 */
6828void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6829{
6830 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6831 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006832 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6833 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006834
6835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006836 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 if(NULL == pWdaParams)
6838 {
6839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006840 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 VOS_ASSERT(0) ;
6842 return ;
6843 }
6844 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006845 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6846
6847 if(NULL == pGetTsmStatsReqParams)
6848 {
6849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6850 "%s: pGetTsmStatsReqParams received NULL", __func__);
6851 VOS_ASSERT(0);
6852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6853 vos_mem_free(pWdaParams);
6854 return;
6855 }
6856
6857 pTsmRspParams =
6858 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 if( NULL == pTsmRspParams )
6860 {
6861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006862 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 VOS_ASSERT( 0 );
6864 return ;
6865 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006866 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6867 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6868 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6869
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6871 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6872 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6873 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6874 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6875 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6876 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6877 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6878 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6879 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006880
6881 /* Assign get tsm stats req req (backup) in to the response */
6882 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6883
6884 /* free WDI command buffer */
6885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6886 vos_mem_free(pWdaParams);
6887
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006889 return ;
6890}
6891
6892
Jeff Johnson295189b2012-06-20 16:38:30 -07006893/*
6894 * FUNCTION: WDA_ProcessTsmStatsReq
6895 * Request to WDI to get the TSM Stats params.
6896 */
6897VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006898 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006899{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006900 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006902 tWDA_ReqParams *pWdaParams = NULL;
6903 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6904
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006906 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006907 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6908 sizeof(WDI_TSMStatsReqParamsType));
6909 if(NULL == wdiTSMReqParam)
6910 {
6911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 VOS_ASSERT(0);
6914 return VOS_STATUS_E_NOMEM;
6915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6917 if(NULL == pWdaParams)
6918 {
6919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006921 VOS_ASSERT(0);
6922 vos_mem_free(wdiTSMReqParam);
6923 return VOS_STATUS_E_NOMEM;
6924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6926 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6927 pTsmStats->bssId,
6928 sizeof(wpt_macAddr));
6929 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6930
6931 pWdaParams->pWdaContext = pWDA;
6932 /* Store TSM Stats pointer, as this will be used for response */
6933 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006934 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 status = WDI_TSMStatsReq(wdiTSMReqParam,
6936 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 if(IS_WDI_STATUS_FAILURE(status))
6938 {
6939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6940 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006941 vos_mem_free(pWdaParams);
6942
6943 pGetTsmStatsRspParams =
6944 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6945 if(NULL == pGetTsmStatsRspParams)
6946 {
6947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6948 "%s: VOS MEM Alloc Failure", __func__);
6949 VOS_ASSERT(0);
6950 vos_mem_free(pTsmStats);
6951 return VOS_STATUS_E_NOMEM;
6952 }
6953 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6954 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6955 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6956
6957 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006959 return CONVERT_WDI2VOS_STATUS(status) ;
6960}
6961#endif
6962/*
6963 * FUNCTION: WDA_SendBeaconParamsCallback
6964 * No need to send any response to PE in this case
6965 */
6966void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6967{
6968
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006970 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 return ;
6972}
Jeff Johnson295189b2012-06-20 16:38:30 -07006973/*
6974 * FUNCTION: WDA_ProcessSendBeacon
6975 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6976 * start beacon trasmission
6977 */
6978VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6979 tSendbeaconParams *pSendbeaconParams)
6980{
6981 WDI_Status status = WDI_STATUS_SUCCESS ;
6982 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006984 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6986 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6987 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6988 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006989 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6990 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306991 /* p2pIeOffset should be atleast greater than timIeOffset */
6992 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6993 (pSendbeaconParams->p2pIeOffset <
6994 pSendbeaconParams->timIeOffset))
6995 {
6996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6997 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6998 VOS_ASSERT( 0 );
6999 return WDI_STATUS_E_FAILURE;
7000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7002 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 /* Copy the beacon template to local buffer */
7004 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7005 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7006 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7007
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7009 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 if(IS_WDI_STATUS_FAILURE(status))
7011 {
7012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7013 "Failure in SEND BEACON REQ Params WDI API" );
7014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007015 vos_mem_free(pSendbeaconParams);
7016 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007017}
Jeff Johnson295189b2012-06-20 16:38:30 -07007018/*
7019 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7020 * No need to send any response to PE in this case
7021 */
7022void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7023{
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007025 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007026 return ;
7027}
7028
Jeff Johnson295189b2012-06-20 16:38:30 -07007029/*
7030 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7031 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7032 * send probe response
7033 */
7034VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7035 tSendProbeRespParams *pSendProbeRspParams)
7036{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007037 WDI_Status status = WDI_STATUS_SUCCESS;
7038 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7039 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007041 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007042
7043 if (!wdiSendProbeRspParam)
7044 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7045
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007047 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007048 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007049 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 /* Copy the Probe Response template to local buffer */
7052 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007053 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 pSendProbeRspParams->pProbeRespTemplate,
7055 pSendProbeRspParams->probeRespTemplateLen);
7056 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007057 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7059 WDI_PROBE_REQ_BITMAP_IE_LEN);
7060
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007061 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007062
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007063 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007064 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 if(IS_WDI_STATUS_FAILURE(status))
7066 {
7067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7068 "Failure in SEND Probe RSP Params WDI API" );
7069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007070 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007071 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007073}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007074#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007075/*
7076 * FUNCTION: WDA_SetMaxTxPowerCallBack
7077 * send the response to PE with power value received from WDI
7078 */
7079void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7080 void* pUserData)
7081{
7082 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7083 tWDA_CbContext *pWDA = NULL;
7084 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7085
7086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007087 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 if(NULL == pWdaParams)
7089 {
7090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007091 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 VOS_ASSERT(0) ;
7093 return ;
7094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007095 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7096 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 if( NULL == pMaxTxPowerParams )
7098 {
7099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007100 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007101 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7103 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 return ;
7105 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007106
Jeff Johnson295189b2012-06-20 16:38:30 -07007107
7108 /*need to free memory for the pointers used in the
7109 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7111 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007113
Jeff Johnson295189b2012-06-20 16:38:30 -07007114
7115 /* send response to UMAC*/
7116 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7117
7118 return;
7119}
Jeff Johnson295189b2012-06-20 16:38:30 -07007120/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007121 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007122 * Request to WDI to send set Max Tx Power Request
7123 */
7124 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7125 tMaxTxPowerParams *MaxTxPowerParams)
7126{
7127 WDI_Status status = WDI_STATUS_SUCCESS;
7128 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7129 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007130
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007132 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007133
Jeff Johnson295189b2012-06-20 16:38:30 -07007134 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7135 sizeof(WDI_SetMaxTxPowerParamsType));
7136 if(NULL == wdiSetMaxTxPowerParams)
7137 {
7138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007139 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 VOS_ASSERT(0);
7141 return VOS_STATUS_E_NOMEM;
7142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007143 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7144 if(NULL == pWdaParams)
7145 {
7146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007147 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007148 vos_mem_free(wdiSetMaxTxPowerParams);
7149 VOS_ASSERT(0);
7150 return VOS_STATUS_E_NOMEM;
7151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 /* Copy.Max.Tx.Power Params to WDI structure */
7153 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7154 MaxTxPowerParams->bssId,
7155 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7157 MaxTxPowerParams->selfStaMacAddr,
7158 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7160 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 pWdaParams->pWdaContext = pWDA;
7163 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 /* store Params pass it to WDI */
7165 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007166 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7167 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 if(IS_WDI_STATUS_FAILURE(status))
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7171 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7173 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007174 /* send response to UMAC*/
7175 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 }
7177 return CONVERT_WDI2VOS_STATUS(status);
7178
7179}
Jeff Johnson295189b2012-06-20 16:38:30 -07007180#endif
schang86c22c42013-03-13 18:41:24 -07007181
7182/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007183 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7184 * send the response to PE with power value received from WDI
7185 */
7186void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7187 *pwdiSetMaxTxPowerPerBandRsp,
7188 void* pUserData)
7189{
7190 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7191 tWDA_CbContext *pWDA = NULL;
7192 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7193
7194 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7195 "<------ %s ", __func__);
7196 if (NULL == pWdaParams)
7197 {
7198 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7199 "%s: pWdaParams received NULL", __func__);
7200 VOS_ASSERT(0);
7201 return ;
7202 }
7203 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7204 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7205 if ( NULL == pMxTxPwrPerBandParams )
7206 {
7207 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7208 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7209 VOS_ASSERT(0);
7210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7211 vos_mem_free(pWdaParams);
7212 return;
7213 }
7214
7215 /*need to free memory for the pointers used in the
7216 WDA Process.Set Max Tx Power Req function*/
7217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7218 vos_mem_free(pWdaParams);
7219 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7220
7221 /* send response to UMAC*/
7222 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7223 pMxTxPwrPerBandParams, 0);
7224
7225 return;
7226}
7227
7228/*
7229 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7230 * Request to WDI to send set Max Tx Power Per band Request
7231 */
7232 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7233 tMaxTxPowerPerBandParams
7234 *MaxTxPowerPerBandParams)
7235{
7236 WDI_Status status = WDI_STATUS_SUCCESS;
7237 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7238 tWDA_ReqParams *pWdaParams = NULL;
7239
7240 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7241 "------> %s ", __func__);
7242
7243 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7244 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7245
7246 if (NULL == wdiSetMxTxPwrPerBandParams)
7247 {
7248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7249 "%s: VOS MEM Alloc Failure", __func__);
7250 VOS_ASSERT(0);
7251 return VOS_STATUS_E_NOMEM;
7252 }
7253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7254 if (NULL == pWdaParams)
7255 {
7256 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7257 "%s: VOS MEM Alloc Failure", __func__);
7258 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7259 VOS_ASSERT(0);
7260 return VOS_STATUS_E_NOMEM;
7261 }
7262 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7263 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7264 MaxTxPowerPerBandParams->bandInfo;
7265 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7266 MaxTxPowerPerBandParams->power;
7267 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7268 pWdaParams->pWdaContext = pWDA;
7269 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7270 /* store Params pass it to WDI */
7271 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7272 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7273 WDA_SetMaxTxPowerPerBandCallBack,
7274 pWdaParams);
7275 if (IS_WDI_STATUS_FAILURE(status))
7276 {
7277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7278 "Failure in SET MAX TX Power REQ Params WDI API,"
7279 " free all the memory");
7280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7281 vos_mem_free(pWdaParams);
7282 /* send response to UMAC*/
7283 WDA_SendMsg(pWDA,
7284 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7285 MaxTxPowerPerBandParams, 0);
7286 }
7287 return CONVERT_WDI2VOS_STATUS(status);
7288}
7289
7290/*
schang86c22c42013-03-13 18:41:24 -07007291 * FUNCTION: WDA_SetTxPowerCallBack
7292 * send the response to PE with power value received from WDI
7293 */
7294void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7295 void* pUserData)
7296{
7297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7298 tWDA_CbContext *pWDA = NULL;
7299 tSirSetTxPowerReq *pTxPowerParams = NULL;
7300
7301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7302 "<------ %s ", __func__);
7303 if(NULL == pWdaParams)
7304 {
7305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7306 "%s: pWdaParams received NULL", __func__);
7307 VOS_ASSERT(0) ;
7308 return ;
7309 }
7310 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7311 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7312 if(NULL == pTxPowerParams)
7313 {
7314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7315 "%s: pTxPowerParams received NULL " ,__func__);
7316 VOS_ASSERT(0);
7317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7318 vos_mem_free(pWdaParams);
7319 return ;
7320 }
7321
7322 /*need to free memory for the pointers used in the
7323 WDA Process.Set Max Tx Power Req function*/
7324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7325 vos_mem_free(pWdaParams);
7326
7327 /* send response to UMAC*/
7328 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7329 return;
7330}
7331
7332/*
7333 * FUNCTION: WDA_ProcessSetTxPowerReq
7334 * Request to WDI to send set Tx Power Request
7335 */
7336 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7337 tSirSetTxPowerReq *txPowerParams)
7338{
7339 WDI_Status status = WDI_STATUS_SUCCESS;
7340 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7341 tWDA_ReqParams *pWdaParams = NULL;
7342
7343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7344 "------> %s ", __func__);
7345
7346 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7347 sizeof(WDI_SetTxPowerParamsType));
7348 if(NULL == wdiSetTxPowerParams)
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(wdiSetTxPowerParams);
7361 VOS_ASSERT(0);
7362 return VOS_STATUS_E_NOMEM;
7363 }
7364 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7365 txPowerParams->bssIdx;
7366 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7367 txPowerParams->mwPower;
7368 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7369 pWdaParams->pWdaContext = pWDA;
7370 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7371 /* store Params pass it to WDI */
7372 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7373 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7374 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7375 if(IS_WDI_STATUS_FAILURE(status))
7376 {
7377 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7378 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7380 vos_mem_free(pWdaParams);
7381 /* send response to UMAC*/
7382 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7383 }
7384 return CONVERT_WDI2VOS_STATUS(status);
7385}
7386
Jeff Johnson295189b2012-06-20 16:38:30 -07007387/*
7388 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7389 * Free the memory. No need to send any response to PE in this case
7390 */
7391void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7392{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007393 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7394
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007396 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007397
7398 if(NULL == pWdaParams)
7399 {
7400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007401 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007402 VOS_ASSERT(0) ;
7403 return ;
7404 }
7405
7406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7407 vos_mem_free(pWdaParams->wdaMsgParam) ;
7408 vos_mem_free(pWdaParams);
7409
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 /*
7411 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7412 * so just free the request param here
7413 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007414 return ;
7415}
7416
Jeff Johnson295189b2012-06-20 16:38:30 -07007417/*
7418 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7419 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7420 */
7421VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7422 tP2pPsParams *pP2pPsConfigParams)
7423{
7424 WDI_Status status = WDI_STATUS_SUCCESS ;
7425 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7426 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7427 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007428 tWDA_ReqParams *pWdaParams = NULL;
7429
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007431 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007432 if(NULL == wdiSetP2PGONOAReqParam)
7433 {
7434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 VOS_ASSERT(0);
7437 return VOS_STATUS_E_NOMEM;
7438 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007439
7440 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7441 if(NULL == pWdaParams)
7442 {
7443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007444 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007445 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007446 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007447 VOS_ASSERT(0);
7448 return VOS_STATUS_E_NOMEM;
7449 }
7450
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7452 pP2pPsConfigParams->opp_ps;
7453 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7454 pP2pPsConfigParams->ctWindow;
7455 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7456 pP2pPsConfigParams->count;
7457 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7458 pP2pPsConfigParams->duration;
7459 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7460 pP2pPsConfigParams->interval;
7461 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7462 pP2pPsConfigParams->single_noa_duration;
7463 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7464 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007465
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7467 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007468 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7469
Jeff Johnson295189b2012-06-20 16:38:30 -07007470 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007471 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7472 pWdaParams->pWdaContext = pWDA;
7473
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007475 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7476
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 if(IS_WDI_STATUS_FAILURE(status))
7478 {
7479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7480 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7482 vos_mem_free(pWdaParams->wdaMsgParam);
7483 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 return CONVERT_WDI2VOS_STATUS(status);
7486
Jeff Johnson295189b2012-06-20 16:38:30 -07007487}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307488
7489#ifdef FEATURE_WLAN_TDLS
7490/*
7491 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7492 * Free the memory. No need to send any response to PE in this case
7493 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307494void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7495 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307496{
7497 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7498 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307499 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307500
7501
7502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7503 "<------ %s " ,__func__);
7504 if(NULL == pWdaParams)
7505 {
7506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7507 "%s: pWdaParams received NULL", __func__);
7508 VOS_ASSERT(0) ;
7509 return ;
7510 }
7511 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7512
7513 if(NULL == pWdaParams)
7514 {
7515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7516 "%s: pWdaParams received NULL", __func__);
7517 VOS_ASSERT(0) ;
7518 return ;
7519 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307520 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7521 if( NULL == pTdlsLinkEstablishParams )
7522 {
7523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7524 "%s: pTdlsLinkEstablishParams "
7525 "received NULL " ,__func__);
7526 VOS_ASSERT(0);
7527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7528 vos_mem_free(pWdaParams);
7529 return ;
7530 }
7531 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7532 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307534 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307535 /* send response to UMAC*/
7536 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7537
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307538 return ;
7539}
7540
7541VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7542 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7543{
7544 WDI_Status status = WDI_STATUS_SUCCESS ;
7545 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7546 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7547 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7548 tWDA_ReqParams *pWdaParams = NULL;
7549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7550 "------> %s " ,__func__);
7551 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7552 {
7553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7554 "%s: VOS MEM Alloc Failure", __func__);
7555 VOS_ASSERT(0);
7556 return VOS_STATUS_E_NOMEM;
7557 }
7558 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7559 if(NULL == pWdaParams)
7560 {
7561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7562 "%s: VOS MEM Alloc Failure", __func__);
7563 vos_mem_free(pTdlsLinkEstablishParams);
7564 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7565 VOS_ASSERT(0);
7566 return VOS_STATUS_E_NOMEM;
7567 }
7568 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307569 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307570 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307571 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307572 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307573 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307574 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307575 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307576 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307577 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307578 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7579 pTdlsLinkEstablishParams->isOffChannelSupported;
7580
7581 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7582 pTdlsLinkEstablishParams->validChannels,
7583 pTdlsLinkEstablishParams->validChannelsLen);
7584
7585 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7586 pTdlsLinkEstablishParams->validChannelsLen;
7587
7588 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7589 pTdlsLinkEstablishParams->validOperClasses,
7590 pTdlsLinkEstablishParams->validOperClassesLen);
7591 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7592 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307593
7594 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7595 /* Store msg pointer from PE, as this will be used for response */
7596 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7597 /* store Params pass it to WDI */
7598 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7599 pWdaParams->pWdaContext = pWDA;
7600
7601 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7602 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7603 WDA_SetTDLSLinkEstablishReqParamsCallback,
7604 pWdaParams);
7605 if(IS_WDI_STATUS_FAILURE(status))
7606 {
7607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7608 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7610 vos_mem_free(pWdaParams->wdaMsgParam);
7611 vos_mem_free(pWdaParams);
7612 }
7613 return CONVERT_WDI2VOS_STATUS(status);
7614}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307615
7616// tdlsoffchan
7617void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7618 void* pUserData)
7619{
7620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7621 tWDA_CbContext *pWDA = NULL;
7622 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7623
7624
7625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7626 "<------ %s " ,__func__);
7627 if(NULL == pWdaParams)
7628 {
7629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7630 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307631 VOS_ASSERT(0) ;
7632 return ;
7633 }
7634 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7635
Atul Mittal60bd4292014-08-14 12:19:27 +05307636 if(NULL == pWdaParams)
7637 {
7638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7639 "%s: pWdaParams received NULL", __func__);
7640 VOS_ASSERT(0) ;
7641 return ;
7642 }
Atul Mittalc0f739f2014-07-31 13:47:47 +05307643 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307644 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307645 {
7646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7647 "%s: pTdlsChanSwitchParams "
7648 "received NULL " ,__func__);
7649 VOS_ASSERT(0);
7650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7651 vos_mem_free(pWdaParams);
7652 return ;
7653 }
7654 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7655 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7657 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307658 /* send response to UMAC*/
7659 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307660
7661 return ;
7662}
7663VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7664 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7665{
7666 WDI_Status status = WDI_STATUS_SUCCESS ;
7667 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7668 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7669 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7670 tWDA_ReqParams *pWdaParams = NULL;
7671
7672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7673 "Enter: %s ",__func__);
7674 if(NULL == wdiSetTDLSChanSwitchReqParam)
7675 {
7676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7677 "%s: VOS MEM Alloc Failure", __func__);
7678 VOS_ASSERT(0);
7679 return VOS_STATUS_E_NOMEM;
7680 }
7681
7682 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7683 if(NULL == pWdaParams)
7684 {
7685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7686 "%s: VOS MEM Alloc Failure", __func__);
7687 vos_mem_free(pTdlsChanSwitchParams);
7688 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7689 VOS_ASSERT(0);
7690 return VOS_STATUS_E_NOMEM;
7691 }
7692 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7693 pTdlsChanSwitchParams->staIdx;
7694 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7695 pTdlsChanSwitchParams->tdlsSwMode;
7696 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7697 pTdlsChanSwitchParams->operClass;
7698 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7699 pTdlsChanSwitchParams->tdlsOffCh;
7700 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7701 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7702
7703
7704 /* Store msg pointer from PE, as this will be used for response */
7705 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7706 /* store Params pass it to WDI */
7707 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7708 pWdaParams->pWdaContext = pWDA;
7709 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7710 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7711 WDA_SetTDLSChanSwitchReqParamsCallback,
7712 pWdaParams);
7713 if(IS_WDI_STATUS_FAILURE(status))
7714 {
7715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7716 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7718 vos_mem_free(pWdaParams->wdaMsgParam);
7719 vos_mem_free(pWdaParams);
7720 }
7721 return CONVERT_WDI2VOS_STATUS(status);
7722}
7723#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307724
7725
Jeff Johnson295189b2012-06-20 16:38:30 -07007726#ifdef WLAN_FEATURE_VOWIFI_11R
7727/*
7728 * FUNCTION: WDA_AggrAddTSReqCallback
7729 * send ADD AGGREGATED TS RSP back to PE
7730 */
7731void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7732{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007733 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7734 tWDA_CbContext *pWDA;
7735 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007738 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007739 if(NULL == pWdaParams)
7740 {
7741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007742 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007743 VOS_ASSERT(0) ;
7744 return ;
7745 }
7746
7747 pWDA = pWdaParams->pWdaContext;
7748 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007749
7750 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7751 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007752 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007755
7756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7757 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 return ;
7759}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007760/*
7761 * FUNCTION: WDA_ProcessAddTSReq
7762 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7763 */
7764VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7765 tAggrAddTsParams *pAggrAddTsReqParams)
7766{
7767 WDI_Status status = WDI_STATUS_SUCCESS ;
7768 int i;
7769 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007770 tWDA_ReqParams *pWdaParams = NULL;
7771
7772
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007774 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7776 sizeof(WDI_AggrAddTSReqParamsType)) ;
7777 if(NULL == wdiAggrAddTSReqParam)
7778 {
7779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007780 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 VOS_ASSERT(0);
7782 return VOS_STATUS_E_NOMEM;
7783 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007784
7785
7786 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7787 if(NULL == pWdaParams)
7788 {
7789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007790 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007791 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007792 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007793 VOS_ASSERT(0);
7794 return VOS_STATUS_E_NOMEM;
7795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7797 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7798 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7800 {
7801 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7802 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7803 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7805 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7806 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7807 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7808 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7809 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7810 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7811 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7812 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7813 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7814 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7815 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7816 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7817 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7818 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7819 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007820 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7821 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007822 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7823 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7824 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7825 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7826 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7827 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7828 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7829 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7830 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7831 pAggrAddTsReqParams->tspec[i].inactInterval;
7832 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7833 pAggrAddTsReqParams->tspec[i].suspendInterval;
7834 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7835 pAggrAddTsReqParams->tspec[i].svcStartTime;
7836 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7837 pAggrAddTsReqParams->tspec[i].minDataRate;
7838 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7839 pAggrAddTsReqParams->tspec[i].meanDataRate;
7840 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7841 pAggrAddTsReqParams->tspec[i].peakDataRate;
7842 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7843 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7844 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7845 pAggrAddTsReqParams->tspec[i].delayBound;
7846 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7847 pAggrAddTsReqParams->tspec[i].minPhyRate;
7848 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7849 pAggrAddTsReqParams->tspec[i].surplusBw;
7850 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7851 pAggrAddTsReqParams->tspec[i].mediumTime;
7852 }
7853
7854 /* TODO: tAggrAddTsParams doesn't have the following fields */
7855#if 0
7856 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7857 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7858 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7859 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7860#endif
7861 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7862
7863 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007864 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007866 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7867
7868 pWdaParams->pWdaContext = pWDA;
7869
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007871 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7872
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 if(IS_WDI_STATUS_FAILURE(status))
7874 {
7875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7876 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7878 vos_mem_free(pWdaParams);
7879
7880 /* send the failure response back to PE*/
7881 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7882 {
7883 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7884 }
7885
7886 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7887 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007889 return CONVERT_WDI2VOS_STATUS(status) ;
7890}
7891#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007892/*
Mihir Shetea4306052014-03-25 00:02:54 +05307893 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 * send Enter IMPS RSP back to PE
7895 */
Mihir Shetea4306052014-03-25 00:02:54 +05307896void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007897{
Mihir Shetea4306052014-03-25 00:02:54 +05307898 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7899 tWDA_CbContext *pWDA;
7900
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307902 "<------ %s status=%d" ,__func__,status);
7903 if(NULL == pWdaParams)
7904 {
7905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7906 "%s: pWdaParams received NULL", __func__);
7907 VOS_ASSERT(0);
7908 return;
7909 }
7910
7911 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7912
7913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7914 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007915 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 return ;
7917}
Mihir Shetea4306052014-03-25 00:02:54 +05307918
7919
7920/*
7921 * FUNCTION: WDA_EnterImpsReqCallback
7922 * Free memory and send Enter IMPS RSP back to PE.
7923 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7924 */
7925void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7926{
7927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7928 tWDA_CbContext *pWDA;
7929
7930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7931 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7932
7933 if(NULL == pWdaParams)
7934 {
7935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7936 "%s: pWdaParams received NULL", __func__);
7937 VOS_ASSERT(0);
7938 return;
7939 }
7940
7941 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7942
7943 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7944 {
7945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7946 vos_mem_free(pWdaParams);
7947 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7948 CONVERT_WDI2SIR_STATUS(wdiStatus));
7949 }
7950
7951 return;
7952}
Jeff Johnson295189b2012-06-20 16:38:30 -07007953/*
7954 * FUNCTION: WDA_ProcessEnterImpsReq
7955 * Request to WDI to Enter IMPS power state.
7956 */
7957VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7958{
7959 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307960 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7961 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007963 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307964
7965
7966 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7967 if (NULL == wdiEnterImpsReqParams)
7968 {
7969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7970 "%s: VOS MEM Alloc Failure", __func__);
7971 VOS_ASSERT(0);
7972 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7973 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7974 return VOS_STATUS_E_NOMEM;
7975 }
7976
7977 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7978 if (NULL == pWdaParams)
7979 {
7980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7981 "%s: VOS MEM Alloc Failure", __func__);
7982 VOS_ASSERT(0);
7983 vos_mem_free(wdiEnterImpsReqParams);
7984 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7985 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7986 return VOS_STATUS_E_NOMEM;
7987 }
7988
7989 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7990 wdiEnterImpsReqParams->pUserData = pWdaParams;
7991
7992 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7993 pWdaParams->wdaMsgParam = NULL;
7994 pWdaParams->pWdaContext = pWDA;
7995
7996 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7997 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7998 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 if(IS_WDI_STATUS_FAILURE(status))
8000 {
8001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8002 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308003 vos_mem_free(wdiEnterImpsReqParams);
8004 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008005 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 return CONVERT_WDI2VOS_STATUS(status) ;
8008}
Jeff Johnson295189b2012-06-20 16:38:30 -07008009/*
8010 * FUNCTION: WDA_ExitImpsReqCallback
8011 * send Exit IMPS RSP back to PE
8012 */
8013void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8014{
8015 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008017 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008018 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008019 return ;
8020}
Jeff Johnson295189b2012-06-20 16:38:30 -07008021/*
8022 * FUNCTION: WDA_ProcessExitImpsReq
8023 * Request to WDI to Exit IMPS power state.
8024 */
8025VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8026{
8027 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008029 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 if(IS_WDI_STATUS_FAILURE(status))
8032 {
c_hpothue80fad42014-11-10 16:53:39 +05308033 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8034 {
8035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8036 FL("reload wlan driver"));
8037 wpalWlanReload();
8038 }
8039 else
8040 {
8041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 "Failure in Exit IMPS REQ WDI API, free all the memory " );
c_hpothue80fad42014-11-10 16:53:39 +05308043 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
8044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 return CONVERT_WDI2VOS_STATUS(status) ;
8047}
Jeff Johnson295189b2012-06-20 16:38:30 -07008048/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008049 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008050 * send Enter BMPS RSP back to PE
8051 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008052void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008053{
8054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8055 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008056 tEnterBmpsParams *pEnterBmpsRspParams;
8057
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008059 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008060 if(NULL == pWdaParams)
8061 {
8062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008063 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 VOS_ASSERT(0) ;
8065 return ;
8066 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008067
8068 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8069 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8070
8071 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008072 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008073
8074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008076 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8077
Jeff Johnson295189b2012-06-20 16:38:30 -07008078 return ;
8079}
Jeff Johnson295189b2012-06-20 16:38:30 -07008080/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008081 * FUNCTION: WDA_EnterBmpsReqCallback
8082 * Free memory and send Enter BMPS RSP back to PE.
8083 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8084 */
8085void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8086{
8087 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8088 tWDA_CbContext *pWDA;
8089 tEnterBmpsParams *pEnterBmpsRspParams;
8090
8091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8092 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8093
8094 if(NULL == pWdaParams)
8095 {
8096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8097 "%s: pWdaParams received NULL", __func__);
8098 VOS_ASSERT(0);
8099 return;
8100 }
8101
8102 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8103 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8104 pEnterBmpsRspParams->status = wdiStatus;
8105
8106 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8107 {
8108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8109 vos_mem_free(pWdaParams);
8110 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8111 }
8112
8113 return;
8114}
8115/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008116 * FUNCTION: WDA_ProcessEnterBmpsReq
8117 * Request to WDI to Enter BMPS power state.
8118 */
8119VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8120 tEnterBmpsParams *pEnterBmpsReqParams)
8121{
8122 WDI_Status status = WDI_STATUS_SUCCESS;
8123 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8124 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008126 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8128 {
8129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008130 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008131 VOS_ASSERT(0);
8132 return VOS_STATUS_E_FAILURE;
8133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008134 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8135 if (NULL == wdiEnterBmpsReqParams)
8136 {
8137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008138 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008140 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8141 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 return VOS_STATUS_E_NOMEM;
8143 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8145 if (NULL == pWdaParams)
8146 {
8147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008149 VOS_ASSERT(0);
8150 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008151 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8152 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008153 return VOS_STATUS_E_NOMEM;
8154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008155 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8156 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8157 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8158 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008159 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008160 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8161 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8162 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008163 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8164 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008165
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 /* Store param pointer as passed in by caller */
8167 /* store Params pass it to WDI */
8168 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008169 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008172 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008173 if (IS_WDI_STATUS_FAILURE(status))
8174 {
8175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8176 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008178 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008179 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008180 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 return CONVERT_WDI2VOS_STATUS(status);
8183}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008184
8185
8186static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8187 WDI_Status wdiStatus,
8188 tExitBmpsParams *pExitBmpsReqParams)
8189{
8190 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8191
8192 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8193}
8194
8195
Jeff Johnson295189b2012-06-20 16:38:30 -07008196/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008197 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008198 * send Exit BMPS RSP back to PE
8199 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008200void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008201{
8202 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8203 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008204 tExitBmpsParams *pExitBmpsRspParams;
8205
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008207 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008208 if(NULL == pWdaParams)
8209 {
8210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008211 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008212 VOS_ASSERT(0) ;
8213 return ;
8214 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008215
8216 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8217 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8218
8219 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008220 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008221
Jeff Johnson295189b2012-06-20 16:38:30 -07008222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8223 vos_mem_free(pWdaParams) ;
8224
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008225 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008226 return ;
8227}
Jeff Johnson295189b2012-06-20 16:38:30 -07008228/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008229 * FUNCTION: WDA_ExitBmpsReqCallback
8230 * Free memory and send Exit BMPS RSP back to PE.
8231 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8232 */
8233void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8234{
8235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8236 tWDA_CbContext *pWDA;
8237 tExitBmpsParams *pExitBmpsRspParams;
8238
8239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8240 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8241
8242 if(NULL == pWdaParams)
8243 {
8244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8245 "%s: pWdaParams received NULL", __func__);
8246 VOS_ASSERT(0);
8247 return;
8248 }
8249
8250 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8251 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8252 pExitBmpsRspParams->status = wdiStatus;
8253
8254 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8255 {
8256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8257 vos_mem_free(pWdaParams);
8258 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8259 }
8260
8261 return;
8262}
8263/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 * FUNCTION: WDA_ProcessExitBmpsReq
8265 * Request to WDI to Exit BMPS power state.
8266 */
8267VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8268 tExitBmpsParams *pExitBmpsReqParams)
8269{
8270 WDI_Status status = WDI_STATUS_SUCCESS ;
8271 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8272 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8273 sizeof(WDI_ExitBmpsReqParamsType)) ;
8274 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008276 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008277 if(NULL == wdiExitBmpsReqParams)
8278 {
8279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008281 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008282 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008283 return VOS_STATUS_E_NOMEM;
8284 }
8285 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8286 if(NULL == pWdaParams)
8287 {
8288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008289 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008290 VOS_ASSERT(0);
8291 vos_mem_free(wdiExitBmpsReqParams);
8292 return VOS_STATUS_E_NOMEM;
8293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008294 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008295
8296 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8297
Yue Ma7f44bbe2013-04-12 11:47:39 -07008298 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8299 wdiExitBmpsReqParams->pUserData = pWdaParams;
8300
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 /* Store param pointer as passed in by caller */
8302 /* store Params pass it to WDI */
8303 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8304 pWdaParams->pWdaContext = pWDA;
8305 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008307 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 if(IS_WDI_STATUS_FAILURE(status))
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8311 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8313 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008314 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008316 return CONVERT_WDI2VOS_STATUS(status) ;
8317}
Jeff Johnson295189b2012-06-20 16:38:30 -07008318/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008319 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 * send Enter UAPSD RSP back to PE
8321 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008322void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008323{
8324 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8325 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008326 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008328 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 if(NULL == pWdaParams)
8330 {
8331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008332 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 VOS_ASSERT(0) ;
8334 return ;
8335 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008336
8337 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8338 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8339
8340 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008341 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008342
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8344 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008345 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 return ;
8347}
Jeff Johnson295189b2012-06-20 16:38:30 -07008348/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008349 * FUNCTION: WDA_EnterUapsdReqCallback
8350 * Free memory and send Enter UAPSD RSP back to PE.
8351 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8352 */
8353void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8354{
8355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8356 tWDA_CbContext *pWDA;
8357 tUapsdParams *pEnterUapsdRsqParams;
8358
8359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8360 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8361
8362 if(NULL == pWdaParams)
8363 {
8364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8365 "%s: pWdaParams received NULL", __func__);
8366 VOS_ASSERT(0);
8367 return;
8368 }
8369
8370 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8371 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8372 pEnterUapsdRsqParams->status = wdiStatus;
8373
8374 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8375 {
8376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8377 vos_mem_free(pWdaParams);
8378 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8379 }
8380
8381 return;
8382}
8383/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008384 * FUNCTION: WDA_ProcessEnterUapsdReq
8385 * Request to WDI to Enter UAPSD power state.
8386 */
8387VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8388 tUapsdParams *pEnterUapsdReqParams)
8389{
8390 WDI_Status status = WDI_STATUS_SUCCESS ;
8391 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8392 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8393 sizeof(WDI_EnterUapsdReqParamsType)) ;
8394 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008396 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 if(NULL == wdiEnterUapsdReqParams)
8398 {
8399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 VOS_ASSERT(0);
8402 return VOS_STATUS_E_NOMEM;
8403 }
8404 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8405 if(NULL == pWdaParams)
8406 {
8407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 VOS_ASSERT(0);
8410 vos_mem_free(wdiEnterUapsdReqParams);
8411 return VOS_STATUS_E_NOMEM;
8412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008413 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8414 pEnterUapsdReqParams->beDeliveryEnabled;
8415 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8416 pEnterUapsdReqParams->beTriggerEnabled;
8417 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8418 pEnterUapsdReqParams->bkDeliveryEnabled;
8419 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8420 pEnterUapsdReqParams->bkTriggerEnabled;
8421 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8422 pEnterUapsdReqParams->viDeliveryEnabled;
8423 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8424 pEnterUapsdReqParams->viTriggerEnabled;
8425 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8426 pEnterUapsdReqParams->voDeliveryEnabled;
8427 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8428 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008429 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008430
Yue Ma7f44bbe2013-04-12 11:47:39 -07008431 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8432 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008433
Jeff Johnson295189b2012-06-20 16:38:30 -07008434 /* Store param pointer as passed in by caller */
8435 /* store Params pass it to WDI */
8436 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8437 pWdaParams->pWdaContext = pWDA;
8438 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008440 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008441 if(IS_WDI_STATUS_FAILURE(status))
8442 {
8443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8444 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8445 vos_mem_free(pWdaParams->wdaMsgParam) ;
8446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8447 vos_mem_free(pWdaParams) ;
8448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 return CONVERT_WDI2VOS_STATUS(status) ;
8450}
Jeff Johnson295189b2012-06-20 16:38:30 -07008451/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008452 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 * send Exit UAPSD RSP back to PE
8454 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008455void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008456{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008457
8458 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8459 tWDA_CbContext *pWDA;
8460 tExitUapsdParams *pExitUapsdRspParams;
8461
Jeff Johnson295189b2012-06-20 16:38:30 -07008462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008463 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008464 if(NULL == pWdaParams)
8465 {
8466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008467 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008468 VOS_ASSERT(0);
8469 return;
8470 }
8471
8472 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8473 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8474
8475 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008476 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008477
8478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8479 vos_mem_free(pWdaParams) ;
8480
8481 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 return ;
8483}
Jeff Johnson295189b2012-06-20 16:38:30 -07008484/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008485 * FUNCTION: WDA_ExitUapsdReqCallback
8486 * Free memory and send Exit UAPSD RSP back to PE.
8487 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8488 */
8489void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8490{
8491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8492 tWDA_CbContext *pWDA;
8493 tExitUapsdParams *pExitUapsdRspParams;
8494
8495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8496 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8497
8498 if(NULL == pWdaParams)
8499 {
8500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8501 "%s: pWdaParams received NULL", __func__);
8502 VOS_ASSERT(0);
8503 return;
8504 }
8505
8506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8507 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8508 pExitUapsdRspParams->status = wdiStatus;
8509
8510 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8511 {
8512 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8513 vos_mem_free(pWdaParams);
8514 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8515 }
8516
8517 return;
8518}
8519/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008520 * FUNCTION: WDA_ProcessExitUapsdReq
8521 * Request to WDI to Exit UAPSD power state.
8522 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008523VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8524 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008525{
8526 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008527 tWDA_ReqParams *pWdaParams ;
8528 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8529 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8530 sizeof(WDI_ExitUapsdReqParamsType)) ;
8531
Jeff Johnson295189b2012-06-20 16:38:30 -07008532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008533 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008534
8535 if(NULL == wdiExitUapsdReqParams)
8536 {
8537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008538 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008539 VOS_ASSERT(0);
8540 return VOS_STATUS_E_NOMEM;
8541 }
8542 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8543 if(NULL == pWdaParams)
8544 {
8545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008546 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008547 VOS_ASSERT(0);
8548 vos_mem_free(wdiExitUapsdReqParams);
8549 return VOS_STATUS_E_NOMEM;
8550 }
8551
8552 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008553 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8554 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008555
8556 /* Store param pointer as passed in by caller */
8557 /* store Params pass it to WDI */
8558 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8559 pWdaParams->pWdaContext = pWDA;
8560 pWdaParams->wdaMsgParam = pExitUapsdParams;
8561
Yue Ma7f44bbe2013-04-12 11:47:39 -07008562 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008563 if(IS_WDI_STATUS_FAILURE(status))
8564 {
8565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8566 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008567 vos_mem_free(pWdaParams->wdaMsgParam) ;
8568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8569 vos_mem_free(pWdaParams) ;
8570
Jeff Johnson295189b2012-06-20 16:38:30 -07008571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008572 return CONVERT_WDI2VOS_STATUS(status) ;
8573}
8574
Jeff Johnson295189b2012-06-20 16:38:30 -07008575/*
8576 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8577 *
8578 */
8579void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8580{
8581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008583 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008584 if(NULL == pWdaParams)
8585 {
8586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008587 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 VOS_ASSERT(0) ;
8589 return ;
8590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 if( pWdaParams != NULL )
8592 {
8593 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8594 {
8595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8596 }
8597 if( pWdaParams->wdaMsgParam != NULL )
8598 {
8599 vos_mem_free(pWdaParams->wdaMsgParam) ;
8600 }
8601 vos_mem_free(pWdaParams) ;
8602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008603 return ;
8604}
Jeff Johnson295189b2012-06-20 16:38:30 -07008605/*
8606 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8607 * Request to WDI to set the power save params at start.
8608 */
8609VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8610 tSirPowerSaveCfg *pPowerSaveCfg)
8611{
8612 WDI_Status status = WDI_STATUS_SUCCESS ;
8613 tHalCfg *tlvStruct = NULL ;
8614 tANI_U8 *tlvStructStart = NULL ;
8615 v_PVOID_t *configParam;
8616 tANI_U32 configParamSize;
8617 tANI_U32 *configDataValue;
8618 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8619 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8623 {
8624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008625 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008626 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008627 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008628 return VOS_STATUS_E_FAILURE;
8629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008630 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8631 if (NULL == wdiPowerSaveCfg)
8632 {
8633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008635 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008636 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 return VOS_STATUS_E_NOMEM;
8638 }
8639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8640 if(NULL == pWdaParams)
8641 {
8642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008644 VOS_ASSERT(0);
8645 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008646 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 return VOS_STATUS_E_NOMEM;
8648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8650 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008651 if(NULL == configParam)
8652 {
8653 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008654 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008655 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 vos_mem_free(pWdaParams);
8657 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008658 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 return VOS_STATUS_E_NOMEM;
8660 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 vos_mem_set(configParam, configParamSize, 0);
8662 wdiPowerSaveCfg->pConfigBuffer = configParam;
8663 tlvStruct = (tHalCfg *)configParam;
8664 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008665 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8666 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8667 tlvStruct->length = sizeof(tANI_U32);
8668 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8669 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008670 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8671 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8673 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8674 tlvStruct->length = sizeof(tANI_U32);
8675 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8676 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008677 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8678 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008679 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8680 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8681 tlvStruct->length = sizeof(tANI_U32);
8682 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8683 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008684 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8685 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008686 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8687 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8688 tlvStruct->length = sizeof(tANI_U32);
8689 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8690 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8692 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008693 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8694 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8695 tlvStruct->length = sizeof(tANI_U32);
8696 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8697 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8699 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008700 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8701 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8702 tlvStruct->length = sizeof(tANI_U32);
8703 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8704 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8706 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008707 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8708 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8709 tlvStruct->length = sizeof(tANI_U32);
8710 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8711 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008712 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8713 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8715 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8716 tlvStruct->length = sizeof(tANI_U32);
8717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8718 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8719 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8720 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8722 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8723 tlvStruct->length = sizeof(tANI_U32);
8724 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8725 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8726 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8727 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8729 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8730 tlvStruct->length = sizeof(tANI_U32);
8731 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8732 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8736 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8737 tlvStruct->length = sizeof(tANI_U32);
8738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8739 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8741 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008742 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008743 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 /* store Params pass it to WDI */
8745 pWdaParams->wdaMsgParam = configParam;
8746 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8747 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8749 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 if(IS_WDI_STATUS_FAILURE(status))
8751 {
8752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8753 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8754 vos_mem_free(pWdaParams->wdaMsgParam);
8755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8756 vos_mem_free(pWdaParams);
8757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008758 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 return CONVERT_WDI2VOS_STATUS(status);
8760}
Jeff Johnson295189b2012-06-20 16:38:30 -07008761/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008762 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008763 *
8764 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008765void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008766{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008767 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8768
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008770 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008771
8772 if(NULL == pWdaParams)
8773 {
8774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8775 "%s: pWdaParams received NULL", __func__);
8776 VOS_ASSERT(0);
8777 return ;
8778 }
8779
8780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 vos_mem_free(pWdaParams);
8782
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 return ;
8784}
Jeff Johnson295189b2012-06-20 16:38:30 -07008785/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008786 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8787 * Free memory.
8788 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8789 */
8790void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8791{
8792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8793
8794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8795 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8796
8797 if(NULL == pWdaParams)
8798 {
8799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8800 "%s: pWdaParams received NULL", __func__);
8801 VOS_ASSERT(0);
8802 return;
8803 }
8804
8805 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8806 {
8807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8808 vos_mem_free(pWdaParams);
8809 }
8810
8811 return;
8812}
8813/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008814 * FUNCTION: WDA_SetUapsdAcParamsReq
8815 * Request to WDI to set the UAPSD params for an ac (sta mode).
8816 */
8817VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8818 tUapsdInfo *pUapsdInfo)
8819{
8820 WDI_Status status = WDI_STATUS_SUCCESS;
8821 tWDA_CbContext *pWDA = NULL ;
8822 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8823 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8824 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8825 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008827 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 if(NULL == wdiUapsdParams)
8829 {
8830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008832 VOS_ASSERT(0);
8833 return VOS_STATUS_E_NOMEM;
8834 }
8835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8836 if(NULL == pWdaParams)
8837 {
8838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008839 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008840 VOS_ASSERT(0);
8841 vos_mem_free(wdiUapsdParams);
8842 return VOS_STATUS_E_NOMEM;
8843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8845 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8846 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8847 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8848 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8849 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008850 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8851 wdiUapsdParams->pUserData = pWdaParams;
8852
Jeff Johnson295189b2012-06-20 16:38:30 -07008853 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008854 pWdaParams->pWdaContext = pWDA;
8855 /* Store param pointer as passed in by caller */
8856 pWdaParams->wdaMsgParam = pUapsdInfo;
8857 /* store Params pass it to WDI */
8858 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008859 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008860 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008861 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 if(IS_WDI_STATUS_FAILURE(status))
8863 {
8864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8865 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8867 vos_mem_free(pWdaParams);
8868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8870 return VOS_STATUS_SUCCESS;
8871 else
8872 return VOS_STATUS_E_FAILURE;
8873
Jeff Johnson295189b2012-06-20 16:38:30 -07008874}
8875/*
8876 * FUNCTION: WDA_ClearUapsdAcParamsReq
8877 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8878 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8879 * and again enter the UPASD with the modified params. Hence the disable
8880 * function was kept empty.
8881 *
8882 */
8883VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8884{
8885 /* do nothing */
8886 return VOS_STATUS_SUCCESS;
8887}
Jeff Johnson295189b2012-06-20 16:38:30 -07008888/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008889 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 *
8891 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008892void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008893{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8895
Jeff Johnson295189b2012-06-20 16:38:30 -07008896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008897 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008898
8899 if(NULL == pWdaParams)
8900 {
8901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008902 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008903 VOS_ASSERT(0) ;
8904 return ;
8905 }
8906
8907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8908 vos_mem_free(pWdaParams->wdaMsgParam);
8909 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008910
Jeff Johnson295189b2012-06-20 16:38:30 -07008911 //print a msg, nothing else to do
8912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008913 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 return ;
8915}
Jeff Johnson295189b2012-06-20 16:38:30 -07008916/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008917 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8918 * Free memory.
8919 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8920 */
8921void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8922{
8923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8924
8925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8926 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8927
8928 if(NULL == pWdaParams)
8929 {
8930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8931 "%s: pWdaParams received NULL", __func__);
8932 VOS_ASSERT(0);
8933 return;
8934 }
8935
8936 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8937 {
8938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8939 vos_mem_free(pWdaParams->wdaMsgParam);
8940 vos_mem_free(pWdaParams);
8941 }
8942
8943 return;
8944}
8945/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008946 * FUNCTION: WDA_UpdateUapsdParamsReq
8947 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8948 */
8949VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8950 tUpdateUapsdParams* pUpdateUapsdInfo)
8951{
8952 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008953 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008954 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8955 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8956 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008957 tWDA_ReqParams *pWdaParams = NULL;
8958
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008960 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 if(NULL == wdiUpdateUapsdParams)
8962 {
8963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 VOS_ASSERT(0);
8966 return VOS_STATUS_E_NOMEM;
8967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008968 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8969 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8970 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008971 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8972 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008973
8974 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8975 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008976 {
8977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008979 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008980 vos_mem_free(pUpdateUapsdInfo);
8981 vos_mem_free(wdiUpdateUapsdParams);
8982 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008984 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008985 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008986 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008987 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8988 pWdaParams->pWdaContext = pWDA;
8989
Jeff Johnson43971f52012-07-17 12:26:56 -07008990 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008991 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008992 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008993
Jeff Johnson43971f52012-07-17 12:26:56 -07008994 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008995 {
8996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8997 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008998 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9000 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009001 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009003 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009004}
Jeff Johnson295189b2012-06-20 16:38:30 -07009005/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009006 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009007 *
9008 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009009void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009010{
9011 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009013 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009014 if(WDI_STATUS_SUCCESS != wdiStatus)
9015 {
9016 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009017 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009019 if(NULL == pWdaParams)
9020 {
9021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009022 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009023 VOS_ASSERT(0) ;
9024 return ;
9025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9027 vos_mem_free(pWdaParams->wdaMsgParam);
9028 vos_mem_free(pWdaParams);
9029 return ;
9030}
Jeff Johnson295189b2012-06-20 16:38:30 -07009031/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009032 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9033 * Free memory.
9034 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9035 */
9036void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9037{
9038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9039
9040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9041 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9042
9043 if(NULL == pWdaParams)
9044 {
9045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9046 "%s: pWdaParams received NULL", __func__);
9047 VOS_ASSERT(0);
9048 return;
9049 }
9050
9051 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9052 {
9053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9054 vos_mem_free(pWdaParams->wdaMsgParam);
9055 vos_mem_free(pWdaParams);
9056 }
9057
9058 return;
9059}
9060/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9062 *
9063 */
9064VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9065 tSirWlanSetRxpFilters *pWlanSuspendParam)
9066{
Jeff Johnson295189b2012-06-20 16:38:30 -07009067 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009068 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309069 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009070 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309071 /* Sanity Check
9072 * This is very unlikely and add assert to collect more info next time */
9073 if(NULL == pWlanSuspendParam)
9074 {
9075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9076 "%s: pWlanSuspendParam received NULL", __func__);
9077 VOS_ASSERT(0) ;
9078 return VOS_STATUS_E_FAULT;
9079 }
9080 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9081 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009083 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 if(NULL == wdiRxpFilterParams)
9085 {
9086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009088 VOS_ASSERT(0);
9089 vos_mem_free(pWlanSuspendParam);
9090 return VOS_STATUS_E_NOMEM;
9091 }
9092 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9093 if(NULL == pWdaParams)
9094 {
9095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009097 VOS_ASSERT(0);
9098 vos_mem_free(wdiRxpFilterParams);
9099 vos_mem_free(pWlanSuspendParam);
9100 return VOS_STATUS_E_NOMEM;
9101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9103 pWlanSuspendParam->setMcstBcstFilter;
9104 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9105 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9106
Yue Ma7f44bbe2013-04-12 11:47:39 -07009107 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9108 wdiRxpFilterParams->pUserData = pWdaParams;
9109
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 pWdaParams->pWdaContext = pWDA;
9111 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9112 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009113 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009114 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009115 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009116 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 {
9118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9119 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009120 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9122 vos_mem_free(pWdaParams->wdaMsgParam);
9123 vos_mem_free(pWdaParams);
9124 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009125 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009126}
Jeff Johnson295189b2012-06-20 16:38:30 -07009127/*
9128 * FUNCTION: WDA_WdiIndicationCallback
9129 *
9130 */
9131void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9132 void* pUserData)
9133{
9134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009135 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009136}
Jeff Johnson295189b2012-06-20 16:38:30 -07009137/*
9138 * FUNCTION: WDA_ProcessWlanSuspendInd
9139 *
9140 */
9141VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9142 tSirWlanSuspendParam *pWlanSuspendParam)
9143{
9144 WDI_Status wdiStatus;
9145 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009147 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009148 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9149 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9150 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9151 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009153 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9154 if(WDI_STATUS_PENDING == wdiStatus)
9155 {
9156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009157 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 }
9159 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9160 {
9161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009162 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009164 vos_mem_free(pWlanSuspendParam);
9165 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9166}
9167
Chet Lanctot186b5732013-03-18 10:26:30 -07009168#ifdef WLAN_FEATURE_11W
9169/*
9170 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9171 *
9172 */
9173VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9174 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9175{
9176 WDI_Status wdiStatus;
9177 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9179 "------> %s ", __func__);
9180
9181 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9182 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9183 sizeof(tSirMacAddr));
9184
9185 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9186 wdiExclUnencryptParams.pUserData = pWDA;
9187
9188 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9189 if(WDI_STATUS_PENDING == wdiStatus)
9190 {
9191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9192 "Pending received for %s:%d ", __func__, __LINE__ );
9193 }
9194 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9195 {
9196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9197 "Failure in %s:%d ", __func__, __LINE__ );
9198 }
9199 vos_mem_free(pExclUnencryptParam);
9200 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9201}
9202#endif
9203
Jeff Johnson295189b2012-06-20 16:38:30 -07009204/*
9205 * FUNCTION: WDA_ProcessWlanResumeCallback
9206 *
9207 */
9208void WDA_ProcessWlanResumeCallback(
9209 WDI_SuspendResumeRspParamsType *resumeRspParams,
9210 void* pUserData)
9211{
9212 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009214 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 if(NULL == pWdaParams)
9216 {
9217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009218 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009219 VOS_ASSERT(0) ;
9220 return ;
9221 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009222 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9223 {
9224 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009225 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9228 vos_mem_free(pWdaParams->wdaMsgParam);
9229 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009230 return ;
9231}
Jeff Johnson295189b2012-06-20 16:38:30 -07009232/*
9233 * FUNCTION: WDA_ProcessWlanResumeReq
9234 *
9235 */
9236VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9237 tSirWlanResumeParam *pWlanResumeParam)
9238{
9239 WDI_Status wdiStatus;
9240 WDI_ResumeParamsType *wdiResumeParams =
9241 (WDI_ResumeParamsType *)vos_mem_malloc(
9242 sizeof(WDI_ResumeParamsType) ) ;
9243 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009245 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009246 if(NULL == wdiResumeParams)
9247 {
9248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009249 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009250 VOS_ASSERT(0);
9251 return VOS_STATUS_E_NOMEM;
9252 }
9253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9254 if(NULL == pWdaParams)
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 VOS_ASSERT(0);
9259 vos_mem_free(wdiResumeParams);
9260 return VOS_STATUS_E_NOMEM;
9261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9263 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 wdiResumeParams->wdiReqStatusCB = NULL;
9266 pWdaParams->wdaMsgParam = pWlanResumeParam;
9267 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9268 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9270 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9271 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9273 {
9274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9275 "Failure in Host Resume REQ WDI API, free all the memory " );
9276 VOS_ASSERT(0);
9277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9278 vos_mem_free(pWdaParams->wdaMsgParam);
9279 vos_mem_free(pWdaParams);
9280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009281 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9282}
9283
Jeff Johnson295189b2012-06-20 16:38:30 -07009284/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009285 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009286 *
9287 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009288void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009289{
9290 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009292 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009293 if(NULL == pWdaParams)
9294 {
9295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009296 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009297 VOS_ASSERT(0) ;
9298 return ;
9299 }
9300
9301 vos_mem_free(pWdaParams->wdaMsgParam) ;
9302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9303 vos_mem_free(pWdaParams) ;
9304 /*
9305 * No respone required for SetBeaconFilter req so just free the request
9306 * param here
9307 */
9308
Jeff Johnson295189b2012-06-20 16:38:30 -07009309 return ;
9310}
Jeff Johnson295189b2012-06-20 16:38:30 -07009311/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009312 * FUNCTION: WDA_SetBeaconFilterReqCallback
9313 * Free memory.
9314 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9315 */
9316void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9317{
9318 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9319
9320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9321 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9322
9323 if(NULL == pWdaParams)
9324 {
9325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9326 "%s: pWdaParams received NULL", __func__);
9327 VOS_ASSERT(0);
9328 return;
9329 }
9330
9331 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9332 {
9333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9334 vos_mem_free(pWdaParams->wdaMsgParam);
9335 vos_mem_free(pWdaParams);
9336 }
9337
9338 return;
9339}
9340/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 * FUNCTION: WDA_SetBeaconFilterReq
9342 * Request to WDI to send the beacon filtering related information.
9343 */
9344VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9345 tBeaconFilterMsg* pBeaconFilterInfo)
9346{
9347 WDI_Status status = WDI_STATUS_SUCCESS;
9348 tANI_U8 *dstPtr, *srcPtr;
9349 tANI_U8 filterLength;
9350 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9351 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9352 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9353 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009355 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 if(NULL == wdiBeaconFilterInfo)
9357 {
9358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009360 VOS_ASSERT(0);
9361 return VOS_STATUS_E_NOMEM;
9362 }
9363 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9364 if(NULL == pWdaParams)
9365 {
9366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009368 VOS_ASSERT(0);
9369 vos_mem_free(wdiBeaconFilterInfo);
9370 return VOS_STATUS_E_NOMEM;
9371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9373 pBeaconFilterInfo->beaconInterval;
9374 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9375 pBeaconFilterInfo->capabilityInfo;
9376 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9377 pBeaconFilterInfo->capabilityMask;
9378 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009379
9380 //Fill the BssIdx
9381 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9382
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 //Fill structure with info contained in the beaconFilterTable
9384 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9385 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9386 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9387 if(WDI_BEACON_FILTER_LEN < filterLength)
9388 {
9389 filterLength = WDI_BEACON_FILTER_LEN;
9390 }
9391 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009392 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9393 wdiBeaconFilterInfo->pUserData = pWdaParams;
9394
Jeff Johnson295189b2012-06-20 16:38:30 -07009395 /* Store param pointer as passed in by caller */
9396 /* store Params pass it to WDI */
9397 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9398 pWdaParams->pWdaContext = pWDA;
9399 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9400
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009402 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009403 if(IS_WDI_STATUS_FAILURE(status))
9404 {
9405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9406 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9407 vos_mem_free(pWdaParams->wdaMsgParam) ;
9408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9409 vos_mem_free(pWdaParams) ;
9410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009411 return CONVERT_WDI2VOS_STATUS(status) ;
9412}
Jeff Johnson295189b2012-06-20 16:38:30 -07009413/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009414 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009415 *
9416 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009417void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009418{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009419 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9420
Jeff Johnson295189b2012-06-20 16:38:30 -07009421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009422 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009423
9424 if(NULL == pWdaParams)
9425 {
9426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009427 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009428 VOS_ASSERT(0) ;
9429 return ;
9430 }
9431
9432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9433 vos_mem_free(pWdaParams->wdaMsgParam);
9434 vos_mem_free(pWdaParams);
9435
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 //print a msg, nothing else to do
9437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009438 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 return ;
9440}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009441/*
9442 * FUNCTION: WDA_RemBeaconFilterReqCallback
9443 * Free memory.
9444 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9445 */
9446void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9447{
9448 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9449
9450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9451 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9452
9453 if(NULL == pWdaParams)
9454 {
9455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9456 "%s: pWdaParams received NULL", __func__);
9457 VOS_ASSERT(0);
9458 return;
9459 }
9460
9461 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9462 {
9463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9464 vos_mem_free(pWdaParams->wdaMsgParam);
9465 vos_mem_free(pWdaParams);
9466 }
9467
9468 return;
9469}
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 // TODO: PE does not have this feature for now implemented,
9471 // but the support for removing beacon filter exists between
9472 // HAL and FW. This function can be called whenever PE defines
9473 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009474/*
9475 * FUNCTION: WDA_RemBeaconFilterReq
9476 * Request to WDI to send the removal of beacon filtering related information.
9477 */
9478VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9479 tRemBeaconFilterMsg* pBeaconFilterInfo)
9480{
9481 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009482 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9484 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9485 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009486 tWDA_ReqParams *pWdaParams ;
9487
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009489 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 if(NULL == wdiBeaconFilterInfo)
9491 {
9492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009494 VOS_ASSERT(0);
9495 return VOS_STATUS_E_NOMEM;
9496 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009497 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9498 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009499 {
9500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009503 vos_mem_free(wdiBeaconFilterInfo);
9504 vos_mem_free(pBeaconFilterInfo);
9505 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009507
9508 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9509 pBeaconFilterInfo->ucIeCount;
9510 //Fill structure with info contained in the ucRemIeId
9511 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9512 pBeaconFilterInfo->ucRemIeId,
9513 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9514 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9515 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009516
9517 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009518 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009519 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009520 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9521
9522 pWdaParams->pWdaContext = pWDA;
9523
Jeff Johnson43971f52012-07-17 12:26:56 -07009524 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009525 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009526 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009527 {
9528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9529 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009530 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9532 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009533 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009535 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009536}
Jeff Johnson295189b2012-06-20 16:38:30 -07009537/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009538 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009539 *
9540 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009541void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009542{
9543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009545 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009546 if(NULL == pWdaParams)
9547 {
9548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009549 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009550 VOS_ASSERT(0) ;
9551 return ;
9552 }
9553
9554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9555 vos_mem_free(pWdaParams) ;
9556
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 return ;
9558}
Jeff Johnson295189b2012-06-20 16:38:30 -07009559/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009560 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9561 * Free memory.
9562 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9563 */
9564void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9565{
9566 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9567
9568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9569 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9570
9571 if(NULL == pWdaParams)
9572 {
9573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9574 "%s: pWdaParams received NULL", __func__);
9575 VOS_ASSERT(0);
9576 return;
9577 }
9578
9579 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9580 {
9581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9582 vos_mem_free(pWdaParams);
9583 }
9584
9585 return;
9586}
9587/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 * FUNCTION: WDA_SetRSSIThresholdsReq
9589 * Request to WDI to set the RSSI thresholds (sta mode).
9590 */
9591VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9592{
9593 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009594 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009595 tWDA_CbContext *pWDA = NULL ;
9596 v_PVOID_t pVosContext = NULL;
9597 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9598 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9599 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9600 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009602 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 if(NULL == wdiRSSIThresholdsInfo)
9604 {
9605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009606 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009607 VOS_ASSERT(0);
9608 return VOS_STATUS_E_NOMEM;
9609 }
9610 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9611 if(NULL == pWdaParams)
9612 {
9613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 VOS_ASSERT(0);
9616 vos_mem_free(wdiRSSIThresholdsInfo);
9617 return VOS_STATUS_E_NOMEM;
9618 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9621 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9622 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009623 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9624 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9625 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009626 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9627 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9628 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009629 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9630 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009631 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9632 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9633
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 /* Store param pointer as passed in by caller */
9635 /* store Params pass it to WDI */
9636 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9637 pWdaParams->pWdaContext = pWDA;
9638 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009639 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009640 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009641 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009642 {
9643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9644 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009645 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9647 vos_mem_free(pWdaParams) ;
9648 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009649 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009650
9651}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009652/*
Yue Madb90ac12013-04-04 13:39:13 -07009653 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009654 *
9655 */
Yue Madb90ac12013-04-04 13:39:13 -07009656void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009657{
9658 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9659
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009661 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009662 if(NULL == pWdaParams)
9663 {
9664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009665 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009666 VOS_ASSERT(0) ;
9667 return ;
9668 }
9669
9670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9671 vos_mem_free(pWdaParams->wdaMsgParam);
9672 vos_mem_free(pWdaParams) ;
9673
9674 //print a msg, nothing else to do
9675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009676 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 return ;
9678}
Jeff Johnson295189b2012-06-20 16:38:30 -07009679/*
Yue Madb90ac12013-04-04 13:39:13 -07009680 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009681 * Free memory.
9682 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009683 */
9684void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9685{
9686 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9687
9688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9689 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9690
9691 if(NULL == pWdaParams)
9692 {
9693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9694 "%s: Invalid pWdaParams pointer", __func__);
9695 VOS_ASSERT(0);
9696 return;
9697 }
9698
9699 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9700 {
9701 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9702 vos_mem_free(pWdaParams->wdaMsgParam);
9703 vos_mem_free(pWdaParams);
9704 }
9705
9706 return;
9707}
9708/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009709 * FUNCTION: WDA_ProcessHostOffloadReq
9710 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9711 * to broadcast traffic (sta mode).
9712 */
9713VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9714 tSirHostOffloadReq *pHostOffloadParams)
9715{
9716 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009717 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009718 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9719 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9720 sizeof(WDI_HostOffloadReqParamsType)) ;
9721 tWDA_ReqParams *pWdaParams ;
9722
9723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009724 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009725
9726 if(NULL == wdiHostOffloadInfo)
9727 {
9728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009730 VOS_ASSERT(0);
9731 return VOS_STATUS_E_NOMEM;
9732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9734 if(NULL == pWdaParams)
9735 {
9736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009737 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 VOS_ASSERT(0);
9739 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009740 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009741 return VOS_STATUS_E_NOMEM;
9742 }
9743
9744 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9745 pHostOffloadParams->offloadType;
9746 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9747 pHostOffloadParams->enableOrDisable;
9748
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009749 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9750 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9751
Jeff Johnson295189b2012-06-20 16:38:30 -07009752 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9753 {
9754 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9755 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9756 pHostOffloadParams->params.hostIpv4Addr,
9757 4);
9758 break;
9759 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9760 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9761 pHostOffloadParams->params.hostIpv6Addr,
9762 16);
9763 break;
9764 case SIR_IPV6_NS_OFFLOAD:
9765 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9766 pHostOffloadParams->params.hostIpv6Addr,
9767 16);
9768
9769#ifdef WLAN_NS_OFFLOAD
9770 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9771 {
9772 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9773 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9774 16);
9775 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9776 }
9777 else
9778 {
9779 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9780 }
9781
9782 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9783 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9784 16);
9785 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9786 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9787 6);
9788
9789 //Only two are supported so let's go through them without a loop
9790 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9791 {
9792 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9793 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9794 16);
9795 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9796 }
9797 else
9798 {
9799 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9800 }
9801
9802 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9803 {
9804 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9805 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9806 16);
9807 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9808 }
9809 else
9810 {
9811 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9812 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309813 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9814 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009815 break;
9816#endif //WLAN_NS_OFFLOAD
9817 default:
9818 {
9819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9820 "No Handling for Offload Type %x in WDA "
9821 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9822 //WDA_VOS_ASSERT(0) ;
9823 }
9824 }
Yue Madb90ac12013-04-04 13:39:13 -07009825 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9826 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009827
Jeff Johnson295189b2012-06-20 16:38:30 -07009828 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009829 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009830 /* store Params pass it to WDI */
9831 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9832 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009833
Jeff Johnson295189b2012-06-20 16:38:30 -07009834
Jeff Johnson43971f52012-07-17 12:26:56 -07009835 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009836 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009837
Jeff Johnson43971f52012-07-17 12:26:56 -07009838 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009839 {
9840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +05309841 "Failure in host offload REQ WDI API, free all the memory %d",
9842 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -07009843 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9845 vos_mem_free(pWdaParams->wdaMsgParam);
9846 vos_mem_free(pWdaParams) ;
9847 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009848 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009849
9850}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009851/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009852 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009853 *
9854 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009855void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009856{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009857 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9858
Jeff Johnson295189b2012-06-20 16:38:30 -07009859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009860 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009861
9862 if(NULL == pWdaParams)
9863 {
9864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009865 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009866 VOS_ASSERT(0) ;
9867 return ;
9868 }
9869
9870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9871 vos_mem_free(pWdaParams->wdaMsgParam);
9872 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009873
Jeff Johnson295189b2012-06-20 16:38:30 -07009874 //print a msg, nothing else to do
9875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009876 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009877 return ;
9878}
Jeff Johnson295189b2012-06-20 16:38:30 -07009879/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009880 * FUNCTION: WDA_KeepAliveReqCallback
9881 * Free memory.
9882 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9883 */
9884void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9885{
9886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9887
9888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9889 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9890
9891 if(NULL == pWdaParams)
9892 {
9893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9894 "%s: pWdaParams received NULL", __func__);
9895 VOS_ASSERT(0);
9896 return;
9897 }
9898
9899 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9900 {
9901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9902 vos_mem_free(pWdaParams->wdaMsgParam);
9903 vos_mem_free(pWdaParams);
9904 }
9905
9906 return;
9907}
9908/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009909 * FUNCTION: WDA_ProcessKeepAliveReq
9910 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9911 * wakeup due to broadcast traffic (sta mode).
9912 */
9913VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9914 tSirKeepAliveReq *pKeepAliveParams)
9915{
9916 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009917 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009918 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9919 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9920 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009921 tWDA_ReqParams *pWdaParams;
9922
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009924 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 if(NULL == wdiKeepAliveInfo)
9926 {
9927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009930 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009931 return VOS_STATUS_E_NOMEM;
9932 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009933
9934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9935 if(NULL == pWdaParams)
9936 {
9937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009938 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009939 VOS_ASSERT(0);
9940 vos_mem_free(wdiKeepAliveInfo);
9941 vos_mem_free(pKeepAliveParams);
9942 return VOS_STATUS_E_NOMEM;
9943 }
9944
Jeff Johnson295189b2012-06-20 16:38:30 -07009945 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9946 pKeepAliveParams->packetType;
9947 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9948 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009949
9950 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9951 pKeepAliveParams->bssId,
9952 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009953
9954 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9955 {
9956 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9957 pKeepAliveParams->hostIpv4Addr,
9958 SIR_IPV4_ADDR_LEN);
9959 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9960 pKeepAliveParams->destIpv4Addr,
9961 SIR_IPV4_ADDR_LEN);
9962 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9963 pKeepAliveParams->destMacAddr,
9964 SIR_MAC_ADDR_LEN);
9965 }
9966 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9967 {
9968 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9969 SIR_IPV4_ADDR_LEN,
9970 0);
9971 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9972 SIR_IPV4_ADDR_LEN,
9973 0);
9974 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9975 SIR_MAC_ADDR_LEN,
9976 0);
9977 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009978 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9979 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009980
Jeff Johnson295189b2012-06-20 16:38:30 -07009981 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009982 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009983 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009984 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9985 pWdaParams->pWdaContext = pWDA;
9986
Jeff Johnson295189b2012-06-20 16:38:30 -07009987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9988 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9989 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9990 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9991 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9993 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9994 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9995 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9996 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9998 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9999 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10000 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10001 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10002 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10003 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10004 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10006 "TimePeriod %d PacketType %d",
10007 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10008 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010009 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010010 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010011
Jeff Johnson43971f52012-07-17 12:26:56 -070010012 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 {
10014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10015 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010016 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10018 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010019 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010021 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010022
10023}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010024/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010025 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 *
10027 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010028void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010029 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10030 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010031{
10032 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010034 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 if(NULL == pWdaParams)
10036 {
10037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010038 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 VOS_ASSERT(0) ;
10040 return ;
10041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10043 vos_mem_free(pWdaParams->wdaMsgParam);
10044 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 return ;
10046}
Jeff Johnson295189b2012-06-20 16:38:30 -070010047/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010048 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10049 * Free memory.
10050 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10051 */
10052void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10053{
10054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10055
10056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10057 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10058
10059 if(NULL == pWdaParams)
10060 {
10061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10062 "%s: pWdaParams received NULL", __func__);
10063 VOS_ASSERT(0);
10064 return;
10065 }
10066
10067 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10068 {
10069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10070 vos_mem_free(pWdaParams->wdaMsgParam);
10071 vos_mem_free(pWdaParams);
10072 }
10073
10074 return;
10075}
10076
10077/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10079 * Request to WDI to add WOWL Bcast pattern
10080 */
10081VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10082 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10083{
10084 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010085 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010086 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10087 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10088 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10089 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010091 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 if(NULL == wdiWowlAddBcPtrnInfo)
10093 {
10094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010095 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 VOS_ASSERT(0);
10097 return VOS_STATUS_E_NOMEM;
10098 }
10099 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10100 if(NULL == pWdaParams)
10101 {
10102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010103 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 VOS_ASSERT(0);
10105 vos_mem_free(wdiWowlAddBcPtrnInfo);
10106 return VOS_STATUS_E_NOMEM;
10107 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10109 pWowlAddBcPtrnParams->ucPatternId;
10110 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10111 pWowlAddBcPtrnParams->ucPatternByteOffset;
10112 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10113 pWowlAddBcPtrnParams->ucPatternMaskSize;
10114 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10115 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010116 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10117 {
10118 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10119 pWowlAddBcPtrnParams->ucPattern,
10120 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10121 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10122 pWowlAddBcPtrnParams->ucPatternMask,
10123 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10124 }
10125 else
10126 {
10127 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10128 pWowlAddBcPtrnParams->ucPattern,
10129 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10130 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10131 pWowlAddBcPtrnParams->ucPatternMask,
10132 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10133
10134 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10135 pWowlAddBcPtrnParams->ucPatternExt,
10136 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10137 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10138 pWowlAddBcPtrnParams->ucPatternMaskExt,
10139 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10140 }
10141
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010142 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10143 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10144
Yue Ma7f44bbe2013-04-12 11:47:39 -070010145 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10146 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010147 /* Store param pointer as passed in by caller */
10148 /* store Params pass it to WDI */
10149 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10150 pWdaParams->pWdaContext = pWDA;
10151 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010152 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010153 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010154 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010155 {
10156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10157 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010158 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010159 vos_mem_free(pWdaParams->wdaMsgParam) ;
10160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10161 vos_mem_free(pWdaParams) ;
10162 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010163 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010164
10165}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010166/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010167 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 *
10169 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010170void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010171 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10172 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010173{
10174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010176 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010177 if(NULL == pWdaParams)
10178 {
10179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010180 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010181 VOS_ASSERT(0) ;
10182 return ;
10183 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10185 vos_mem_free(pWdaParams->wdaMsgParam);
10186 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 return ;
10188}
Jeff Johnson295189b2012-06-20 16:38:30 -070010189/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010190 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10191 * Free memory.
10192 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10193 */
10194void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10195{
10196 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10197
10198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10199 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10200
10201 if(NULL == pWdaParams)
10202 {
10203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10204 "%s: pWdaParams received NULL", __func__);
10205 VOS_ASSERT(0);
10206 return;
10207 }
10208
10209 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10210 {
10211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10212 vos_mem_free(pWdaParams->wdaMsgParam);
10213 vos_mem_free(pWdaParams);
10214 }
10215
10216 return;
10217}
10218/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10220 * Request to WDI to delete WOWL Bcast pattern
10221 */
10222VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10223 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10224{
10225 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010226 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10228 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10229 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10230 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010232 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 if(NULL == wdiWowlDelBcPtrnInfo)
10234 {
10235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010236 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010237 VOS_ASSERT(0);
10238 return VOS_STATUS_E_NOMEM;
10239 }
10240 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10241 if(NULL == pWdaParams)
10242 {
10243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010244 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 VOS_ASSERT(0);
10246 vos_mem_free(wdiWowlDelBcPtrnInfo);
10247 return VOS_STATUS_E_NOMEM;
10248 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10250 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010251
10252 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10253 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10254
Yue Ma7f44bbe2013-04-12 11:47:39 -070010255 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10256 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010257 /* Store param pointer as passed in by caller */
10258 /* store Params pass it to WDI */
10259 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10260 pWdaParams->pWdaContext = pWDA;
10261 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010262 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010263 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010264 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010265 {
10266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10267 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010268 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 vos_mem_free(pWdaParams->wdaMsgParam) ;
10270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10271 vos_mem_free(pWdaParams) ;
10272 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010273 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010274
10275}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010276/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010277 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 *
10279 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010280void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010281{
10282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10283 tWDA_CbContext *pWDA;
10284 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010286 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 if(NULL == pWdaParams)
10288 {
10289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010290 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 VOS_ASSERT(0) ;
10292 return ;
10293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10295 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10296
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010297 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10298
Jeff Johnson295189b2012-06-20 16:38:30 -070010299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10300 vos_mem_free(pWdaParams) ;
10301
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010302 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010303 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010304 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 return ;
10306}
Jeff Johnson295189b2012-06-20 16:38:30 -070010307/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010308 * FUNCTION: WDA_WowlEnterReqCallback
10309 * Free memory and send WOWL Enter RSP back to PE.
10310 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10311 */
10312void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10313{
10314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10315 tWDA_CbContext *pWDA;
10316 tSirHalWowlEnterParams *pWowlEnterParams;
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 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10330 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10331 pWowlEnterParams->status = wdiStatus;
10332
10333 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10334 {
10335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10336 vos_mem_free(pWdaParams);
10337 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10338 }
10339
10340 return;
10341}
10342/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 * FUNCTION: WDA_ProcessWowlEnterReq
10344 * Request to WDI to enter WOWL
10345 */
10346VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10347 tSirHalWowlEnterParams *pWowlEnterParams)
10348{
10349 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010350 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10352 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10353 sizeof(WDI_WowlEnterReqParamsType)) ;
10354 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010356 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 if(NULL == wdiWowlEnterInfo)
10358 {
10359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 VOS_ASSERT(0);
10362 return VOS_STATUS_E_NOMEM;
10363 }
10364 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10365 if(NULL == pWdaParams)
10366 {
10367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010368 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 VOS_ASSERT(0);
10370 vos_mem_free(wdiWowlEnterInfo);
10371 return VOS_STATUS_E_NOMEM;
10372 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010373
10374 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10375
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10377 pWowlEnterParams->magicPtrn,
10378 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10380 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010381 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10382 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10384 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10386 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010387 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10388 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010389 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10390 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010391 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10392 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10394 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010395#ifdef WLAN_WAKEUP_EVENTS
10396 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10397 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10398
10399 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10400 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10401
10402 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10403 pWowlEnterParams->ucWowNetScanOffloadMatch;
10404
10405 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10406 pWowlEnterParams->ucWowGTKRekeyError;
10407
10408 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10409 pWowlEnterParams->ucWoWBSSConnLoss;
10410#endif // WLAN_WAKEUP_EVENTS
10411
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010412 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10413 pWowlEnterParams->bssIdx;
10414
Yue Ma7f44bbe2013-04-12 11:47:39 -070010415 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10416 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 /* Store param pointer as passed in by caller */
10418 /* store Params pass it to WDI */
10419 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10420 pWdaParams->pWdaContext = pWDA;
10421 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010422 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010423 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010424 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010425 {
10426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10427 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010428 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010429 vos_mem_free(pWdaParams->wdaMsgParam) ;
10430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10431 vos_mem_free(pWdaParams) ;
10432 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010433 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010434
10435}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010436/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010437 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010438 *
10439 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010440void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010441{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10443 tWDA_CbContext *pWDA;
10444 tSirHalWowlExitParams *pWowlExitParams;
10445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010446 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010447 if(NULL == pWdaParams)
10448 {
10449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010450 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010451 VOS_ASSERT(0) ;
10452 return ;
10453 }
10454 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10455 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10456
10457 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010458 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010459
10460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10461 vos_mem_free(pWdaParams) ;
10462
Jeff Johnson295189b2012-06-20 16:38:30 -070010463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010464 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010465 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010466 return ;
10467}
Jeff Johnson295189b2012-06-20 16:38:30 -070010468/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010469 * FUNCTION: WDA_WowlExitReqCallback
10470 * Free memory and send WOWL Exit RSP back to PE.
10471 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10472 */
10473void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10474{
10475 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10476 tWDA_CbContext *pWDA;
10477 tSirHalWowlExitParams *pWowlExitParams;
10478
10479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10480 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10481
10482 if(NULL == pWdaParams)
10483 {
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10485 "%s: pWdaParams received NULL", __func__);
10486 VOS_ASSERT(0);
10487 return;
10488 }
10489
10490 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10491 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10492 pWowlExitParams->status = wdiStatus;
10493
10494 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10495 {
10496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10497 vos_mem_free(pWdaParams);
10498 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10499 }
10500
10501 return;
10502}
10503/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010504 * FUNCTION: WDA_ProcessWowlExitReq
10505 * Request to WDI to add WOWL Bcast pattern
10506 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010507VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10508 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010509{
10510 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010511 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010512 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10513 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10514 sizeof(WDI_WowlExitReqParamsType)) ;
10515 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010517 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010518 if(NULL == wdiWowlExitInfo)
10519 {
10520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010521 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010522 VOS_ASSERT(0);
10523 return VOS_STATUS_E_NOMEM;
10524 }
10525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10526 if(NULL == pWdaParams)
10527 {
10528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010529 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010530 VOS_ASSERT(0);
10531 vos_mem_free(wdiWowlExitInfo);
10532 return VOS_STATUS_E_NOMEM;
10533 }
10534
10535 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10536 pWowlExitParams->bssIdx;
10537
Yue Ma7f44bbe2013-04-12 11:47:39 -070010538 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10539 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010540
10541 /* Store param pointer as passed in by caller */
10542 /* store Params pass it to WDI */
10543 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10544 pWdaParams->pWdaContext = pWDA;
10545 pWdaParams->wdaMsgParam = pWowlExitParams;
10546
10547 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010548 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010549
Jeff Johnson43971f52012-07-17 12:26:56 -070010550 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 {
10552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10553 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010554 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10556 vos_mem_free(pWdaParams->wdaMsgParam);
10557 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010558 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010559 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010560}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010561/*
10562 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10563 * Request to WDI to determine whether a given station is capable of
10564 * using HW-based frame translation
10565 */
10566v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10567 tANI_U8 staIdx)
10568{
10569 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10570}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010571
10572/*
10573 * FUNCTION: WDA_IsSelfSTA
10574 * Request to WDI to determine whether a given STAID is self station
10575 * index.
10576 */
10577v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10578{
10579
10580 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10581
Girish Gowli05cf44e2014-06-12 21:53:37 +053010582 if (NULL != pWDA)
10583 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10584 else
10585 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010586}
Jeff Johnson295189b2012-06-20 16:38:30 -070010587/*
10588 * FUNCTION: WDA_NvDownloadReqCallback
10589 * send NV Download RSP back to PE
10590 */
10591void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10592 void* pUserData)
10593{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010594
10595 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10596 tWDA_CbContext *pWDA;
10597
Jeff Johnson295189b2012-06-20 16:38:30 -070010598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010599 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010600
10601 if(NULL == pWdaParams)
10602 {
10603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010604 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010605 VOS_ASSERT(0) ;
10606 return ;
10607 }
10608
10609 pWDA = pWdaParams->pWdaContext;
10610
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10613 vos_mem_free(pWdaParams);
10614
Jeff Johnson295189b2012-06-20 16:38:30 -070010615 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010616 return ;
10617}
Jeff Johnson295189b2012-06-20 16:38:30 -070010618/*
10619 * FUNCTION: WDA_ProcessNvDownloadReq
10620 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10621 */
10622VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10623{
10624 /* Initialize the local Variables*/
10625 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10626 v_VOID_t *pNvBuffer=NULL;
10627 v_SIZE_t bufferSize = 0;
10628 WDI_Status status = WDI_STATUS_E_FAILURE;
10629 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010630 tWDA_ReqParams *pWdaParams ;
10631
Jeff Johnson295189b2012-06-20 16:38:30 -070010632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010633 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010634 if(NULL == pWDA)
10635 {
10636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010637 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010638 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 return VOS_STATUS_E_FAILURE;
10640 }
10641
10642 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010643 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10644
Jeff Johnson295189b2012-06-20 16:38:30 -070010645 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10646 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 if(NULL == wdiNvDownloadReqParam)
10648 {
10649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010650 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010651 VOS_ASSERT(0);
10652 return VOS_STATUS_E_NOMEM;
10653 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010654 /* Copy Params to wdiNvDownloadReqParam*/
10655 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10656 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010657
10658 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10659 if(NULL == pWdaParams)
10660 {
10661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010662 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010663 VOS_ASSERT(0);
10664 vos_mem_free(wdiNvDownloadReqParam);
10665 return VOS_STATUS_E_NOMEM;
10666 }
10667
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010669 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10670 pWdaParams->wdaMsgParam = NULL;
10671 pWdaParams->pWdaContext = pWDA;
10672
10673
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010675
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010677 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10678
Jeff Johnson295189b2012-06-20 16:38:30 -070010679 if(IS_WDI_STATUS_FAILURE(status))
10680 {
10681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10682 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10684 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010685 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010686 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010687}
10688/*
10689 * FUNCTION: WDA_FlushAcReqCallback
10690 * send Flush AC RSP back to TL
10691 */
10692void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10693{
10694 vos_msg_t wdaMsg = {0} ;
10695 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10696 tFlushACReq *pFlushACReqParams;
10697 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010699 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010700 if(NULL == pWdaParams)
10701 {
10702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010703 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010704 VOS_ASSERT(0) ;
10705 return ;
10706 }
10707
10708 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10709 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10710 if(NULL == pFlushACRspParams)
10711 {
10712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010713 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010714 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010715 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 return ;
10717 }
10718 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10719 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10720 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10721 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10722 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010723 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010724 vos_mem_free(pWdaParams->wdaMsgParam) ;
10725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10726 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010727 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10728 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10729 // POST message to TL
10730 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10731
Jeff Johnson295189b2012-06-20 16:38:30 -070010732 return ;
10733}
Jeff Johnson295189b2012-06-20 16:38:30 -070010734/*
10735 * FUNCTION: WDA_ProcessFlushAcReq
10736 * Request to WDI to Update the DELBA REQ params.
10737 */
10738VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10739 tFlushACReq *pFlushAcReqParams)
10740{
10741 WDI_Status status = WDI_STATUS_SUCCESS ;
10742 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10743 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10744 sizeof(WDI_FlushAcReqParamsType)) ;
10745 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010746 if(NULL == wdiFlushAcReqParam)
10747 {
10748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 VOS_ASSERT(0);
10751 return VOS_STATUS_E_NOMEM;
10752 }
10753 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10754 if(NULL == pWdaParams)
10755 {
10756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010758 VOS_ASSERT(0);
10759 vos_mem_free(wdiFlushAcReqParam);
10760 return VOS_STATUS_E_NOMEM;
10761 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010763 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10765 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10766 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10767 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 /* Store Flush AC pointer, as this will be used for response */
10769 /* store Params pass it to WDI */
10770 pWdaParams->pWdaContext = pWDA;
10771 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10772 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010773 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10774 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010775 if(IS_WDI_STATUS_FAILURE(status))
10776 {
10777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10778 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10779 vos_mem_free(pWdaParams->wdaMsgParam) ;
10780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10781 vos_mem_free(pWdaParams) ;
10782 //TODO: respond to TL with failure
10783 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010784 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010785}
Jeff Johnson295189b2012-06-20 16:38:30 -070010786/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010787 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010788 *
10789 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010790void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010791{
10792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10793 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010794 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010795
10796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010797 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 if(NULL == pWdaParams)
10799 {
10800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010801 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010802 VOS_ASSERT(0) ;
10803 return ;
10804 }
10805 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10806 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10807 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10808 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10809 {
10810 pWDA->wdaAmpSessionOn = VOS_FALSE;
10811 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010812 vos_mem_free(pWdaParams->wdaMsgParam) ;
10813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10814 vos_mem_free(pWdaParams) ;
10815 /*
10816 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10817 * param here
10818 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010819 return ;
10820}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010821/*
10822 * FUNCTION: WDA_BtAmpEventReqCallback
10823 * Free memory.
10824 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10825 */
10826void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10827{
10828 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10829 tWDA_CbContext *pWDA;
10830 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010831
Yue Ma7f44bbe2013-04-12 11:47:39 -070010832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10833 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10834
10835 if(NULL == pWdaParams)
10836 {
10837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10838 "%s: pWdaParams received NULL", __func__);
10839 VOS_ASSERT(0);
10840 return;
10841 }
10842
10843 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10844 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10845
10846 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10847 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10848 {
10849 pWDA->wdaAmpSessionOn = VOS_FALSE;
10850 }
10851
10852 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10853 {
10854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10855 vos_mem_free(pWdaParams->wdaMsgParam);
10856 vos_mem_free(pWdaParams);
10857 }
10858
10859 return;
10860}
Jeff Johnson295189b2012-06-20 16:38:30 -070010861/*
10862 * FUNCTION: WDA_ProcessBtAmpEventReq
10863 * Request to WDI to Update with BT AMP events.
10864 */
10865VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10866 tSmeBtAmpEvent *pBtAmpEventParams)
10867{
10868 WDI_Status status = WDI_STATUS_SUCCESS ;
10869 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10870 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10871 sizeof(WDI_BtAmpEventParamsType)) ;
10872 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010874 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010875 if(NULL == wdiBtAmpEventParam)
10876 {
10877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010878 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 VOS_ASSERT(0);
10880 return VOS_STATUS_E_NOMEM;
10881 }
10882 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10883 if(NULL == pWdaParams)
10884 {
10885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010886 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010887 VOS_ASSERT(0);
10888 vos_mem_free(wdiBtAmpEventParam);
10889 return VOS_STATUS_E_NOMEM;
10890 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010891 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10892 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010893 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10894 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010895 /* Store BT AMP event pointer, as this will be used for response */
10896 /* store Params pass it to WDI */
10897 pWdaParams->pWdaContext = pWDA;
10898 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10899 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010900 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010901 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 if(IS_WDI_STATUS_FAILURE(status))
10903 {
10904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10905 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10906 vos_mem_free(pWdaParams->wdaMsgParam) ;
10907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10908 vos_mem_free(pWdaParams) ;
10909 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010910 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10911 {
10912 pWDA->wdaAmpSessionOn = VOS_TRUE;
10913 }
10914 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010915}
10916
Jeff Johnson295189b2012-06-20 16:38:30 -070010917/*
10918 * FUNCTION: WDA_FTMCommandReqCallback
10919 * Handle FTM CMD response came from HAL
10920 * Route responce to HDD FTM
10921 */
10922void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10923 void *usrData)
10924{
10925 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010926 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10927 {
10928 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010929 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010930 return;
10931 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 /* Release Current FTM Command Request */
10933 vos_mem_free(pWDA->wdaFTMCmdReq);
10934 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010935 /* Post FTM Responce to HDD FTM */
10936 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010937 return;
10938}
Jeff Johnson295189b2012-06-20 16:38:30 -070010939/*
10940 * FUNCTION: WDA_ProcessFTMCommand
10941 * Send FTM command to WDI
10942 */
10943VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10944 tPttMsgbuffer *pPTTFtmCmd)
10945{
10946 WDI_Status status = WDI_STATUS_SUCCESS;
10947 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 ftmCMDReq = (WDI_FTMCommandReqType *)
10949 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10950 if(NULL == ftmCMDReq)
10951 {
10952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10953 "WDA FTM Command buffer alloc fail");
10954 return VOS_STATUS_E_NOMEM;
10955 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010956 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10957 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010959 /* Send command to WDI */
10960 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010961 return status;
10962}
Jeff Johnsone7245742012-09-05 17:12:55 -070010963#ifdef FEATURE_OEM_DATA_SUPPORT
10964/*
10965 * FUNCTION: WDA_StartOemDataReqCallback
10966 *
10967 */
10968void WDA_StartOemDataReqCallback(
10969 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10970 void* pUserData)
10971{
10972 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010973 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10974 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010975 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010976
Jeff Johnsone7245742012-09-05 17:12:55 -070010977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010978 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010979
10980 if(NULL == pWdaParams)
10981 {
10982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010983 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010984 VOS_ASSERT(0) ;
10985 return ;
10986 }
10987 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10988
Jeff Johnsone7245742012-09-05 17:12:55 -070010989 if(NULL == pWDA)
10990 {
10991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010992 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010993 VOS_ASSERT(0);
10994 return ;
10995 }
10996
10997 /*
10998 * Allocate memory for response params sent to PE
10999 */
11000 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11001
11002 // Check if memory is allocated for OemdataMeasRsp Params.
11003 if(NULL == pOemDataRspParams)
11004 {
11005 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11006 "OEM DATA WDA callback alloc fail");
11007 VOS_ASSERT(0) ;
11008 return;
11009 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011010
Jeff Johnsone7245742012-09-05 17:12:55 -070011011 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11013 vos_mem_free(pWdaParams->wdaMsgParam);
11014 vos_mem_free(pWdaParams) ;
11015
Jeff Johnsone7245742012-09-05 17:12:55 -070011016 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011017 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011018 * Also, here success always means that we have atleast one BSSID.
11019 */
11020 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11021
11022 //enable Tx
11023 status = WDA_ResumeDataTx(pWDA);
11024 if(status != VOS_STATUS_SUCCESS)
11025 {
11026 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11027 }
11028 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11029 return ;
11030}
11031/*
11032 * FUNCTION: WDA_ProcessStartOemDataReq
11033 * Send Start Oem Data Req to WDI
11034 */
11035VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11036 tStartOemDataReq *pOemDataReqParams)
11037{
11038 WDI_Status status = WDI_STATUS_SUCCESS;
11039 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011040 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011041
11042 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11043
11044 if(NULL == wdiOemDataReqParams)
11045 {
11046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011047 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011048 VOS_ASSERT(0);
11049 return VOS_STATUS_E_NOMEM;
11050 }
11051
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011052 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11053 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11054 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11055 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011056
11057 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11058
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011059 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11060 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011061 {
11062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011064 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011065 vos_mem_free(pOemDataReqParams);
11066 VOS_ASSERT(0);
11067 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011068 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011069
Bernald44a1ae2013-01-09 08:30:39 -080011070 pWdaParams->pWdaContext = (void*)pWDA;
11071 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11072 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011073
11074 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11075 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011076
11077 if(IS_WDI_STATUS_FAILURE(status))
11078 {
11079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11080 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11082 vos_mem_free(pWdaParams->wdaMsgParam);
11083 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011084 }
11085 return CONVERT_WDI2VOS_STATUS(status) ;
11086}
11087#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011088/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011089 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011090 *
11091 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011092void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011093{
11094 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011096 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011097 if(NULL == pWdaParams)
11098 {
11099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011100 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011101 VOS_ASSERT(0) ;
11102 return ;
11103 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011104
11105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11106 vos_mem_free(pWdaParams->wdaMsgParam);
11107 vos_mem_free(pWdaParams);
11108
11109 return ;
11110}
11111/*
11112 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11113 * Free memory.
11114 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11115 */
11116void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11117{
11118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11119
11120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11121 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11122
11123 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011124 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11126 "%s: pWdaParams received NULL", __func__);
11127 VOS_ASSERT(0);
11128 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011130
11131 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011132 {
11133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011134 vos_mem_free(pWdaParams->wdaMsgParam);
11135 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011136 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011137
11138 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011139}
Jeff Johnson295189b2012-06-20 16:38:30 -070011140#ifdef WLAN_FEATURE_GTK_OFFLOAD
11141/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011142 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011143 *
11144 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011145void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011146 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011147{
11148 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11149
11150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011151 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011152 if(NULL == pWdaParams)
11153 {
11154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11155 "%s: pWdaParams received NULL", __func__);
11156 VOS_ASSERT(0);
11157 return;
11158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011159
Jeff Johnson295189b2012-06-20 16:38:30 -070011160 vos_mem_free(pWdaParams->wdaMsgParam) ;
11161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11162 vos_mem_free(pWdaParams) ;
11163
11164 //print a msg, nothing else to do
11165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011166 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011167
11168 return ;
11169}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011170/*
11171 * FUNCTION: WDA_GTKOffloadReqCallback
11172 * Free memory.
11173 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11174 */
11175void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11176{
11177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011178
Yue Ma7f44bbe2013-04-12 11:47:39 -070011179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11180 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11181
11182 if(NULL == pWdaParams)
11183 {
11184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11185 "%s: pWdaParams received NULL", __func__);
11186 VOS_ASSERT(0);
11187 return;
11188 }
11189
11190 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11191 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011192 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11193 sizeof(WDI_GtkOffloadReqMsg));
11194 vos_mem_zero(pWdaParams->wdaMsgParam,
11195 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11197 vos_mem_free(pWdaParams->wdaMsgParam);
11198 vos_mem_free(pWdaParams);
11199 }
11200
11201 return;
11202}
Jeff Johnson295189b2012-06-20 16:38:30 -070011203/*
11204 * FUNCTION: WDA_ProcessGTKOffloadReq
11205 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11206 * to broadcast traffic (sta mode).
11207 */
11208VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11209 tpSirGtkOffloadParams pGtkOffloadParams)
11210{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011211 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11213 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11214 sizeof(WDI_GtkOffloadReqMsg)) ;
11215 tWDA_ReqParams *pWdaParams ;
11216
11217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011218 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011219
11220 if(NULL == wdiGtkOffloadReqMsg)
11221 {
11222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011224 VOS_ASSERT(0);
11225 return VOS_STATUS_E_NOMEM;
11226 }
11227
11228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11229 if(NULL == pWdaParams)
11230 {
11231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011233 VOS_ASSERT(0);
11234 vos_mem_free(wdiGtkOffloadReqMsg);
11235 return VOS_STATUS_E_NOMEM;
11236 }
11237
11238 //
11239 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11240 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011241
11242 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011243 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011244
Jeff Johnson295189b2012-06-20 16:38:30 -070011245 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11246 // Copy KCK
11247 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11248 // Copy KEK
11249 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11250 // Copy KeyReplayCounter
11251 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11252 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11253
Yue Ma7f44bbe2013-04-12 11:47:39 -070011254 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11255 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011256
Jeff Johnson295189b2012-06-20 16:38:30 -070011257
11258 /* Store Params pass it to WDI */
11259 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11260 pWdaParams->pWdaContext = pWDA;
11261 /* Store param pointer as passed in by caller */
11262 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11263
Yue Ma7f44bbe2013-04-12 11:47:39 -070011264 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011265
11266 if(IS_WDI_STATUS_FAILURE(status))
11267 {
11268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11269 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011270 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11271 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11273 vos_mem_free(pWdaParams->wdaMsgParam);
11274 vos_mem_free(pWdaParams);
11275 }
11276
11277 return CONVERT_WDI2VOS_STATUS(status) ;
11278}
11279
11280/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011281 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011282 *
11283 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011284void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011285 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011286{
11287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11288 tWDA_CbContext *pWDA;
11289 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011290 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011291 vos_msg_t vosMsg;
11292
11293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011294 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011295
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011296 if(NULL == pWdaParams)
11297 {
11298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11299 "%s: pWdaParams received NULL", __func__);
11300 VOS_ASSERT(0);
11301 return;
11302 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011303
Nirav Shah374de6e2014-02-13 16:40:01 +053011304 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11305 if(NULL == pGtkOffloadGetInfoRsp)
11306 {
11307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11308 "%s: vos_mem_malloc failed ", __func__);
11309 VOS_ASSERT(0);
11310 return;
11311 }
11312
Jeff Johnson295189b2012-06-20 16:38:30 -070011313 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11314 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11315
11316 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11317 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11318
11319 /* Message Header */
11320 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011321 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011322
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011323 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11324 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11325 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11326 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11327 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011328
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011329 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11330 pwdiGtkOffloadGetInfoRsparams->bssId,
11331 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 /* VOS message wrapper */
11333 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11334 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11335 vosMsg.bodyval = 0;
11336
11337 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11338 {
11339 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011340 vos_mem_zero(pGtkOffloadGetInfoRsp,
11341 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011342 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11343 }
11344
11345 vos_mem_free(pWdaParams->wdaMsgParam) ;
11346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11347 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011348
11349 return;
11350}
11351/*
11352 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11353 * Free memory and send RSP back to SME.
11354 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11355 */
11356void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11357{
11358 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11359 vos_msg_t vosMsg;
11360
11361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11362 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11363
11364 if(NULL == pWdaParams)
11365 {
11366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11367 "%s: pWdaParams received NULL", __func__);
11368 VOS_ASSERT(0);
11369 return;
11370 }
11371
11372 /* VOS message wrapper */
11373 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11374 vosMsg.bodyptr = NULL;
11375 vosMsg.bodyval = 0;
11376
11377 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11378 {
11379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11380 vos_mem_free(pWdaParams->wdaMsgParam);
11381 vos_mem_free(pWdaParams);
11382 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11383 }
11384
11385 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011386}
11387#endif
11388
11389/*
11390 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11391 * Request to WDI to set Tx Per Tracking configurations
11392 */
11393VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11394{
11395 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011396 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011397 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11398 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11399 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11400 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011402 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011403 if(NULL == pwdiSetTxPerTrackingReqParams)
11404 {
11405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 vos_mem_free(pTxPerTrackingParams);
11408 VOS_ASSERT(0);
11409 return VOS_STATUS_E_NOMEM;
11410 }
11411 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11412 if(NULL == pWdaParams)
11413 {
11414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011416 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11417 vos_mem_free(pTxPerTrackingParams);
11418 VOS_ASSERT(0);
11419 return VOS_STATUS_E_NOMEM;
11420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011421 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11422 pTxPerTrackingParams->ucTxPerTrackingEnable;
11423 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11424 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11425 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11426 pTxPerTrackingParams->ucTxPerTrackingRatio;
11427 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11428 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011429 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11430 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011431 /* Store param pointer as passed in by caller */
11432 /* store Params pass it to WDI
11433 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11434 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11435 pWdaParams->pWdaContext = pWDA;
11436 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011437 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011438 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011439 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011440 {
11441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11442 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011443 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 vos_mem_free(pWdaParams->wdaMsgParam) ;
11445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11446 vos_mem_free(pWdaParams) ;
11447 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011448 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011449
11450}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011451/*
11452 * FUNCTION: WDA_HALDumpCmdCallback
11453 * Send the VOS complete .
11454 */
11455void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11456 void* pUserData)
11457{
11458 tANI_U8 *buffer = NULL;
11459 tWDA_CbContext *pWDA = NULL;
11460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011461 if(NULL == pWdaParams)
11462 {
11463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011464 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 VOS_ASSERT(0) ;
11466 return ;
11467 }
11468
11469 pWDA = pWdaParams->pWdaContext;
11470 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011471 if(wdiRspParams->usBufferLen > 0)
11472 {
11473 /*Copy the Resp data to UMAC supplied buffer*/
11474 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11475 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11477 vos_mem_free(pWdaParams);
11478
11479 /* Indicate VOSS about the start complete */
11480 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011481 return ;
11482}
11483
Jeff Johnson295189b2012-06-20 16:38:30 -070011484/*
11485 * FUNCTION: WDA_ProcessHALDumpCmdReq
11486 * Send Dump command to WDI
11487 */
11488VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11489 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11490 tANI_U32 arg4, tANI_U8 *pBuffer)
11491{
11492 WDI_Status status = WDI_STATUS_SUCCESS;
11493 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11494 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11495 tWDA_ReqParams *pWdaParams ;
11496 pVosContextType pVosContext = NULL;
11497 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11499 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011500 if(pVosContext)
11501 {
11502 if (pVosContext->isLogpInProgress)
11503 {
11504 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11505 "%s:LOGP in Progress. Ignore!!!", __func__);
11506 return VOS_STATUS_E_BUSY;
11507 }
11508 }
11509 else
11510 {
11511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11512 "%s: VOS Context Null", __func__);
11513 return VOS_STATUS_E_RESOURCES;
11514 }
11515
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11517 if(NULL == pWdaParams)
11518 {
11519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 return VOS_STATUS_E_NOMEM;
11522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 /* Allocate memory WDI request structure*/
11524 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11525 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11526 if(NULL == wdiHALDumpCmdReqParam)
11527 {
11528 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11529 "WDA HAL DUMP Command buffer alloc fail");
11530 vos_mem_free(pWdaParams);
11531 return WDI_STATUS_E_FAILURE;
11532 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011533 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011534 /* Extract the arguments */
11535 wdiHalDumpCmdInfo->command = cmd;
11536 wdiHalDumpCmdInfo->argument1 = arg1;
11537 wdiHalDumpCmdInfo->argument2 = arg2;
11538 wdiHalDumpCmdInfo->argument3 = arg3;
11539 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11542
11543 /* Response message will be passed through the buffer */
11544 pWdaParams->wdaMsgParam = (void *)pBuffer;
11545
11546 /* store Params pass it to WDI */
11547 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 /* Send command to WDI */
11549 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011550 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 if ( vStatus != VOS_STATUS_SUCCESS )
11552 {
11553 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11554 {
11555 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011556 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011557 }
11558 else
11559 {
11560 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011561 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011562 }
11563 VOS_ASSERT(0);
11564 }
11565 return status;
11566}
Jeff Johnson295189b2012-06-20 16:38:30 -070011567#ifdef WLAN_FEATURE_GTK_OFFLOAD
11568/*
11569 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11570 * Request to WDI to get GTK Offload Information
11571 */
11572VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11573 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11574{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011575 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011576 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11577 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11578 tWDA_ReqParams *pWdaParams ;
11579
11580 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11581 {
11582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 VOS_ASSERT(0);
11585 return VOS_STATUS_E_NOMEM;
11586 }
11587
11588 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11589 if(NULL == pWdaParams)
11590 {
11591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011593 VOS_ASSERT(0);
11594 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11595 return VOS_STATUS_E_NOMEM;
11596 }
11597
Yue Ma7f44bbe2013-04-12 11:47:39 -070011598 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11599 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011600
Jeff Johnson295189b2012-06-20 16:38:30 -070011601 /* Store Params pass it to WDI */
11602 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11603 pWdaParams->pWdaContext = pWDA;
11604 /* Store param pointer as passed in by caller */
11605 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11606
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011607 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011608 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011609
Yue Ma7f44bbe2013-04-12 11:47:39 -070011610 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011611
11612 if(IS_WDI_STATUS_FAILURE(status))
11613 {
11614 /* failure returned by WDI API */
11615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11616 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11618 vos_mem_free(pWdaParams) ;
11619 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11620 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11621 }
11622
11623 return CONVERT_WDI2VOS_STATUS(status) ;
11624}
11625#endif // WLAN_FEATURE_GTK_OFFLOAD
11626
11627/*
Yue Mab9c86f42013-08-14 15:59:08 -070011628 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11629 *
11630 */
11631VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11632 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11633{
11634 WDI_Status wdiStatus;
11635 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11636
11637 addPeriodicTxPtrnParams =
11638 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11639
11640 if (NULL == addPeriodicTxPtrnParams)
11641 {
11642 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11643 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11644 __func__);
11645
11646 return VOS_STATUS_E_NOMEM;
11647 }
11648
11649 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11650 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11651
11652 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11653 addPeriodicTxPtrnParams->pUserData = pWDA;
11654
11655 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11656
11657 if (WDI_STATUS_PENDING == wdiStatus)
11658 {
11659 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11660 "Pending received for %s:%d", __func__, __LINE__ );
11661 }
11662 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11663 {
11664 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11665 "Failure in %s:%d", __func__, __LINE__ );
11666 }
11667
11668 vos_mem_free(addPeriodicTxPtrnParams);
11669
11670 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11671}
11672
11673/*
11674 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11675 *
11676 */
11677VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11678 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11679{
11680 WDI_Status wdiStatus;
11681 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11682
11683 delPeriodicTxPtrnParams =
11684 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11685
11686 if (NULL == delPeriodicTxPtrnParams)
11687 {
11688 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11689 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11690 __func__);
11691
11692 return VOS_STATUS_E_NOMEM;
11693 }
11694
11695 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11696 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11697
11698 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11699 delPeriodicTxPtrnParams->pUserData = pWDA;
11700
11701 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11702
11703 if (WDI_STATUS_PENDING == wdiStatus)
11704 {
11705 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11706 "Pending received for %s:%d", __func__, __LINE__ );
11707 }
11708 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11709 {
11710 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11711 "Failure in %s:%d", __func__, __LINE__ );
11712 }
11713
11714 vos_mem_free(delPeriodicTxPtrnParams);
11715
11716 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11717}
11718
Rajeev79dbe4c2013-10-05 11:03:42 +053011719#ifdef FEATURE_WLAN_BATCH_SCAN
11720/*
11721 * FUNCTION: WDA_ProcessStopBatchScanInd
11722 *
11723 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11724 *
11725 * PARAM:
11726 * pWDA: pointer to WDA context
11727 * pReq: pointer to stop batch scan request
11728 */
11729VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11730 tSirStopBatchScanInd *pReq)
11731{
11732 WDI_Status wdiStatus;
11733 WDI_StopBatchScanIndType wdiReq;
11734
11735 wdiReq.param = pReq->param;
11736
11737 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11738
11739 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11740 {
11741 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11742 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11743 }
11744
11745 vos_mem_free(pReq);
11746
11747 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11748}
11749/*==========================================================================
11750 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11751
11752 DESCRIPTION
11753 API to pull batch scan result from FW
11754
11755 PARAMETERS
11756 pWDA: Pointer to WDA context
11757 pGetBatchScanReq: Pointer to get batch scan result indication
11758
11759 RETURN VALUE
11760 NONE
11761
11762===========================================================================*/
11763VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11764 tSirTriggerBatchScanResultInd *pReq)
11765{
11766 WDI_Status wdiStatus;
11767 WDI_TriggerBatchScanResultIndType wdiReq;
11768
11769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11770 "------> %s " ,__func__);
11771
11772 wdiReq.param = pReq->param;
11773
11774 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11775
11776 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11777 {
11778 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11779 "Trigger batch scan result ind failed %s:%d",
11780 __func__, wdiStatus);
11781 }
11782
11783 vos_mem_free(pReq);
11784
11785 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11786}
11787
11788/*==========================================================================
11789 FUNCTION WDA_SetBatchScanRespCallback
11790
11791 DESCRIPTION
11792 API to process set batch scan response from FW
11793
11794 PARAMETERS
11795 pRsp: Pointer to set batch scan response
11796 pUserData: Pointer to user data
11797
11798 RETURN VALUE
11799 NONE
11800
11801===========================================================================*/
11802void WDA_SetBatchScanRespCallback
11803(
11804 WDI_SetBatchScanRspType *pRsp,
11805 void* pUserData
11806)
11807{
11808 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11809 tpAniSirGlobal pMac;
11810 void *pCallbackContext;
11811 tWDA_CbContext *pWDA = NULL ;
11812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11813
11814
11815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11816 "<------ %s " ,__func__);
11817 if (NULL == pWdaParams)
11818 {
11819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11820 "%s: pWdaParams received NULL", __func__);
11821 VOS_ASSERT(0) ;
11822 return ;
11823 }
11824
11825 /*extract WDA context*/
11826 pWDA = pWdaParams->pWdaContext;
11827 if (NULL == pWDA)
11828 {
11829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11830 "%s:pWDA is NULL can't invole HDD callback",
11831 __func__);
11832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11833 vos_mem_free(pWdaParams->wdaMsgParam);
11834 vos_mem_free(pWdaParams);
11835 VOS_ASSERT(0);
11836 return;
11837 }
11838
11839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11840 vos_mem_free(pWdaParams->wdaMsgParam);
11841 vos_mem_free(pWdaParams);
11842
11843 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11844 if (NULL == pMac)
11845 {
11846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11847 "%s:pMac is NULL", __func__);
11848 VOS_ASSERT(0);
11849 return;
11850 }
11851
11852 pHddSetBatchScanRsp =
11853 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11854 if (NULL == pHddSetBatchScanRsp)
11855 {
11856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11857 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11858 VOS_ASSERT(0);
11859 return;
11860 }
11861
11862 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11863
11864 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11865 /*call hdd callback with set batch scan response data*/
11866 if(pMac->pmc.setBatchScanReqCallback)
11867 {
11868 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11869 }
11870 else
11871 {
11872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11873 "%s:HDD callback is null", __func__);
11874 VOS_ASSERT(0);
11875 }
11876
11877 vos_mem_free(pHddSetBatchScanRsp);
11878 return ;
11879}
11880
11881/*==========================================================================
11882 FUNCTION WDA_ProcessSetBatchScanReq
11883
11884 DESCRIPTION
11885 API to send set batch scan request to WDI
11886
11887 PARAMETERS
11888 pWDA: Pointer to WDA context
11889 pSetBatchScanReq: Pointer to set batch scan req
11890
11891 RETURN VALUE
11892 NONE
11893
11894===========================================================================*/
11895VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11896 tSirSetBatchScanReq *pSetBatchScanReq)
11897{
11898 WDI_Status status;
11899 tWDA_ReqParams *pWdaParams ;
11900 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11901
11902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11903 "------> %s " ,__func__);
11904
11905 pWdiSetBatchScanReq =
11906 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11907 if (NULL == pWdiSetBatchScanReq)
11908 {
11909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11910 "%s: VOS MEM Alloc Failure", __func__);
11911 vos_mem_free(pSetBatchScanReq);
11912 VOS_ASSERT(0);
11913 return VOS_STATUS_E_NOMEM;
11914 }
11915
11916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11917 if (NULL == pWdaParams)
11918 {
11919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11920 "%s: VOS MEM Alloc Failure", __func__);
11921 VOS_ASSERT(0);
11922 vos_mem_free(pSetBatchScanReq);
11923 vos_mem_free(pWdiSetBatchScanReq);
11924 return VOS_STATUS_E_NOMEM;
11925 }
11926
11927 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11928 pWdiSetBatchScanReq->numberOfScansToBatch =
11929 pSetBatchScanReq->numberOfScansToBatch;
11930 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11931 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11932 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11933
11934 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11935 pWdaParams->pWdaContext = pWDA;
11936 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11937
11938 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11939 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11940 if (IS_WDI_STATUS_FAILURE(status))
11941 {
11942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11943 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11945 vos_mem_free(pWdaParams->wdaMsgParam);
11946 vos_mem_free(pWdaParams);
11947 }
11948 return CONVERT_WDI2VOS_STATUS(status);
11949}
11950
11951#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011952/*
11953 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11954 *
11955 * DESCRIPTION: This function sends start/update OBSS scan
11956 * inidcation message to WDI
11957 *
11958 * PARAM:
11959 * pWDA: pointer to WDA context
11960 * pReq: pointer to start OBSS scan request
11961 */
11962VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11963 tSirHT40OBSSScanInd *pReq)
11964{
11965 WDI_Status status;
11966 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11967 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011968
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11970 "------> %s " ,__func__);
11971 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11972 wdiOBSSScanParams.pUserData = pWDA;
11973
11974 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11975 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11976 pWdiOBSSScanInd->scanType = pReq->scanType;
11977 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11978 pReq->OBSSScanActiveDwellTime;
11979 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11980 pReq->OBSSScanPassiveDwellTime;
11981 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11982 pReq->BSSChannelWidthTriggerScanInterval;
11983 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11984 pReq->BSSWidthChannelTransitionDelayFactor;
11985 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11986 pReq->OBSSScanActiveTotalPerChannel;
11987 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11988 pReq->OBSSScanPassiveTotalPerChannel;
11989 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11990 pReq->OBSSScanActivityThreshold;
11991 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11992 vos_mem_copy(pWdiOBSSScanInd->channels,
11993 pReq->channels,
11994 pReq->channelCount);
11995 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11996 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11997 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11998 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11999 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12000
12001 vos_mem_copy(pWdiOBSSScanInd->ieField,
12002 pReq->ieField,
12003 pReq->ieFieldLen);
12004
12005 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12006 if (WDI_STATUS_PENDING == status)
12007 {
12008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12009 "Pending received for %s:%d ",__func__,__LINE__ );
12010 }
12011 else if (WDI_STATUS_SUCCESS_SYNC != status)
12012 {
12013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12014 "Failure in %s:%d ",__func__,__LINE__ );
12015 }
12016 return CONVERT_WDI2VOS_STATUS(status) ;
12017}
12018/*
12019 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12020 *
12021 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12022 *
12023 * PARAM:
12024 * pWDA: pointer to WDA context
12025 * pReq: pointer to stop batch scan request
12026 */
12027VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12028 tANI_U8 *bssIdx)
12029{
12030 WDI_Status status;
12031
12032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12033 "------> %s " ,__func__);
12034
12035 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12036 if (WDI_STATUS_PENDING == status)
12037 {
12038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12039 "Pending received for %s:%d ",__func__,__LINE__ );
12040 }
12041 else if (WDI_STATUS_SUCCESS_SYNC != status)
12042 {
12043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12044 "Failure in %s:%d ",__func__,__LINE__ );
12045 }
12046 return CONVERT_WDI2VOS_STATUS(status) ;
12047}
Yue Mab9c86f42013-08-14 15:59:08 -070012048/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012049 * FUNCTION: WDA_ProcessRateUpdateInd
12050 *
12051 */
12052VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12053 tSirRateUpdateInd *pRateUpdateParams)
12054{
12055 WDI_Status wdiStatus;
12056 WDI_RateUpdateIndParams rateUpdateParams;
12057
12058 vos_mem_copy(rateUpdateParams.bssid,
12059 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12060
12061 rateUpdateParams.ucastDataRateTxFlag =
12062 pRateUpdateParams->ucastDataRateTxFlag;
12063 rateUpdateParams.reliableMcastDataRateTxFlag =
12064 pRateUpdateParams->reliableMcastDataRateTxFlag;
12065 rateUpdateParams.mcastDataRate24GHzTxFlag =
12066 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12067 rateUpdateParams.mcastDataRate5GHzTxFlag =
12068 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12069
12070 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12071 rateUpdateParams.reliableMcastDataRate =
12072 pRateUpdateParams->reliableMcastDataRate;
12073 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12074 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12075
12076 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12077 rateUpdateParams.pUserData = pWDA;
12078
12079 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12080
12081 if (WDI_STATUS_PENDING == wdiStatus)
12082 {
12083 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12084 "Pending received for %s:%d", __func__, __LINE__ );
12085 }
12086 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12087 {
12088 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12089 "Failure in %s:%d", __func__, __LINE__ );
12090 }
12091
12092 vos_mem_free(pRateUpdateParams);
12093
12094 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12095}
12096
12097/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012098 * -------------------------------------------------------------------------
12099 * DATA interface with WDI for Mgmt Frames
12100 * -------------------------------------------------------------------------
12101 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012102/*
12103 * FUNCTION: WDA_TxComplete
12104 * Callback function for the WDA_TxPacket
12105 */
12106VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12107 VOS_STATUS status )
12108{
12109
12110 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12111 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012112 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012113
12114 if(NULL == wdaContext)
12115 {
12116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12117 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012118 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012119 VOS_ASSERT(0);
12120 return VOS_STATUS_E_FAILURE;
12121 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012122
12123 /*Check if frame was timed out or not*/
12124 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12125 (v_PVOID_t)&uUserData);
12126
12127 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12128 {
12129 /*Discard frame - no further processing is needed*/
12130 vos_pkt_return_packet(pData);
12131 return VOS_STATUS_SUCCESS;
12132 }
12133
Jeff Johnson295189b2012-06-20 16:38:30 -070012134 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12135 if( NULL!=wdaContext->pTxCbFunc)
12136 {
12137 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012138 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012139 {
12140 wdaContext->pTxCbFunc(pMac, pData);
12141 }
12142 else
12143 {
12144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012145 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012146 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012147 //Return from here since we reaching here because the packet already timeout
12148 return status;
12149 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012150 }
12151
12152 /*
12153 * Trigger the event to bring the HAL TL Tx complete function to come
12154 * out of wait
12155 * Let the coe above to complete the packet first. When this event is set,
12156 * the thread waiting for the event may run and set Vospacket_freed causing the original
12157 * packet not being freed.
12158 */
12159 status = vos_event_set(&wdaContext->txFrameEvent);
12160 if(!VOS_IS_STATUS_SUCCESS(status))
12161 {
12162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012163 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012164 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012165 return status;
12166}
Jeff Johnson295189b2012-06-20 16:38:30 -070012167/*
12168 * FUNCTION: WDA_TxPacket
12169 * Forward TX management frame to WDI
12170 */
12171VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12172 void *pFrmBuf,
12173 tANI_U16 frmLen,
12174 eFrameType frmType,
12175 eFrameTxDir txDir,
12176 tANI_U8 tid,
12177 pWDATxRxCompFunc pCompFunc,
12178 void *pData,
12179 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012180 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012181{
12182 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12183 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12184 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12185 tANI_U8 eventIdx = 0;
12186 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12187 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012188 if((NULL == pWDA)||(NULL == pFrmBuf))
12189 {
12190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012191 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012192 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012193 VOS_ASSERT(0);
12194 return VOS_STATUS_E_FAILURE;
12195 }
12196
12197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012198 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012199 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12200 if(NULL == pMac)
12201 {
12202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012203 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012204 VOS_ASSERT(0);
12205 return VOS_STATUS_E_FAILURE;
12206 }
12207
12208
12209
12210 /* store the call back function in WDA context */
12211 pWDA->pTxCbFunc = pCompFunc;
12212 /* store the call back for the function of ackTxComplete */
12213 if( pAckTxComp )
12214 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012215 if( NULL != pWDA->pAckTxCbFunc )
12216 {
12217 /* Already TxComp is active no need to active again */
12218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012219 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012220 pWDA->pAckTxCbFunc( pMac, 0);
12221 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012222
Jeff Johnsone7245742012-09-05 17:12:55 -070012223 if( VOS_STATUS_SUCCESS !=
12224 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12225 {
12226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12227 "Tx Complete timeout Timer Stop Failed ");
12228 }
12229 else
12230 {
12231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012232 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012233 }
12234 }
12235
12236 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12237 pWDA->pAckTxCbFunc = pAckTxComp;
12238 if( VOS_STATUS_SUCCESS !=
12239 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12240 {
12241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12242 "Tx Complete Timer Start Failed ");
12243 pWDA->pAckTxCbFunc = NULL;
12244 return eHAL_STATUS_FAILURE;
12245 }
12246 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012247 /* Reset the event to be not signalled */
12248 status = vos_event_reset(&pWDA->txFrameEvent);
12249 if(!VOS_IS_STATUS_SUCCESS(status))
12250 {
12251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012252 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012253 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12254 if( pAckTxComp )
12255 {
12256 pWDA->pAckTxCbFunc = NULL;
12257 if( VOS_STATUS_SUCCESS !=
12258 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12259 {
12260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12261 "Tx Complete timeout Timer Stop Failed ");
12262 }
12263 }
12264 return VOS_STATUS_E_FAILURE;
12265 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012266
12267 /* If Peer Sta mask is set don't overwrite to self sta */
12268 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012269 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012270 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012271 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012272 else
12273 {
Ganesh K08bce952012-12-13 15:04:41 -080012274 /* Get system role, use the self station if in unknown role or STA role */
12275 systemRole = wdaGetGlobalSystemRole(pMac);
12276 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12277 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012278#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012279 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012280#endif
Ganesh K08bce952012-12-13 15:04:41 -080012281 ))
12282 {
12283 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12284 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012286
Jeff Johnsone7245742012-09-05 17:12:55 -070012287 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12288 disassoc frame reaches the HW, HAL has already deleted the peer station */
12289 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012291 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012292 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012293 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012294 /*Send Probe request frames on self sta idx*/
12295 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012296 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012297 /* Since we donot want probe responses to be retried, send probe responses
12298 through the NO_ACK queues */
12299 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12300 {
12301 //probe response is sent out using self station and no retries options.
12302 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12303 }
12304 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12305 {
12306 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12307 }
12308 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012309 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012310
12311 /*Set frame tag to 0
12312 We will use the WDA user data in order to tag a frame as expired*/
12313 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12314 (v_PVOID_t)0);
12315
12316
12317 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12318 frmLen, ucTypeSubType, tid,
12319 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12320 {
12321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012322 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012323 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012324 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 -070012325 if( pAckTxComp )
12326 {
12327 pWDA->pAckTxCbFunc = NULL;
12328 if( VOS_STATUS_SUCCESS !=
12329 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12330 {
12331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12332 "Tx Complete timeout Timer Stop Failed ");
12333 }
12334 }
12335 return VOS_STATUS_E_FAILURE;
12336 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012337 /*
12338 * Wait for the event to be set by the TL, to get the response of TX
12339 * complete, this event should be set by the Callback function called by TL
12340 */
12341 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12342 &eventIdx);
12343 if(!VOS_IS_STATUS_SUCCESS(status))
12344 {
12345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12346 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012347 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012348 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12349 after the packet gets completed(packet freed once)*/
12350
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012351 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012352 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012353
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012354 /*Tag Frame as timed out for later deletion*/
12355 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12356 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
12357
Jeff Johnson295189b2012-06-20 16:38:30 -070012358 /* check whether the packet was freed already,so need not free again when
12359 * TL calls the WDA_Txcomplete routine
12360 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012361 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12362 /*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 -070012363 {
12364 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012365 } */
12366
Jeff Johnson295189b2012-06-20 16:38:30 -070012367 if( pAckTxComp )
12368 {
12369 pWDA->pAckTxCbFunc = NULL;
12370 if( VOS_STATUS_SUCCESS !=
12371 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12372 {
12373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12374 "Tx Complete timeout Timer Stop Failed ");
12375 }
12376 }
12377 status = VOS_STATUS_E_FAILURE;
12378 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012379#ifdef WLAN_DUMP_MGMTFRAMES
12380 if (VOS_IS_STATUS_SUCCESS(status))
12381 {
12382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12383 "%s() TX packet : SubType %d", __func__,pFc->subType);
12384 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12385 pData, frmLen);
12386 }
12387#endif
12388
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012389 if (VOS_IS_STATUS_SUCCESS(status))
12390 {
12391 if (pMac->fEnableDebugLog & 0x1)
12392 {
12393 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12394 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12395 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12396 {
12397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12398 pFc->type, pFc->subType);
12399 }
12400 }
12401 }
12402
12403
Jeff Johnson295189b2012-06-20 16:38:30 -070012404 return status;
12405}
Jeff Johnson295189b2012-06-20 16:38:30 -070012406/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012407 * FUNCTION: WDA_ProcessDHCPStartInd
12408 * Forward DHCP Start to WDI
12409 */
12410static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12411 tAniDHCPInd *dhcpStartInd)
12412{
12413 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012414 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012415
c_hpothu0b0cab72014-02-13 21:52:40 +053012416 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12417 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012418 sizeof(tSirMacAddr));
12419
c_hpothu0b0cab72014-02-13 21:52:40 +053012420 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012421
c_hpothu0b0cab72014-02-13 21:52:40 +053012422 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012423 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12425 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012426 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012427 else if (WDI_STATUS_SUCCESS_SYNC != status)
12428 {
12429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12430 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12431 }
12432
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012433 vos_mem_free(dhcpStartInd);
12434 return CONVERT_WDI2VOS_STATUS(status) ;
12435}
12436
12437 /*
12438 * FUNCTION: WDA_ProcessDHCPStopInd
12439 * Forward DHCP Stop to WDI
12440 */
12441 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12442 tAniDHCPInd *dhcpStopInd)
12443 {
12444 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012445 WDI_DHCPInd wdiDHCPInd;
12446
12447 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12448 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12449
12450 status = WDI_dhcpStopInd(&wdiDHCPInd);
12451
12452 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012453 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12455 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012456 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012457 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012458 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12460 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012461 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012462
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012463 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012464
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012465 return CONVERT_WDI2VOS_STATUS(status) ;
12466 }
12467
12468/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012469 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12470 *
12471 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12472 *
12473 * PARAM:
12474 * pWDA: pointer to WDA context
12475 * pReq: pointer to stop batch scan request
12476 */
12477VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12478 tpSpoofMacAddrReqParams pReq)
12479{
12480 WDI_Status wdiStatus;
12481 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12482 tWDA_ReqParams *pWdaParams;
12483
12484 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12485 sizeof(WDI_SpoofMacAddrInfoType));
12486 if(NULL == WDI_SpoofMacAddrInfoParams) {
12487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12488 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12489 VOS_ASSERT(0);
12490 return VOS_STATUS_E_NOMEM;
12491 }
12492 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12493 if(NULL == pWdaParams) {
12494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12495 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012496 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012497 VOS_ASSERT(0);
12498 return VOS_STATUS_E_NOMEM;
12499 }
12500
12501 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12502 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12503
12504 pWdaParams->pWdaContext = pWDA;
12505 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012506 pWdaParams->wdaMsgParam = (void *)pReq;
12507
12508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12509 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12510
Siddharth Bhal171788a2014-09-29 21:02:40 +053012511 /* store Params pass it to WDI */
12512 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12513
12514 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012515 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12516 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012517
12518 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12519 {
12520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12521 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12523 vos_mem_free(pWdaParams->wdaMsgParam);
12524 vos_mem_free(pWdaParams);
12525 }
12526
12527 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12528}
12529
12530/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012531 * FUNCTION: WDA_McProcessMsg
12532 * Trigger DAL-AL to start CFG download
12533 */
12534VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12535{
12536 VOS_STATUS status = VOS_STATUS_SUCCESS;
12537 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 if(NULL == pMsg)
12539 {
12540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012541 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012542 VOS_ASSERT(0);
12543 return VOS_STATUS_E_FAILURE;
12544 }
12545
12546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012547 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012548
12549 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12550 if(NULL == pWDA )
12551 {
12552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012553 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012554 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012555 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012556 return VOS_STATUS_E_FAILURE;
12557 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012558 /* Process all the WDA messages.. */
12559 switch( pMsg->type )
12560 {
12561 case WNI_CFG_DNLD_REQ:
12562 {
12563 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012564 /* call WDA complete event if config download success */
12565 if( VOS_IS_STATUS_SUCCESS(status) )
12566 {
12567 vos_WDAComplete_cback(pVosContext);
12568 }
12569 else
12570 {
12571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12572 "WDA Config Download failure" );
12573 }
12574 break ;
12575 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012576 /*
12577 * Init SCAN request from PE, convert it into DAL format
12578 * and send it to DAL
12579 */
12580 case WDA_INIT_SCAN_REQ:
12581 {
12582 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12583 break ;
12584 }
12585 /* start SCAN request from PE */
12586 case WDA_START_SCAN_REQ:
12587 {
12588 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12589 break ;
12590 }
12591 /* end SCAN request from PE */
12592 case WDA_END_SCAN_REQ:
12593 {
12594 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12595 break ;
12596 }
12597 /* end SCAN request from PE */
12598 case WDA_FINISH_SCAN_REQ:
12599 {
12600 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12601 break ;
12602 }
12603 /* join request from PE */
12604 case WDA_CHNL_SWITCH_REQ:
12605 {
12606 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12607 {
12608 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12609 }
12610 else
12611 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012612 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12613 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12614 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12615 {
12616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12617 "call ProcessChannelSwitchReq_V1" );
12618 WDA_ProcessChannelSwitchReq_V1(pWDA,
12619 (tSwitchChannelParams*)pMsg->bodyptr) ;
12620 }
12621 else
12622 {
12623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12624 "call ProcessChannelSwitchReq" );
12625 WDA_ProcessChannelSwitchReq(pWDA,
12626 (tSwitchChannelParams*)pMsg->bodyptr) ;
12627 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012628 }
12629 break ;
12630 }
12631 /* ADD BSS request from PE */
12632 case WDA_ADD_BSS_REQ:
12633 {
12634 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12635 break ;
12636 }
12637 case WDA_ADD_STA_REQ:
12638 {
12639 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12640 break ;
12641 }
12642 case WDA_DELETE_BSS_REQ:
12643 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012644 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12645 break ;
12646 }
12647 case WDA_DELETE_STA_REQ:
12648 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012649 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12650 break ;
12651 }
12652 case WDA_CONFIG_PARAM_UPDATE_REQ:
12653 {
12654 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12655 break ;
12656 }
12657 case WDA_SET_BSSKEY_REQ:
12658 {
12659 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12660 break ;
12661 }
12662 case WDA_SET_STAKEY_REQ:
12663 {
12664 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12665 break ;
12666 }
12667 case WDA_SET_STA_BCASTKEY_REQ:
12668 {
12669 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12670 break ;
12671 }
12672 case WDA_REMOVE_BSSKEY_REQ:
12673 {
12674 WDA_ProcessRemoveBssKeyReq(pWDA,
12675 (tRemoveBssKeyParams *)pMsg->bodyptr);
12676 break ;
12677 }
12678 case WDA_REMOVE_STAKEY_REQ:
12679 {
12680 WDA_ProcessRemoveStaKeyReq(pWDA,
12681 (tRemoveStaKeyParams *)pMsg->bodyptr);
12682 break ;
12683 }
12684 case WDA_REMOVE_STA_BCASTKEY_REQ:
12685 {
12686 /* TODO: currently UMAC is not sending this request, Add the code for
12687 handling this request when UMAC supports */
12688 break;
12689 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012690#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012691 case WDA_TSM_STATS_REQ:
12692 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012693 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012694 break;
12695 }
12696#endif
12697 case WDA_UPDATE_EDCA_PROFILE_IND:
12698 {
12699 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12700 break;
12701 }
12702 case WDA_ADD_TS_REQ:
12703 {
12704 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12705 break;
12706 }
12707 case WDA_DEL_TS_REQ:
12708 {
12709 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12710 break;
12711 }
12712 case WDA_ADDBA_REQ:
12713 {
12714 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12715 break;
12716 }
12717 case WDA_DELBA_IND:
12718 {
12719 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12720 break;
12721 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012722 case WDA_UPDATE_CHAN_LIST_REQ:
12723 {
12724 WDA_ProcessUpdateChannelList(pWDA,
12725 (tSirUpdateChanList *)pMsg->bodyptr);
12726 break;
12727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012728 case WDA_SET_LINK_STATE:
12729 {
12730 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12731 break;
12732 }
12733 case WDA_GET_STATISTICS_REQ:
12734 {
12735 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12736 break;
12737 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012738#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012739 case WDA_GET_ROAM_RSSI_REQ:
12740 {
12741 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12742 break;
12743 }
12744#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012745 case WDA_PWR_SAVE_CFG:
12746 {
12747 if(pWDA->wdaState == WDA_READY_STATE)
12748 {
12749 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12750 }
12751 else
12752 {
12753 if(NULL != pMsg->bodyptr)
12754 {
12755 vos_mem_free(pMsg->bodyptr);
12756 }
12757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12758 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12759 }
12760 break;
12761 }
12762 case WDA_ENTER_IMPS_REQ:
12763 {
12764 if(pWDA->wdaState == WDA_READY_STATE)
12765 {
12766 WDA_ProcessEnterImpsReq(pWDA);
12767 }
12768 else
12769 {
12770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12771 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12772 }
12773 break;
12774 }
12775 case WDA_EXIT_IMPS_REQ:
12776 {
12777 if(pWDA->wdaState == WDA_READY_STATE)
12778 {
12779 WDA_ProcessExitImpsReq(pWDA);
12780 }
12781 else
12782 {
12783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12784 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12785 }
12786 break;
12787 }
12788 case WDA_ENTER_BMPS_REQ:
12789 {
12790 if(pWDA->wdaState == WDA_READY_STATE)
12791 {
12792 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12793 }
12794 else
12795 {
12796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12797 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12798 }
12799 break;
12800 }
12801 case WDA_EXIT_BMPS_REQ:
12802 {
12803 if(pWDA->wdaState == WDA_READY_STATE)
12804 {
12805 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12806 }
12807 else
12808 {
12809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12810 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12811 }
12812 break;
12813 }
12814 case WDA_ENTER_UAPSD_REQ:
12815 {
12816 if(pWDA->wdaState == WDA_READY_STATE)
12817 {
12818 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12819 }
12820 else
12821 {
12822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12823 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12824 }
12825 break;
12826 }
12827 case WDA_EXIT_UAPSD_REQ:
12828 {
12829 if(pWDA->wdaState == WDA_READY_STATE)
12830 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012831 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012832 }
12833 else
12834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12836 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12837 }
12838 break;
12839 }
12840 case WDA_UPDATE_UAPSD_IND:
12841 {
12842 if(pWDA->wdaState == WDA_READY_STATE)
12843 {
12844 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12845 }
12846 else
12847 {
12848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12849 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12850 }
12851 break;
12852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012853 case WDA_REGISTER_PE_CALLBACK :
12854 {
12855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12856 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12857 /*TODO: store the PE callback */
12858 /* Do Nothing? MSG Body should be freed at here */
12859 if(NULL != pMsg->bodyptr)
12860 {
12861 vos_mem_free(pMsg->bodyptr);
12862 }
12863 break;
12864 }
12865 case WDA_SYS_READY_IND :
12866 {
12867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12868 "Handling msg type WDA_SYS_READY_IND " );
12869 pWDA->wdaState = WDA_READY_STATE;
12870 if(NULL != pMsg->bodyptr)
12871 {
12872 vos_mem_free(pMsg->bodyptr);
12873 }
12874 break;
12875 }
12876 case WDA_BEACON_FILTER_IND :
12877 {
12878 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12879 break;
12880 }
12881 case WDA_BTC_SET_CFG:
12882 {
12883 /*TODO: handle this while dealing with BTC */
12884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12885 "Handling msg type WDA_BTC_SET_CFG " );
12886 /* Do Nothing? MSG Body should be freed at here */
12887 if(NULL != pMsg->bodyptr)
12888 {
12889 vos_mem_free(pMsg->bodyptr);
12890 }
12891 break;
12892 }
12893 case WDA_SIGNAL_BT_EVENT:
12894 {
12895 /*TODO: handle this while dealing with BTC */
12896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12897 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12898 /* Do Nothing? MSG Body should be freed at here */
12899 if(NULL != pMsg->bodyptr)
12900 {
12901 vos_mem_free(pMsg->bodyptr);
12902 }
12903 break;
12904 }
12905 case WDA_CFG_RXP_FILTER_REQ:
12906 {
12907 WDA_ProcessConfigureRxpFilterReq(pWDA,
12908 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12909 break;
12910 }
12911 case WDA_SET_HOST_OFFLOAD:
12912 {
12913 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12914 break;
12915 }
12916 case WDA_SET_KEEP_ALIVE:
12917 {
12918 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12919 break;
12920 }
12921#ifdef WLAN_NS_OFFLOAD
12922 case WDA_SET_NS_OFFLOAD:
12923 {
12924 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12925 break;
12926 }
12927#endif //WLAN_NS_OFFLOAD
12928 case WDA_ADD_STA_SELF_REQ:
12929 {
12930 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12931 break;
12932 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012933 case WDA_DEL_STA_SELF_REQ:
12934 {
12935 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12936 break;
12937 }
12938 case WDA_WOWL_ADD_BCAST_PTRN:
12939 {
12940 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12941 break;
12942 }
12943 case WDA_WOWL_DEL_BCAST_PTRN:
12944 {
12945 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12946 break;
12947 }
12948 case WDA_WOWL_ENTER_REQ:
12949 {
12950 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12951 break;
12952 }
12953 case WDA_WOWL_EXIT_REQ:
12954 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012955 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012956 break;
12957 }
12958 case WDA_TL_FLUSH_AC_REQ:
12959 {
12960 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12961 break;
12962 }
12963 case WDA_SIGNAL_BTAMP_EVENT:
12964 {
12965 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12966 break;
12967 }
Abhishek Singh85b74712014-10-08 11:38:19 +053012968 case WDA_FW_STATS_GET_REQ:
12969 {
12970 WDA_ProcessFWStatsGetReq(pWDA,
12971 (tSirFWStatsGetReq *)pMsg->bodyptr);
12972 break;
12973 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053012974#ifdef WLAN_FEATURE_LINK_LAYER_STATS
12975 case WDA_LINK_LAYER_STATS_SET_REQ:
12976 {
12977 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
12978 break;
12979 }
12980 case WDA_LINK_LAYER_STATS_GET_REQ:
12981 {
12982 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
12983 break;
12984 }
12985 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
12986 {
12987 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
12988 break;
12989 }
12990#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053012991#ifdef WLAN_FEATURE_EXTSCAN
12992 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
12993 {
12994 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
12995 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
12996 break;
12997 }
12998 case WDA_EXTSCAN_START_REQ:
12999 {
13000 WDA_ProcessEXTScanStartReq(pWDA,
13001 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13002 break;
13003 }
13004 case WDA_EXTSCAN_STOP_REQ:
13005 {
13006 WDA_ProcessEXTScanStopReq(pWDA,
13007 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13008 break;
13009 }
13010 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13011 {
13012 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13013 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13014 break;
13015 }
13016 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13017 {
13018 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13019 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13020 break;
13021 }
13022 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13023 {
13024 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13025 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13026 break;
13027 }
13028 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13029 {
13030 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13031 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13032 break;
13033 }
13034 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13035 {
13036 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13037 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13038 break;
13039 }
13040#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013041#ifdef WDA_UT
13042 case WDA_WDI_EVENT_MSG:
13043 {
13044 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13045 break ;
13046 }
13047#endif
13048 case WDA_UPDATE_BEACON_IND:
13049 {
13050 WDA_ProcessUpdateBeaconParams(pWDA,
13051 (tUpdateBeaconParams *)pMsg->bodyptr);
13052 break;
13053 }
13054 case WDA_SEND_BEACON_REQ:
13055 {
13056 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13057 break;
13058 }
13059 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13060 {
13061 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13062 (tSendProbeRespParams *)pMsg->bodyptr);
13063 break;
13064 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013065#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013066 case WDA_SET_MAX_TX_POWER_REQ:
13067 {
13068 WDA_ProcessSetMaxTxPowerReq(pWDA,
13069 (tMaxTxPowerParams *)pMsg->bodyptr);
13070 break;
13071 }
13072#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013073 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13074 {
13075 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13076 pMsg->bodyptr);
13077 break;
13078 }
schang86c22c42013-03-13 18:41:24 -070013079 case WDA_SET_TX_POWER_REQ:
13080 {
13081 WDA_ProcessSetTxPowerReq(pWDA,
13082 (tSirSetTxPowerReq *)pMsg->bodyptr);
13083 break;
13084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013085 case WDA_SET_P2P_GO_NOA_REQ:
13086 {
13087 WDA_ProcessSetP2PGONOAReq(pWDA,
13088 (tP2pPsParams *)pMsg->bodyptr);
13089 break;
13090 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013091 /* timer related messages */
13092 case WDA_TIMER_BA_ACTIVITY_REQ:
13093 {
13094 WDA_BaCheckActivity(pWDA) ;
13095 break ;
13096 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013097
13098 /* timer related messages */
13099 case WDA_TIMER_TRAFFIC_STATS_IND:
13100 {
13101 WDA_TimerTrafficStatsInd(pWDA);
13102 break;
13103 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013104#ifdef WLAN_FEATURE_VOWIFI_11R
13105 case WDA_AGGR_QOS_REQ:
13106 {
13107 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13108 break;
13109 }
13110#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013111 case WDA_FTM_CMD_REQ:
13112 {
13113 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13114 break ;
13115 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013116#ifdef FEATURE_OEM_DATA_SUPPORT
13117 case WDA_START_OEM_DATA_REQ:
13118 {
13119 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13120 break;
13121 }
13122#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013123 /* Tx Complete Time out Indication */
13124 case WDA_TX_COMPLETE_TIMEOUT_IND:
13125 {
13126 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13127 break;
13128 }
13129 case WDA_WLAN_SUSPEND_IND:
13130 {
13131 WDA_ProcessWlanSuspendInd(pWDA,
13132 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13133 break;
13134 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013135 case WDA_WLAN_RESUME_REQ:
13136 {
13137 WDA_ProcessWlanResumeReq(pWDA,
13138 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13139 break;
13140 }
13141
13142 case WDA_UPDATE_CF_IND:
13143 {
13144 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13145 pMsg->bodyptr = NULL;
13146 break;
13147 }
13148#ifdef FEATURE_WLAN_SCAN_PNO
13149 case WDA_SET_PNO_REQ:
13150 {
13151 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13152 break;
13153 }
13154 case WDA_UPDATE_SCAN_PARAMS_REQ:
13155 {
13156 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13157 break;
13158 }
13159 case WDA_SET_RSSI_FILTER_REQ:
13160 {
13161 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13162 break;
13163 }
13164#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013165#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013166 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013167 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013168 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013169 break;
13170 }
13171#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013172 case WDA_SET_TX_PER_TRACKING_REQ:
13173 {
13174 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13175 break;
13176 }
13177
13178#ifdef WLAN_FEATURE_PACKET_FILTERING
13179 case WDA_8023_MULTICAST_LIST_REQ:
13180 {
13181 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13182 break;
13183 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013184 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13185 {
13186 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13187 break;
13188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013189 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13190 {
13191 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13192 break;
13193 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013194 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13195 {
13196 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13197 break;
13198 }
13199#endif // WLAN_FEATURE_PACKET_FILTERING
13200
13201
13202 case WDA_TRANSMISSION_CONTROL_IND:
13203 {
13204 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13205 break;
13206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013207 case WDA_SET_POWER_PARAMS_REQ:
13208 {
13209 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13210 break;
13211 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013212#ifdef WLAN_FEATURE_GTK_OFFLOAD
13213 case WDA_GTK_OFFLOAD_REQ:
13214 {
13215 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13216 break;
13217 }
13218
13219 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13220 {
13221 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13222 break;
13223 }
13224#endif //WLAN_FEATURE_GTK_OFFLOAD
13225
13226 case WDA_SET_TM_LEVEL_REQ:
13227 {
13228 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13229 break;
13230 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013231
Mohit Khanna4a70d262012-09-11 16:30:12 -070013232 case WDA_UPDATE_OP_MODE:
13233 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013234 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13235 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13236 {
13237 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13238 }
13239 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013240 {
13241 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13242 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13243 else
13244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013245 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013246 }
13247 else
13248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013249 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013250 break;
13251 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013252#ifdef WLAN_FEATURE_11W
13253 case WDA_EXCLUDE_UNENCRYPTED_IND:
13254 {
13255 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13256 break;
13257 }
13258#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013259#ifdef FEATURE_WLAN_TDLS
13260 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13261 {
13262 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13263 break;
13264 }
13265#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013266 case WDA_DHCP_START_IND:
13267 {
13268 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13269 break;
13270 }
13271 case WDA_DHCP_STOP_IND:
13272 {
13273 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13274 break;
13275 }
Leo Chang9056f462013-08-01 19:21:11 -070013276#ifdef FEATURE_WLAN_LPHB
13277 case WDA_LPHB_CONF_REQ:
13278 {
13279 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13280 break;
13281 }
13282#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013283 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13284 {
13285 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13286 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13287 break;
13288 }
13289 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13290 {
13291 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13292 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13293 break;
13294 }
13295
Rajeev79dbe4c2013-10-05 11:03:42 +053013296#ifdef FEATURE_WLAN_BATCH_SCAN
13297 case WDA_SET_BATCH_SCAN_REQ:
13298 {
13299 WDA_ProcessSetBatchScanReq(pWDA,
13300 (tSirSetBatchScanReq *)pMsg->bodyptr);
13301 break;
13302 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013303 case WDA_RATE_UPDATE_IND:
13304 {
13305 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13306 break;
13307 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013308 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13309 {
13310 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13311 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13312 break;
13313 }
13314 case WDA_STOP_BATCH_SCAN_IND:
13315 {
13316 WDA_ProcessStopBatchScanInd(pWDA,
13317 (tSirStopBatchScanInd *)pMsg->bodyptr);
13318 break;
13319 }
c_hpothu92367912014-05-01 15:18:17 +053013320 case WDA_GET_BCN_MISS_RATE_REQ:
13321 WDA_ProcessGetBcnMissRateReq(pWDA,
13322 (tSirBcnMissRateReq *)pMsg->bodyptr);
13323 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013324#endif
13325
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013326 case WDA_HT40_OBSS_SCAN_IND:
13327 {
13328 WDA_ProcessHT40OBSSScanInd(pWDA,
13329 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13330 break;
13331 }
13332 case WDA_HT40_OBSS_STOP_SCAN_IND:
13333 {
13334 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13335 (tANI_U8*)pMsg->bodyptr);
13336 break;
13337 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013338// tdlsoffchan
13339#ifdef FEATURE_WLAN_TDLS
13340 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13341 {
13342 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13343 break;
13344 }
13345#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013346 case WDA_SPOOF_MAC_ADDR_REQ:
13347 {
13348 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13349 break;
13350 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053013351 case WDA_ENCRYPT_MSG_REQ:
13352 {
13353 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
13354 break;
13355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013356 default:
13357 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013359 "No Handling for msg type %x in WDA "
13360 ,pMsg->type);
13361 /* Do Nothing? MSG Body should be freed at here */
13362 if(NULL != pMsg->bodyptr)
13363 {
13364 vos_mem_free(pMsg->bodyptr);
13365 }
13366 //WDA_VOS_ASSERT(0) ;
13367 }
13368 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013369 return status ;
13370}
13371
Jeff Johnson295189b2012-06-20 16:38:30 -070013372/*
13373 * FUNCTION: WDA_LowLevelIndCallback
13374 * IND API callback from WDI, send Ind to PE
13375 */
13376void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13377 void* pUserData )
13378{
13379 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13380#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13381 tSirRSSINotification rssiNotification;
13382#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013383 if(NULL == pWDA)
13384 {
13385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013386 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013387 VOS_ASSERT(0);
13388 return ;
13389 }
13390
13391 switch(wdiLowLevelInd->wdiIndicationType)
13392 {
13393 case WDI_RSSI_NOTIFICATION_IND:
13394 {
13395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13396 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013397#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13398 rssiNotification.bReserved =
13399 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13400 rssiNotification.bRssiThres1NegCross =
13401 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13402 rssiNotification.bRssiThres1PosCross =
13403 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13404 rssiNotification.bRssiThres2NegCross =
13405 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13406 rssiNotification.bRssiThres2PosCross =
13407 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13408 rssiNotification.bRssiThres3NegCross =
13409 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13410 rssiNotification.bRssiThres3PosCross =
13411 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013412 rssiNotification.avgRssi = (v_S7_t)
13413 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013414 WLANTL_BMPSRSSIRegionChangedNotification(
13415 pWDA->pVosContext,
13416 &rssiNotification);
13417#endif
13418 break ;
13419 }
13420 case WDI_MISSED_BEACON_IND:
13421 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013422 tpSirSmeMissedBeaconInd pMissBeacInd =
13423 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13425 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013426 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013427 if(NULL == pMissBeacInd)
13428 {
13429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13430 "%s: VOS MEM Alloc Failure", __func__);
13431 break;
13432 }
13433 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13434 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13435 pMissBeacInd->bssIdx =
13436 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13437 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013438 break ;
13439 }
13440 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13441 {
13442 /* TODO: Decode Ind and send Ind to PE */
13443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13444 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13445 break ;
13446 }
13447
13448 case WDI_MIC_FAILURE_IND:
13449 {
13450 tpSirSmeMicFailureInd pMicInd =
13451 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13452
13453 if(NULL == pMicInd)
13454 {
13455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013456 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013457 break;
13458 }
13459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13460 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013461 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13462 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13463 vos_mem_copy(pMicInd->bssId,
13464 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13465 sizeof(tSirMacAddr));
13466 vos_mem_copy(pMicInd->info.srcMacAddr,
13467 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13468 sizeof(tSirMacAddr));
13469 vos_mem_copy(pMicInd->info.taMacAddr,
13470 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13471 sizeof(tSirMacAddr));
13472 vos_mem_copy(pMicInd->info.dstMacAddr,
13473 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13474 sizeof(tSirMacAddr));
13475 vos_mem_copy(pMicInd->info.rxMacAddr,
13476 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13477 sizeof(tSirMacAddr));
13478 pMicInd->info.multicast =
13479 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13480 pMicInd->info.keyId=
13481 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13482 pMicInd->info.IV1=
13483 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13484 vos_mem_copy(pMicInd->info.TSC,
13485 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013486 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13487 (void *)pMicInd , 0) ;
13488 break ;
13489 }
13490 case WDI_FATAL_ERROR_IND:
13491 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013492 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013493 /* TODO: Decode Ind and send Ind to PE */
13494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13495 "Received WDI_FATAL_ERROR_IND from WDI ");
13496 break ;
13497 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013498 case WDI_DEL_STA_IND:
13499 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013500 tpDeleteStaContext pDelSTACtx =
13501 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13502
13503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13504 "Received WDI_DEL_STA_IND from WDI ");
13505 if(NULL == pDelSTACtx)
13506 {
13507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 break;
13510 }
13511 vos_mem_copy(pDelSTACtx->addr2,
13512 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13513 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013514 vos_mem_copy(pDelSTACtx->bssId,
13515 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13516 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013517 pDelSTACtx->assocId =
13518 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13519 pDelSTACtx->reasonCode =
13520 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13521 pDelSTACtx->staId =
13522 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013523 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13524 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013525 break ;
13526 }
13527 case WDI_COEX_IND:
13528 {
13529 tANI_U32 index;
13530 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053013531 tSirSmeCoexInd *pSmeCoexInd;
13532
13533 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
13534 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
13535 {
13536 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
13537 {
13538 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13539 FL("Coex state: 0x%x coex feature: 0x%x"),
13540 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
13541 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
13542
13543 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
13544 {
13545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
13546 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
13547 }
13548 }
13549 break;
13550 }
13551
13552 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013553 if(NULL == pSmeCoexInd)
13554 {
13555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013556 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013557 break;
13558 }
13559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13560 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013561 /* Message Header */
13562 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13563 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013564 /* Info from WDI Indication */
13565 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13566 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13567 {
13568 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13569 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013570 /* VOS message wrapper */
13571 vosMsg.type = eWNI_SME_COEX_IND;
13572 vosMsg.bodyptr = (void *)pSmeCoexInd;
13573 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013574 /* Send message to SME */
13575 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13576 {
13577 /* free the mem and return */
13578 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13579 }
13580 else
13581 {
13582 /* DEBUG */
13583 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13584 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13585 pSmeCoexInd->coexIndType,
13586 pSmeCoexInd->coexIndData[0],
13587 pSmeCoexInd->coexIndData[1],
13588 pSmeCoexInd->coexIndData[2],
13589 pSmeCoexInd->coexIndData[3]);
13590 }
13591 break;
13592 }
13593 case WDI_TX_COMPLETE_IND:
13594 {
13595 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13596 /* Calling TxCompleteAck Indication from wda context*/
13597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13598 "Complete Indication received from HAL");
13599 if( pWDA->pAckTxCbFunc )
13600 {
13601 if( VOS_STATUS_SUCCESS !=
13602 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13603 {
13604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13605 "Tx Complete timeout Timer Stop Failed ");
13606 }
13607 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13608 pWDA->pAckTxCbFunc = NULL;
13609 }
13610 else
13611 {
13612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13613 "Tx Complete Indication is received after timeout ");
13614 }
13615 break;
13616 }
Viral Modid86bde22012-12-10 13:09:21 -080013617 case WDI_P2P_NOA_START_IND :
13618 {
13619 tSirP2PNoaStart *pP2pNoaStart =
13620 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13621
13622 if (NULL == pP2pNoaStart)
13623 {
13624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13625 "Memory allocation failure, "
13626 "WDI_P2P_NOA_START_IND not forwarded");
13627 break;
13628 }
13629 pP2pNoaStart->status =
13630 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13631 pP2pNoaStart->bssIdx =
13632 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13633 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13634 (void *)pP2pNoaStart , 0) ;
13635 break;
13636 }
13637
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013638#ifdef FEATURE_WLAN_TDLS
13639 case WDI_TDLS_IND :
13640 {
13641 tSirTdlsInd *pTdlsInd =
13642 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13643
13644 if (NULL == pTdlsInd)
13645 {
13646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13647 "Memory allocation failure, "
13648 "WDI_TDLS_IND not forwarded");
13649 break;
13650 }
13651 pTdlsInd->status =
13652 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13653 pTdlsInd->assocId =
13654 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13655 pTdlsInd->staIdx =
13656 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13657 pTdlsInd->reasonCode =
13658 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13659 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13660 (void *)pTdlsInd , 0) ;
13661 break;
13662 }
13663#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013664 case WDI_P2P_NOA_ATTR_IND :
13665 {
13666 tSirP2PNoaAttr *pP2pNoaAttr =
13667 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13669 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013670 if (NULL == pP2pNoaAttr)
13671 {
13672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13673 "Memory allocation failure, "
13674 "WDI_P2P_NOA_ATTR_IND not forwarded");
13675 break;
13676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013677 pP2pNoaAttr->index =
13678 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13679 pP2pNoaAttr->oppPsFlag =
13680 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13681 pP2pNoaAttr->ctWin =
13682 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13683
13684 pP2pNoaAttr->uNoa1IntervalCnt =
13685 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13686 pP2pNoaAttr->uNoa1Duration =
13687 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13688 pP2pNoaAttr->uNoa1Interval =
13689 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13690 pP2pNoaAttr->uNoa1StartTime =
13691 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013692 pP2pNoaAttr->uNoa2IntervalCnt =
13693 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13694 pP2pNoaAttr->uNoa2Duration =
13695 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13696 pP2pNoaAttr->uNoa2Interval =
13697 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13698 pP2pNoaAttr->uNoa2StartTime =
13699 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013700 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13701 (void *)pP2pNoaAttr , 0) ;
13702 break;
13703 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013704#ifdef FEATURE_WLAN_SCAN_PNO
13705 case WDI_PREF_NETWORK_FOUND_IND:
13706 {
13707 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013708 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13709 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13710 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13711 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13712
Jeff Johnson295189b2012-06-20 16:38:30 -070013713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13714 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013715 if (NULL == pPrefNetworkFoundInd)
13716 {
13717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13718 "Memory allocation failure, "
13719 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013720 if (NULL !=
13721 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13722 {
13723 wpalMemoryFree(
13724 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13725 );
13726 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013728 break;
13729 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013730 /* Message Header */
13731 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013732 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013733
13734 /* Info from WDI Indication */
13735 pPrefNetworkFoundInd->ssId.length =
13736 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013737 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013738 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13739 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13740 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013741 if (NULL !=
13742 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13743 {
13744 pPrefNetworkFoundInd->frameLength =
13745 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13746 vos_mem_copy( pPrefNetworkFoundInd->data,
13747 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13748 pPrefNetworkFoundInd->frameLength);
13749 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13750 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13751 }
13752 else
13753 {
13754 pPrefNetworkFoundInd->frameLength = 0;
13755 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013756 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013757 /* VOS message wrapper */
13758 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13759 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13760 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013761 /* Send message to SME */
13762 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13763 {
13764 /* free the mem and return */
13765 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13766 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013767 break;
13768 }
13769#endif // FEATURE_WLAN_SCAN_PNO
13770
13771#ifdef WLAN_WAKEUP_EVENTS
13772 case WDI_WAKE_REASON_IND:
13773 {
13774 vos_msg_t vosMsg;
13775 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13776 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13777 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13778
13779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053013780 "[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 -070013781 wdiLowLevelInd->wdiIndicationType,
13782 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13783 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13784 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13785
13786 if (NULL == pWakeReasonInd)
13787 {
13788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13789 "Memory allocation failure, "
13790 "WDI_WAKE_REASON_IND not forwarded");
13791 break;
13792 }
13793
13794 vos_mem_zero(pWakeReasonInd, allocSize);
13795
13796 /* Message Header */
13797 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13798 pWakeReasonInd->mesgLen = allocSize;
13799
13800 /* Info from WDI Indication */
13801 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13802 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13803 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13804 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13805 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13806 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13807 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13808 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13809
13810 /* VOS message wrapper */
13811 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13812 vosMsg.bodyptr = (void *) pWakeReasonInd;
13813 vosMsg.bodyval = 0;
13814
13815 /* Send message to SME */
13816 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13817 {
13818 /* free the mem and return */
13819 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13820 }
13821
13822 break;
13823 }
13824#endif // WLAN_WAKEUP_EVENTS
13825
13826 case WDI_TX_PER_HIT_IND:
13827 {
13828 vos_msg_t vosMsg;
13829 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13830 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13831 /* VOS message wrapper */
13832 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13833 vosMsg.bodyptr = NULL;
13834 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013835 /* Send message to SME */
13836 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13837 {
13838 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13839 }
13840 break;
13841 }
13842
Leo Chang9056f462013-08-01 19:21:11 -070013843#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013844 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013845 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013846 vos_msg_t vosMsg;
13847 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013848
Leo Changd9df8aa2013-09-26 13:32:26 -070013849 lphbInd =
13850 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13851 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013852 {
13853 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13854 "%s: LPHB IND buffer alloc Fail", __func__);
13855 return ;
13856 }
13857
Leo Changd9df8aa2013-09-26 13:32:26 -070013858 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013859 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013860 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013861 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013862 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013863 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13864
13865 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013866 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013867 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13868
Leo Changd9df8aa2013-09-26 13:32:26 -070013869 vosMsg.type = eWNI_SME_LPHB_IND;
13870 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013871 vosMsg.bodyval = 0;
13872 /* Send message to SME */
13873 if (VOS_STATUS_SUCCESS !=
13874 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13875 {
13876 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13877 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013878 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013879 }
13880 break;
13881 }
13882#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013883 case WDI_PERIODIC_TX_PTRN_FW_IND:
13884 {
13885 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13886 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13887 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13888 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13889 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13890 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13891 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13892
13893 break;
13894 }
Leo Chang9056f462013-08-01 19:21:11 -070013895
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013896 case WDI_IBSS_PEER_INACTIVITY_IND:
13897 {
13898 tSirIbssPeerInactivityInd *pIbssInd =
13899 (tSirIbssPeerInactivityInd *)
13900 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13901
13902 if (NULL == pIbssInd)
13903 {
13904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13905 "Memory allocation failure, "
13906 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13907 break;
13908 }
13909
13910 pIbssInd->bssIdx =
13911 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13912 pIbssInd->staIdx =
13913 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13914 vos_mem_copy(pIbssInd->peerAddr,
13915 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13916 sizeof(tSirMacAddr));
13917 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13918 break;
13919 }
13920
Rajeev79dbe4c2013-10-05 11:03:42 +053013921#ifdef FEATURE_WLAN_BATCH_SCAN
13922 case WDI_BATCH_SCAN_RESULT_IND:
13923 {
13924 void *pBatchScanResult;
13925 void *pCallbackContext;
13926 tpAniSirGlobal pMac;
13927
13928 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13929 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13930
13931 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053013932 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053013933 {
13934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13935 "%s:pWDA is NULL", __func__);
13936 VOS_ASSERT(0);
13937 return;
13938 }
13939
13940 pBatchScanResult =
13941 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13942 if (NULL == pBatchScanResult)
13943 {
13944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13945 "%s:Batch scan result from FW is null can't invoke HDD callback",
13946 __func__);
13947 VOS_ASSERT(0);
13948 return;
13949 }
13950
13951 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13952 if (NULL == pMac)
13953 {
13954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13955 "%s:pMac is NULL", __func__);
13956 VOS_ASSERT(0);
13957 return;
13958 }
13959
13960 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13961 /*call hdd callback with set batch scan response data*/
13962 if(pMac->pmc.batchScanResultCallback)
13963 {
13964 pMac->pmc.batchScanResultCallback(pCallbackContext,
13965 pBatchScanResult);
13966 }
13967 else
13968 {
13969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13970 "%s:HDD callback is null", __func__);
13971 VOS_ASSERT(0);
13972 }
13973 break;
13974 }
13975#endif
13976
Leo Chang0b0e45a2013-12-15 15:18:55 -080013977#ifdef FEATURE_WLAN_CH_AVOID
13978 case WDI_CH_AVOID_IND:
13979 {
13980 vos_msg_t vosMsg;
13981 tSirChAvoidIndType *chAvoidInd;
13982
13983 chAvoidInd =
13984 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13985 if (NULL == chAvoidInd)
13986 {
13987 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13988 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13989 return ;
13990 }
13991
13992 chAvoidInd->avoidRangeCount =
13993 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13994 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13995 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13996 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13997
13998 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13999 "%s : WDA CH avoid notification", __func__);
14000
14001 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14002 vosMsg.bodyptr = chAvoidInd;
14003 vosMsg.bodyval = 0;
14004 /* Send message to SME */
14005 if (VOS_STATUS_SUCCESS !=
14006 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14007 {
14008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14009 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14010 vos_mem_free(chAvoidInd);
14011 }
14012 break;
14013 }
14014#endif /* FEATURE_WLAN_CH_AVOID */
14015
Sunil Duttbd736ed2014-05-26 21:19:41 +053014016#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14017 case WDI_LL_STATS_RESULTS_IND:
14018 {
14019 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014020 tpAniSirGlobal pMac;
14021
14022 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14023 "Received WDI_LL_STATS_RESULTS_IND from FW");
14024
14025 /*sanity check*/
14026 if (NULL == pWDA)
14027 {
14028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14029 "%s:pWDA is NULL", __func__);
14030 VOS_ASSERT(0);
14031 return;
14032 }
14033
14034 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014035 (void *)wdiLowLevelInd->
14036 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014037 if (NULL == pLinkLayerStatsInd)
14038 {
14039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14040 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14041 __func__);
14042 VOS_ASSERT(0);
14043 return;
14044 }
14045
14046 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14047 if (NULL == pMac)
14048 {
14049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14050 "%s:pMac is NULL", __func__);
14051 VOS_ASSERT(0);
14052 return;
14053 }
14054
Dino Mycled3d50022014-07-07 12:58:25 +053014055 /* call hdd callback with Link Layer Statistics.
14056 * vdev_id/ifacId in link_stats_results will be
14057 * used to retrieve the correct HDD context
14058 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014059 if (pMac->sme.pLinkLayerStatsIndCallback)
14060 {
Dino Mycled3d50022014-07-07 12:58:25 +053014061 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014062 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014063 pLinkLayerStatsInd,
14064 wdiLowLevelInd->
14065 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014066 }
14067 else
14068 {
14069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14070 "%s:HDD callback is null", __func__);
14071 }
14072 break;
14073 }
14074#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14075
Dino Mycle41bdc942014-06-10 11:30:24 +053014076#ifdef WLAN_FEATURE_EXTSCAN
14077 case WDI_EXTSCAN_PROGRESS_IND:
14078 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14079 case WDI_EXTSCAN_SCAN_RESULT_IND:
14080 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14081 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14082 {
14083 void *pEXTScanData;
14084 void *pCallbackContext;
14085 tpAniSirGlobal pMac;
14086 tANI_U16 indType;
14087
14088 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14089 "Received WDI_EXTSCAN Indications from FW");
14090 /*sanity check*/
14091 if (NULL == pWDA)
14092 {
14093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14094 "%s:pWDA is NULL", __func__);
14095 VOS_ASSERT(0);
14096 return;
14097 }
14098 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14099 {
14100 indType = WDA_EXTSCAN_PROGRESS_IND;
14101
14102 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14103 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14104 }
14105 if (wdiLowLevelInd->wdiIndicationType ==
14106 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14107 {
14108 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14109
14110 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14111 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14112 }
14113 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14114 {
14115 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14116
14117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14118 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14119 }
14120 if (wdiLowLevelInd->wdiIndicationType ==
14121 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14122 {
14123 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14124
14125 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14126 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14127 }
14128 if (wdiLowLevelInd->wdiIndicationType ==
14129 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14130 {
14131 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14132
14133 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14134 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14135 }
14136
14137 pEXTScanData =
14138 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14139 if (NULL == pEXTScanData)
14140 {
14141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14142 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14143 __func__);
14144 VOS_ASSERT(0);
14145 return;
14146 }
14147
14148 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14149 if (NULL == pMac)
14150 {
14151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14152 "%s:pMac is NULL", __func__);
14153 VOS_ASSERT(0);
14154 return;
14155 }
14156
14157 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14158
14159 if(pMac->sme.pEXTScanIndCb)
14160 {
14161 pMac->sme.pEXTScanIndCb(pCallbackContext,
14162 indType,
14163 pEXTScanData);
14164 }
14165 else
14166 {
14167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14168 "%s:HDD callback is null", __func__);
14169 }
14170 break;
14171 }
14172#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014173 case WDI_DEL_BA_IND:
14174 {
14175 tpBADeleteParams pDelBAInd =
14176 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14177
14178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14179 "Received WDI_DEL_BA_IND from WDI ");
14180 if(NULL == pDelBAInd)
14181 {
14182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14183 "%s: VOS MEM Alloc Failure", __func__);
14184 break;
14185 }
14186 vos_mem_copy(pDelBAInd->peerMacAddr,
14187 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14188 sizeof(tSirMacAddr));
14189 vos_mem_copy(pDelBAInd->bssId,
14190 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14191 sizeof(tSirMacAddr));
14192 pDelBAInd->staIdx =
14193 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14194 pDelBAInd->baTID =
14195 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14196 pDelBAInd->baDirection =
14197 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14198 pDelBAInd->reasonCode =
14199 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14200
14201 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14202 (void *)pDelBAInd , 0) ;
14203 break;
14204 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014205
Jeff Johnson295189b2012-06-20 16:38:30 -070014206 default:
14207 {
14208 /* TODO error */
14209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14210 "Received UNKNOWN Indication from WDI ");
14211 }
14212 }
14213 return ;
14214}
14215
Jeff Johnson295189b2012-06-20 16:38:30 -070014216/*
14217 * BA related processing in WDA.
14218 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014219void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14220 void* pUserData)
14221{
14222 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14223 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014224 if(NULL == pWdaParams)
14225 {
14226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014227 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014228 VOS_ASSERT(0) ;
14229 return ;
14230 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014231 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014232 vos_mem_free(pWdaParams->wdaMsgParam) ;
14233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14234 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014236 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014237 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14238 {
14239 tANI_U8 i = 0 ;
14240 tBaActivityInd *baActivityInd = NULL ;
14241 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14242 tANI_U8 allocSize = sizeof(tBaActivityInd)
14243 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14244 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14245 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014246 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014247 if(NULL == baActivityInd)
14248 {
14249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014251 VOS_ASSERT(0) ;
14252 return;
14253 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014254 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14255 sizeof(tSirMacAddr)) ;
14256 baActivityInd->baCandidateCnt = baCandidateCount ;
14257
14258 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14259 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14260
14261 for(i = 0 ; i < baCandidateCount ; i++)
14262 {
14263 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014264 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14265 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014266 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14267 {
14268 baCandidate->baInfo[tid].fBaEnable =
14269 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14270 baCandidate->baInfo[tid].startingSeqNum =
14271 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14272 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014273 wdiBaCandidate++ ;
14274 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014276 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14277 }
14278 else
14279 {
14280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14281 "BA Trigger RSP with Failure received ");
14282 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014283 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014284}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014285
14286
14287/*
14288 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14289 * during MCC
14290 */
14291void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14292{
14293 wpt_uint32 enabled;
14294 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14295 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14296 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14297
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014298 if (NULL == pMac )
14299 {
14300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14301 "%s: Invoked with invalid MAC context ", __func__ );
14302 VOS_ASSERT(0);
14303 return;
14304 }
14305
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014306 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14307 != eSIR_SUCCESS)
14308 {
14309 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14310 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14311 return;
14312 }
14313
14314 if(!enabled)
14315 {
14316 return;
14317 }
14318
14319 if(NULL == pWDA)
14320 {
14321 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14322 "%s:WDA context is NULL", __func__);
14323 VOS_ASSERT(0);
14324 return;
14325 }
14326
14327 if(activate)
14328 {
14329 if( VOS_STATUS_SUCCESS !=
14330 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14331 {
14332 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14333 "Traffic Stats Timer Start Failed ");
14334 return;
14335 }
14336 WDI_DS_ActivateTrafficStats();
14337 }
14338 else
14339 {
14340 WDI_DS_DeactivateTrafficStats();
14341 WDI_DS_ClearTrafficStats();
14342
14343 if( VOS_STATUS_SUCCESS !=
14344 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14345 {
14346 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14347 "Traffic Stats Timer Stop Failed ");
14348 return;
14349 }
14350 }
14351}
14352
14353/*
14354 * Traffic Stats Timer handler
14355 */
14356void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14357{
14358 WDI_Status wdiStatus;
14359 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14360 WDI_TrafficStatsIndType trafficStatsIndParams;
14361 wpt_uint32 length, enabled;
14362 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14363
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014364 if (NULL == pMac )
14365 {
14366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14367 "%s: Invoked with invalid MAC context ", __func__ );
14368 VOS_ASSERT(0);
14369 return;
14370 }
14371
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014372 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14373 != eSIR_SUCCESS)
14374 {
14375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14376 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14377 return;
14378 }
14379
14380 if(!enabled)
14381 {
14382 WDI_DS_DeactivateTrafficStats();
14383 return;
14384 }
14385
14386 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14387
14388 if(pWdiTrafficStats != NULL)
14389 {
14390 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14391 trafficStatsIndParams.length = length;
14392 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014393 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014394 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14395 trafficStatsIndParams.pUserData = pWDA;
14396
14397 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14398
14399 if(WDI_STATUS_PENDING == wdiStatus)
14400 {
14401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14402 "Pending received for %s:%d ",__func__,__LINE__ );
14403 }
14404 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14405 {
14406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14407 "Failure in %s:%d ",__func__,__LINE__ );
14408 }
14409
14410 WDI_DS_ClearTrafficStats();
14411 }
14412 else
14413 {
14414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14415 "pWdiTrafficStats is Null");
14416 }
14417
14418 if( VOS_STATUS_SUCCESS !=
14419 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14420 {
14421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14422 "Traffic Stats Timer Start Failed ");
14423 return;
14424 }
14425}
14426
Jeff Johnson295189b2012-06-20 16:38:30 -070014427/*
14428 * BA Activity check timer handler
14429 */
14430void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14431{
14432 tANI_U8 curSta = 0 ;
14433 tANI_U8 tid = 0 ;
14434 tANI_U8 size = 0 ;
14435 tANI_U8 baCandidateCount = 0 ;
14436 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014437 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014438 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014439 tpAniSirGlobal pMac;
14440
Jeff Johnson295189b2012-06-20 16:38:30 -070014441 if(NULL == pWDA)
14442 {
14443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014444 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014445 VOS_ASSERT(0);
14446 return ;
14447 }
14448 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14449 {
14450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14451 "Inconsistent STA entries in WDA");
14452 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014453 }
14454 if(NULL == pWDA->pVosContext)
14455 {
14456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14457 "%s: pVosContext is NULL",__func__);
14458 VOS_ASSERT(0);
14459 return ;
14460 }
14461 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014462 if(NULL == pMac)
14463 {
14464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14465 "%s: pMac is NULL",__func__);
14466 VOS_ASSERT(0);
14467 return ;
14468 }
14469
Abhishek Singh0644e482014-10-06 18:38:23 +053014470 if (wlan_cfgGetInt(pMac,
14471 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14472 eSIR_SUCCESS)
14473 {
14474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14475 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14476 val = 0;
14477 }
14478
Jeff Johnson295189b2012-06-20 16:38:30 -070014479 /* walk through all STA entries and find out TX packet count */
14480 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14481 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014482 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014483#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014484 // We can only do BA on "hard" STAs.
14485 if (!(IS_HWSTA_IDX(curSta)))
14486 {
14487 continue;
14488 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014489#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014490 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14491 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014492 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 tANI_U32 txPktCount = 0 ;
14494 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014495 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014496 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14497 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014498 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14499 curSta, tid, &txPktCount)))
14500 {
14501#if 0
14502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14503 "************* %d:%d, %d ",curSta, txPktCount,
14504 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14505#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014506 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14507 (currentOperChan <= SIR_11B_CHANNEL_END)))
14508 {
14509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14510 "%s: BTC disabled aggregation - dont start "
14511 "TX ADDBA req",__func__);
14512 }
14513 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014514 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053014515 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
14516 pWDA->wdaGlobalSystemRole) && txPktCount )
14517 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14518 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070014519 {
14520 /* get prepare for sending message to HAL */
14521 //baCandidate[baCandidateCount].staIdx = curSta ;
14522 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14523 newBaCandidate = WDA_ENABLE_BA ;
14524 }
14525 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14526 }
14527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014528 /* fill the entry for all the sta with given TID's */
14529 if(WDA_ENABLE_BA == newBaCandidate)
14530 {
14531 /* move to next BA candidate */
14532 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14533 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14534 baCandidateCount++ ;
14535 newBaCandidate = WDA_DISABLE_BA ;
14536 }
14537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014538 /* prepare and send message to hal */
14539 if( 0 < baCandidateCount)
14540 {
14541 WDI_Status status = WDI_STATUS_SUCCESS ;
14542 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14543 tWDA_ReqParams *pWdaParams =
14544 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014545 if(NULL == pWdaParams)
14546 {
14547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014548 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014549 VOS_ASSERT(0) ;
14550 return;
14551 }
14552 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14553 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14554 if(NULL == wdiTriggerBaReq)
14555 {
14556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014558 VOS_ASSERT(0) ;
14559 vos_mem_free(pWdaParams);
14560 return;
14561 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014562 do
14563 {
14564 WDI_TriggerBAReqinfoType *triggerBaInfo =
14565 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14566 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14567 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14568 * for each request */
14569 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14570 triggerBaInfo->ucBASessionID = 0;
14571 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14572 } while(0) ;
14573 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014575 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014576 pWdaParams->pWdaContext = pWDA;
14577 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14578 pWdaParams->wdaMsgParam = NULL;
14579 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14580 WDA_TriggerBaReqCallback, pWdaParams) ;
14581 if(IS_WDI_STATUS_FAILURE(status))
14582 {
14583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14584 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14585 vos_mem_free(pWdaParams->wdaMsgParam) ;
14586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14587 vos_mem_free(pWdaParams) ;
14588 }
14589 }
14590 else
14591 {
14592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14593 "There is no TID for initiating BA");
14594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014595 if( VOS_STATUS_SUCCESS !=
14596 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14597 {
14598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14599 "BA Activity Timer Stop Failed ");
14600 return ;
14601 }
14602 if( VOS_STATUS_SUCCESS !=
14603 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14604 {
14605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14606 "BA Activity Timer Start Failed ");
14607 return;
14608 }
14609 return ;
14610}
Jeff Johnson295189b2012-06-20 16:38:30 -070014611/*
14612 * WDA common routine to create timer used by WDA.
14613 */
14614static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14615{
Jeff Johnson295189b2012-06-20 16:38:30 -070014616 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14617 tANI_U32 val = 0 ;
14618 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14619
14620 if(NULL == pMac)
14621 {
14622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014623 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014624 VOS_ASSERT(0);
14625 return VOS_STATUS_E_FAILURE;
14626 }
14627 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14628 != eSIR_SUCCESS)
14629 {
14630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14631 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14632 return VOS_STATUS_E_FAILURE;
14633 }
14634 val = SYS_MS_TO_TICKS(val) ;
14635
14636 /* BA activity check timer */
14637 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14638 "BA Activity Check timer", WDA_TimerHandler,
14639 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14640 if(status != TX_SUCCESS)
14641 {
14642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14643 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014644 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014645 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014646 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014647 /* Tx Complete Timeout timer */
14648 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14649 "Tx Complete Check timer", WDA_TimerHandler,
14650 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014651 if(status != TX_SUCCESS)
14652 {
14653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14654 "Unable to create Tx Complete Timeout timer");
14655 /* Destroy timer of BA activity check timer */
14656 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14657 if(status != TX_SUCCESS)
14658 {
14659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14660 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014661 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014662 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014663 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014664 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014665
14666 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14667
14668 /* Traffic Stats timer */
14669 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14670 "Traffic Stats timer", WDA_TimerHandler,
14671 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14672 if(status != TX_SUCCESS)
14673 {
14674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14675 "Unable to create traffic stats timer");
14676 /* Destroy timer of BA activity check timer */
14677 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14678 if(status != TX_SUCCESS)
14679 {
14680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14681 "Unable to Destroy BA activity timer");
14682 }
14683 /* Destroy timer of tx complete timer */
14684 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14685 if(status != TX_SUCCESS)
14686 {
14687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14688 "Unable to Tx complete timer");
14689 }
14690 return VOS_STATUS_E_FAILURE ;
14691 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014692 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014693}
Jeff Johnson295189b2012-06-20 16:38:30 -070014694/*
14695 * WDA common routine to destroy timer used by WDA.
14696 */
14697static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
14698{
14699 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014700 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14701 if(status != TX_SUCCESS)
14702 {
14703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14704 "Unable to Destroy Tx Complete Timeout timer");
14705 return eSIR_FAILURE ;
14706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014707 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14708 if(status != TX_SUCCESS)
14709 {
14710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14711 "Unable to Destroy BA activity timer");
14712 return eSIR_FAILURE ;
14713 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014714 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
14715 if(status != TX_SUCCESS)
14716 {
14717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14718 "Unable to Destroy traffic stats timer");
14719 return eSIR_FAILURE ;
14720 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014721 return eSIR_SUCCESS ;
14722}
Jeff Johnson295189b2012-06-20 16:38:30 -070014723/*
14724 * WDA timer handler.
14725 */
14726void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
14727{
14728 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
14729 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014730 /*
14731 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
14732 */
14733 wdaMsg.type = timerInfo ;
14734 wdaMsg.bodyptr = NULL;
14735 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014736 /* post the message.. */
14737 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
14738 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
14739 {
14740 vosStatus = VOS_STATUS_E_BADMSG;
14741 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014742}
Jeff Johnson295189b2012-06-20 16:38:30 -070014743/*
14744 * WDA Tx Complete timeout Indication.
14745 */
14746void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
14747{
14748 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014749 if( pWDA->pAckTxCbFunc )
14750 {
14751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014752 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014753 pWDA->pAckTxCbFunc( pMac, 0);
14754 pWDA->pAckTxCbFunc = NULL;
14755 }
14756 else
14757 {
14758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014759 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014760 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014761}
Jeff Johnson295189b2012-06-20 16:38:30 -070014762/*
14763 * WDA Set REG Domain to VOS NV
14764 */
Abhishek Singha306a442013-11-07 18:39:01 +053014765eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
14766 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070014767{
Abhishek Singha306a442013-11-07 18:39:01 +053014768 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070014769 {
14770 return eHAL_STATUS_INVALID_PARAMETER;
14771 }
14772 return eHAL_STATUS_SUCCESS;
14773}
Jeff Johnson295189b2012-06-20 16:38:30 -070014774
Jeff Johnson295189b2012-06-20 16:38:30 -070014775#ifdef FEATURE_WLAN_SCAN_PNO
14776/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014777 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014778 *
14779 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014780void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014781{
14782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014783 tSirPNOScanReq *pPNOScanReqParams;
14784
Jeff Johnson295189b2012-06-20 16:38:30 -070014785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014786 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014787 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014788 {
14789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014790 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014791 VOS_ASSERT(0) ;
14792 return ;
14793 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014794
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014795 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14796 if(pPNOScanReqParams->statusCallback)
14797 {
14798 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14799 (status == WDI_STATUS_SUCCESS) ?
14800 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14801 }
14802
Yue Ma7f44bbe2013-04-12 11:47:39 -070014803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14804 vos_mem_free(pWdaParams->wdaMsgParam);
14805 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014806
14807 return ;
14808}
Jeff Johnson295189b2012-06-20 16:38:30 -070014809/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014810 * FUNCTION: WDA_PNOScanReqCallback
14811 * Free memory.
14812 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14813 */
14814void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014815{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014817 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014818
14819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14820 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14821
14822 if(NULL == pWdaParams)
14823 {
14824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14825 "%s: pWdaParams received NULL", __func__);
14826 VOS_ASSERT(0);
14827 return;
14828 }
14829
14830 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14831 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014832 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14833 if(pPNOScanReqParams->statusCallback)
14834 {
14835 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14836 VOS_STATUS_E_FAILURE);
14837 }
14838
Yue Ma7f44bbe2013-04-12 11:47:39 -070014839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14840 vos_mem_free(pWdaParams->wdaMsgParam);
14841 vos_mem_free(pWdaParams);
14842 }
14843
14844 return;
14845}
14846/*
14847 * FUNCTION: WDA_UpdateScanParamsRespCallback
14848 *
14849 */
14850void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14851{
14852 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014854 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014855 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014856 {
14857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014858 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014859 VOS_ASSERT(0) ;
14860 return ;
14861 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014862
14863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14864 vos_mem_free(pWdaParams->wdaMsgParam);
14865 vos_mem_free(pWdaParams);
14866
Jeff Johnson295189b2012-06-20 16:38:30 -070014867 return ;
14868}
Jeff Johnson295189b2012-06-20 16:38:30 -070014869/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014870 * FUNCTION: WDA_UpdateScanParamsReqCallback
14871 * Free memory.
14872 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14873 */
14874void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14875{
14876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14877
14878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14879 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14880
14881 if(NULL == pWdaParams)
14882 {
14883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14884 "%s: pWdaParams received NULL", __func__);
14885 VOS_ASSERT(0);
14886 return;
14887 }
14888
14889 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14890 {
14891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14892 vos_mem_free(pWdaParams->wdaMsgParam);
14893 vos_mem_free(pWdaParams);
14894 }
14895
14896 return;
14897}
14898/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014899 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14900 * Request to WDI to set Preferred Network List.Offload
14901 */
14902VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14903 tSirPNOScanReq *pPNOScanReqParams)
14904{
Jeff Johnson43971f52012-07-17 12:26:56 -070014905 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014906 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14907 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14908 tWDA_ReqParams *pWdaParams ;
14909 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014911 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014912 if(NULL == pwdiPNOScanReqInfo)
14913 {
14914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014916 VOS_ASSERT(0);
14917 return VOS_STATUS_E_NOMEM;
14918 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014919 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14920 if(NULL == pWdaParams)
14921 {
14922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014923 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014924 VOS_ASSERT(0);
14925 vos_mem_free(pwdiPNOScanReqInfo);
14926 return VOS_STATUS_E_NOMEM;
14927 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014928 //
14929 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14930 //
14931 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14932 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014933 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14934 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14935 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014936 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14937 {
14938 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14939 &pPNOScanReqParams->aNetworks[i],
14940 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14941 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014942 /*Scan timer intervals*/
14943 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14944 &pPNOScanReqParams->scanTimers,
14945 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014946 /*Probe template for 2.4GHz band*/
14947 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14948 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14949 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014950 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14951 pPNOScanReqParams->p24GProbeTemplate,
14952 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014953 /*Probe template for 5GHz band*/
14954 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14955 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14956 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014957 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14958 pPNOScanReqParams->p5GProbeTemplate,
14959 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014960 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14961 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014962
Jeff Johnson295189b2012-06-20 16:38:30 -070014963 /* Store Params pass it to WDI */
14964 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14965 pWdaParams->pWdaContext = pWDA;
14966 /* Store param pointer as passed in by caller */
14967 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014968 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014969 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014970 if(IS_WDI_STATUS_FAILURE(status))
14971 {
14972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14973 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014974 if(pPNOScanReqParams->statusCallback)
14975 {
14976 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14977 VOS_STATUS_E_FAILURE);
14978 }
14979
Jeff Johnson295189b2012-06-20 16:38:30 -070014980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14981 vos_mem_free(pWdaParams->wdaMsgParam);
14982 pWdaParams->wdaWdiApiMsgParam = NULL;
14983 pWdaParams->wdaMsgParam = NULL;
14984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014985 return CONVERT_WDI2VOS_STATUS(status) ;
14986}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014987
14988#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14989
14990void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14991{
14992 /*Convert the CSR Auth types to WDI Auth types */
14993 switch (csrAuthType)
14994 {
14995 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14996 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14997 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014998#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014999 case eCSR_AUTH_TYPE_CCKM_WPA:
15000 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15001 break;
15002#endif
15003 case eCSR_AUTH_TYPE_WPA:
15004 *AuthType = eWDA_AUTH_TYPE_WPA;
15005 break;
15006 case eCSR_AUTH_TYPE_WPA_PSK:
15007 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15008 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015009#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015010 case eCSR_AUTH_TYPE_CCKM_RSN:
15011 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15012 break;
15013#endif
15014 case eCSR_AUTH_TYPE_RSN:
15015 *AuthType = eWDA_AUTH_TYPE_RSN;
15016 break;
15017 case eCSR_AUTH_TYPE_RSN_PSK:
15018 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15019 break;
15020#if defined WLAN_FEATURE_VOWIFI_11R
15021 case eCSR_AUTH_TYPE_FT_RSN:
15022 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15023 break;
15024 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15025 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15026 break;
15027#endif
15028#ifdef FEATURE_WLAN_WAPI
15029 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15030 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15031 break;
15032 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15033 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15034 break;
15035#endif /* FEATURE_WLAN_WAPI */
15036 case eCSR_AUTH_TYPE_SHARED_KEY:
15037 case eCSR_AUTH_TYPE_AUTOSWITCH:
15038 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15039 break;
15040#if 0
15041 case eCSR_AUTH_TYPE_SHARED_KEY:
15042 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15043 break;
15044 case eCSR_AUTH_TYPE_AUTOSWITCH:
15045 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15046#endif
15047 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015049 "%s: Unknown Auth Type", __func__);
15050 break;
15051 }
15052}
15053void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15054{
15055 switch (csrEncrType)
15056 {
15057 case eCSR_ENCRYPT_TYPE_NONE:
15058 *EncrType = WDI_ED_NONE;
15059 break;
15060 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15061 case eCSR_ENCRYPT_TYPE_WEP40:
15062 *EncrType = WDI_ED_WEP40;
15063 break;
15064 case eCSR_ENCRYPT_TYPE_WEP104:
15065 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15066 *EncrType = WDI_ED_WEP104;
15067 break;
15068 case eCSR_ENCRYPT_TYPE_TKIP:
15069 *EncrType = WDI_ED_TKIP;
15070 break;
15071 case eCSR_ENCRYPT_TYPE_AES:
15072 *EncrType = WDI_ED_CCMP;
15073 break;
15074#ifdef WLAN_FEATURE_11W
15075 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15076 *EncrType = WDI_ED_AES_128_CMAC;
15077 break;
15078#endif
15079#ifdef FEATURE_WLAN_WAPI
15080 case eCSR_ENCRYPT_TYPE_WPI:
15081 *EncrType = WDI_ED_WPI;
15082 break;
15083#endif
15084 case eCSR_ENCRYPT_TYPE_ANY:
15085 *EncrType = WDI_ED_ANY;
15086 break;
15087
15088 default:
15089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15090 "%s: Unknown Encryption Type", __func__);
15091 break;
15092 }
15093}
15094
15095/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015096 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015097 * Request to WDI to set Roam Offload Scan
15098 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015099VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015100 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15101{
15102 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015103 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15104 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015105 tWDA_ReqParams *pWdaParams ;
15106 v_U8_t csrAuthType;
15107 WDI_RoamNetworkType *pwdiRoamNetworkType;
15108 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15110 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015111 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015112 {
15113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15114 "%s: VOS MEM Alloc Failure", __func__);
15115 VOS_ASSERT(0);
15116 return VOS_STATUS_E_NOMEM;
15117 }
15118 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15119 if (NULL == pWdaParams)
15120 {
15121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15122 "%s: VOS MEM Alloc Failure", __func__);
15123 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015124 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015125 return VOS_STATUS_E_NOMEM;
15126 }
15127
15128 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015129 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015130 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015131 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15132 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015133 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15134 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15135 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15136 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15137 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15138 sizeof(pwdiRoamNetworkType->currAPbssid));
15139 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15140 csrAuthType);
15141 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15142 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15143 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15144 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15145 pwdiRoamOffloadScanInfo->LookupThreshold =
15146 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015147 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15148 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015149 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15150 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015151 pwdiRoamOffloadScanInfo->MAWCEnabled =
15152 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015153 pwdiRoamOffloadScanInfo->Command =
15154 pRoamOffloadScanReqParams->Command ;
15155 pwdiRoamOffloadScanInfo->StartScanReason =
15156 pRoamOffloadScanReqParams->StartScanReason ;
15157 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15158 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15159 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15160 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15161 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15162 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15163 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15164 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15165 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15166 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015167 pwdiRoamOffloadScanInfo->IsESEEnabled =
15168 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015169 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15170 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15171 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15172 pwdiRoamNetworkType->ssId.ucLength =
15173 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15174 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15175 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15176 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15177 pwdiRoamNetworkType->ChannelCount =
15178 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15179 pwdiRoamOffloadScanInfo->ChannelCacheType =
15180 pRoamOffloadScanReqParams->ChannelCacheType;
15181 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15182 pRoamOffloadScanReqParams->ValidChannelList,
15183 pRoamOffloadScanReqParams->ValidChannelCount);
15184 pwdiRoamOffloadScanInfo->ValidChannelCount =
15185 pRoamOffloadScanReqParams->ValidChannelCount;
15186 pwdiRoamOffloadScanInfo->us24GProbeSize =
15187 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15188 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15189 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15190 pRoamOffloadScanReqParams->p24GProbeTemplate,
15191 pwdiRoamOffloadScanInfo->us24GProbeSize);
15192 pwdiRoamOffloadScanInfo->us5GProbeSize =
15193 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15194 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15195 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15196 pRoamOffloadScanReqParams->p5GProbeTemplate,
15197 pwdiRoamOffloadScanInfo->us5GProbeSize);
15198 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15199 pRoamOffloadScanReqParams->MDID.mdiePresent;
15200 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15201 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015202 pwdiRoamOffloadScanInfo->nProbes =
15203 pRoamOffloadScanReqParams->nProbes;
15204 pwdiRoamOffloadScanInfo->HomeAwayTime =
15205 pRoamOffloadScanReqParams->HomeAwayTime;
15206 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015207 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015208 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015209 pWdaParams->pWdaContext = pWDA;
15210 /* Store param pointer as passed in by caller */
15211 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015212 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015213 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15214 if(IS_WDI_STATUS_FAILURE(status))
15215 {
15216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15217 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15219 vos_mem_free(pWdaParams->wdaMsgParam);
15220 pWdaParams->wdaWdiApiMsgParam = NULL;
15221 pWdaParams->wdaMsgParam = NULL;
15222 }
15223 return CONVERT_WDI2VOS_STATUS(status) ;
15224}
15225#endif
15226
Jeff Johnson295189b2012-06-20 16:38:30 -070015227/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015228 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015229 *
15230 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015231void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015232{
15233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15234
15235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015236 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015237
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015238 if(NULL == pWdaParams)
15239 {
15240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015241 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015242 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015243 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015244 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015245
Jeff Johnson295189b2012-06-20 16:38:30 -070015246 vos_mem_free(pWdaParams->wdaMsgParam) ;
15247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15248 vos_mem_free(pWdaParams) ;
15249
15250 return ;
15251}
15252/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015253 * FUNCTION: WDA_RssiFilterReqCallback
15254 * Free memory.
15255 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15256 */
15257void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15258{
15259 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15260
15261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15262 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15263
15264 if(NULL == pWdaParams)
15265 {
15266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15267 "%s: pWdaParams received NULL", __func__);
15268 VOS_ASSERT(0);
15269 return;
15270 }
15271
15272 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15273 {
15274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15275 vos_mem_free(pWdaParams->wdaMsgParam);
15276 vos_mem_free(pWdaParams);
15277 }
15278
15279 return;
15280}
15281/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015282 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15283 * Request to WDI to set Preferred Network List.Offload
15284 */
15285VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15286 tSirSetRSSIFilterReq* pRssiFilterParams)
15287{
Jeff Johnson43971f52012-07-17 12:26:56 -070015288 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015289 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15290 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15291 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015293 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015294 if(NULL == pwdiSetRssiFilterReqInfo)
15295 {
15296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015298 VOS_ASSERT(0);
15299 return VOS_STATUS_E_NOMEM;
15300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015301 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15302 if(NULL == pWdaParams)
15303 {
15304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015306 VOS_ASSERT(0);
15307 vos_mem_free(pwdiSetRssiFilterReqInfo);
15308 return VOS_STATUS_E_NOMEM;
15309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015310 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015311 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15312 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015313
Jeff Johnson295189b2012-06-20 16:38:30 -070015314 /* Store Params pass it to WDI */
15315 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15316 pWdaParams->pWdaContext = pWDA;
15317 /* Store param pointer as passed in by caller */
15318 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015319 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015320 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015321 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015322 if(IS_WDI_STATUS_FAILURE(status))
15323 {
15324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15325 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15327 vos_mem_free(pWdaParams->wdaMsgParam);
15328 pWdaParams->wdaWdiApiMsgParam = NULL;
15329 pWdaParams->wdaMsgParam = NULL;
15330 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015331 return CONVERT_WDI2VOS_STATUS(status) ;
15332}
15333
Jeff Johnson295189b2012-06-20 16:38:30 -070015334/*
15335 * FUNCTION: WDA_ProcessUpdateScanParams
15336 * Request to WDI to update Scan Parameters
15337 */
15338VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15339 tSirUpdateScanParams *pUpdateScanParams)
15340{
Jeff Johnson43971f52012-07-17 12:26:56 -070015341 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015342 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15343 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15344 sizeof(WDI_UpdateScanParamsInfoType)) ;
15345 tWDA_ReqParams *pWdaParams ;
15346 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015348 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015349 if(NULL == wdiUpdateScanParamsInfoType)
15350 {
15351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015352 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015353 VOS_ASSERT(0);
15354 return VOS_STATUS_E_NOMEM;
15355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15357 if ( NULL == pWdaParams )
15358 {
15359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015361 VOS_ASSERT(0);
15362 vos_mem_free(wdiUpdateScanParamsInfoType);
15363 return VOS_STATUS_E_NOMEM;
15364 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015365 //
15366 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15367 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15369 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15370 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15371 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015372 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015373 pUpdateScanParams->b11dEnabled,
15374 pUpdateScanParams->b11dResolved,
15375 pUpdateScanParams->ucChannelCount,
15376 pUpdateScanParams->usPassiveMinChTime,
15377 pUpdateScanParams->usPassiveMaxChTime,
15378 pUpdateScanParams->usActiveMinChTime,
15379 pUpdateScanParams->usActiveMaxChTime,
15380 sizeof(tSirUpdateScanParams),
15381 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15382
Jeff Johnson295189b2012-06-20 16:38:30 -070015383 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15384 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015385 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15386 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015387 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15388 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015389 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15390 pUpdateScanParams->usActiveMaxChTime;
15391 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15392 pUpdateScanParams->usActiveMinChTime;
15393 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15394 pUpdateScanParams->usPassiveMaxChTime;
15395 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15396 pUpdateScanParams->usPassiveMinChTime;
15397
Jeff Johnson295189b2012-06-20 16:38:30 -070015398 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015399 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15400 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015401
Jeff Johnson295189b2012-06-20 16:38:30 -070015402 for ( i = 0; i <
15403 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15404 i++)
15405 {
15406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15407 "Update Scan Parameters channel: %d",
15408 pUpdateScanParams->aChannels[i]);
15409
15410 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15411 pUpdateScanParams->aChannels[i];
15412 }
15413
Yue Ma7f44bbe2013-04-12 11:47:39 -070015414 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15415 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015416
Jeff Johnson295189b2012-06-20 16:38:30 -070015417 /* Store Params pass it to WDI */
15418 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15419 pWdaParams->pWdaContext = pWDA;
15420 /* Store param pointer as passed in by caller */
15421 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015422
Jeff Johnson295189b2012-06-20 16:38:30 -070015423
15424
15425 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015426 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015427 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015428 if(IS_WDI_STATUS_FAILURE(status))
15429 {
15430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15431 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15433 vos_mem_free(pWdaParams->wdaMsgParam);
15434 vos_mem_free(pWdaParams);
15435 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015436 return CONVERT_WDI2VOS_STATUS(status) ;
15437}
15438#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015439
15440#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15441/*
15442 * FUNCTION: WDA_RoamOffloadScanReqCallback
15443 *
15444 */
15445void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15446{
15447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015448 vos_msg_t vosMsg;
15449 wpt_uint8 reason = 0;
15450
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015452 "<------ %s " ,__func__);
15453 if (NULL == pWdaParams)
15454 {
15455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15456 "%s: pWdaParams received NULL", __func__);
15457 VOS_ASSERT(0) ;
15458 return ;
15459 }
15460 if ( pWdaParams != NULL )
15461 {
15462 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15463 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015464 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15466 }
15467 if ( pWdaParams->wdaMsgParam != NULL)
15468 {
15469 vos_mem_free(pWdaParams->wdaMsgParam);
15470 }
15471
15472 vos_mem_free(pWdaParams) ;
15473 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015474 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15475 vosMsg.bodyptr = NULL;
15476 if (WDI_STATUS_SUCCESS != status)
15477 {
15478 reason = 0;
15479 }
15480 vosMsg.bodyval = reason;
15481 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15482 {
15483 /* free the mem and return */
15484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015485 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015486 }
15487
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015488 return ;
15489}
15490#endif
15491
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015492/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015493 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015494 *
15495 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015496void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015497{
15498 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15499
15500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15501 "<------ %s " ,__func__);
15502
15503 if(NULL == pWdaParams)
15504 {
15505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15506 "%s: pWdaParams received NULL", __func__);
15507 VOS_ASSERT(0);
15508 return;
15509 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015510
15511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15512 vos_mem_free(pWdaParams->wdaMsgParam);
15513 vos_mem_free(pWdaParams);
15514
15515 return;
15516}
15517/*
15518 * FUNCTION: WDA_SetPowerParamsReqCallback
15519 * Free memory.
15520 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15521 */
15522void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15523{
15524 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15525
15526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15527 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15528
15529 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015530 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15532 "%s: pWdaParams received NULL", __func__);
15533 VOS_ASSERT(0);
15534 return;
15535 }
15536
15537 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15538 {
15539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15540 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015541 vos_mem_free(pWdaParams);
15542 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015543
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015544 return;
15545}
15546
Jeff Johnson295189b2012-06-20 16:38:30 -070015547#ifdef WLAN_FEATURE_PACKET_FILTERING
15548/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015549 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015550 *
15551 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015552void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015553 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15554 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015555{
15556 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015558 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015559 if(NULL == pWdaParams)
15560 {
15561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015562 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015563 VOS_ASSERT(0) ;
15564 return ;
15565 }
15566
15567 vos_mem_free(pWdaParams->wdaMsgParam) ;
15568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15569 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015570 //print a msg, nothing else to do
15571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015572 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015573 return ;
15574}
Jeff Johnson295189b2012-06-20 16:38:30 -070015575/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015576 * FUNCTION: WDA_8023MulticastListReqCallback
15577 * Free memory.
15578 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15579 */
15580void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15581{
15582 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15583
15584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15585 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15586
15587 if(NULL == pWdaParams)
15588 {
15589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15590 "%s: pWdaParams received NULL", __func__);
15591 VOS_ASSERT(0);
15592 return;
15593 }
15594
15595 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15596 {
15597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15598 vos_mem_free(pWdaParams->wdaMsgParam);
15599 vos_mem_free(pWdaParams);
15600 }
15601
15602 return;
15603}
15604/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015605 * FUNCTION: WDA_Process8023MulticastListReq
15606 * Request to WDI to add 8023 Multicast List
15607 */
15608VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15609 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15610{
Jeff Johnson43971f52012-07-17 12:26:56 -070015611 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015612 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15613 tWDA_ReqParams *pWdaParams ;
15614 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015616 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015617 pwdiFltPktSetMcListReqParamsType =
15618 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15619 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15620 ) ;
15621 if(NULL == pwdiFltPktSetMcListReqParamsType)
15622 {
15623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015625 return VOS_STATUS_E_NOMEM;
15626 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15628 if(NULL == pWdaParams)
15629 {
15630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015632 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15633 return VOS_STATUS_E_NOMEM;
15634 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015635
Jeff Johnson295189b2012-06-20 16:38:30 -070015636 //
15637 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15638 //
15639 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015640 pRcvFltMcAddrList->ulMulticastAddrCnt;
15641
15642 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15643 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15644 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15645 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15646
Jeff Johnson295189b2012-06-20 16:38:30 -070015647 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15648 {
15649 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15650 &(pRcvFltMcAddrList->multicastAddr[i]),
15651 sizeof(tSirMacAddr));
15652 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015653 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15654 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015655
Jeff Johnson295189b2012-06-20 16:38:30 -070015656 /* Store Params pass it to WDI */
15657 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15658 pWdaParams->pWdaContext = pWDA;
15659 /* Store param pointer as passed in by caller */
15660 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015661 status = WDI_8023MulticastListReq(
15662 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015663 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015664 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015665 if(IS_WDI_STATUS_FAILURE(status))
15666 {
15667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15668 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15670 vos_mem_free(pWdaParams->wdaMsgParam);
15671 vos_mem_free(pWdaParams);
15672 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015673 return CONVERT_WDI2VOS_STATUS(status) ;
15674}
Jeff Johnson295189b2012-06-20 16:38:30 -070015675/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015676 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015677 *
15678 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015679void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015680 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15681 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015682{
15683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015685 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015686 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070015687 if(NULL == pWdaParams)
15688 {
15689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015690 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015691 VOS_ASSERT(0) ;
15692 return ;
15693 }
15694
15695 vos_mem_free(pWdaParams->wdaMsgParam) ;
15696 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15697 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015698 //print a msg, nothing else to do
15699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015700 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015701 return ;
15702}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015703
15704/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015705 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
15706 * Free memory.
15707 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015708 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015709void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015710 void* pUserData)
15711{
15712 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15713
15714 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15715 "<------ %s, wdiStatus: %d",
15716 __func__, wdiStatus);
15717
15718 if (NULL == pWdaParams)
15719 {
15720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15721 "%s: Invalid pWdaParams pointer", __func__);
15722 VOS_ASSERT(0);
15723 return;
15724 }
15725
15726 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15727 {
15728 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15729 vos_mem_free(pWdaParams->wdaMsgParam);
15730 vos_mem_free(pWdaParams);
15731 }
15732
15733 return;
15734}
15735
Jeff Johnson295189b2012-06-20 16:38:30 -070015736/*
15737 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
15738 * Request to WDI to set Receive Filters
15739 */
15740VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
15741 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
15742{
Jeff Johnson43971f52012-07-17 12:26:56 -070015743 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015744 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
15745 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
15746 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
15747 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
15748 tWDA_ReqParams *pWdaParams ;
15749 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015751 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015752 if(NULL == pwdiSetRcvPktFilterReqParamsType)
15753 {
15754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015755 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015756 VOS_ASSERT(0);
15757 return VOS_STATUS_E_NOMEM;
15758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015759 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15760 if(NULL == pWdaParams)
15761 {
15762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015764 VOS_ASSERT(0);
15765 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
15766 return VOS_STATUS_E_NOMEM;
15767 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015768 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
15769 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
15770 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
15771 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070015772 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15773 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15774
15775 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15776 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015777
15778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15779 "FID %d FT %d NParams %d CT %d",
15780 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15781 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15782 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15783 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015784 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15785 {
15786 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15787 &pRcvPktFilterCfg->paramsData[i],
15788 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015790 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015791 pwdiSetRcvPktFilterReqParamsType->
15792 wdiPktFilterCfg.paramsData[i].protocolLayer,
15793 pwdiSetRcvPktFilterReqParamsType->
15794 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015796 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015797 pwdiSetRcvPktFilterReqParamsType->
15798 wdiPktFilterCfg.paramsData[i].dataOffset,
15799 pwdiSetRcvPktFilterReqParamsType->
15800 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015802 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015803 pwdiSetRcvPktFilterReqParamsType->
15804 wdiPktFilterCfg.paramsData[i].compareData[0],
15805 pwdiSetRcvPktFilterReqParamsType->
15806 wdiPktFilterCfg.paramsData[i].compareData[1],
15807 pwdiSetRcvPktFilterReqParamsType->
15808 wdiPktFilterCfg.paramsData[i].compareData[2],
15809 pwdiSetRcvPktFilterReqParamsType->
15810 wdiPktFilterCfg.paramsData[i].compareData[3],
15811 pwdiSetRcvPktFilterReqParamsType->
15812 wdiPktFilterCfg.paramsData[i].compareData[4],
15813 pwdiSetRcvPktFilterReqParamsType->
15814 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015816 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015817 pwdiSetRcvPktFilterReqParamsType->
15818 wdiPktFilterCfg.paramsData[i].dataMask[0],
15819 pwdiSetRcvPktFilterReqParamsType->
15820 wdiPktFilterCfg.paramsData[i].dataMask[1],
15821 pwdiSetRcvPktFilterReqParamsType->
15822 wdiPktFilterCfg.paramsData[i].dataMask[2],
15823 pwdiSetRcvPktFilterReqParamsType->
15824 wdiPktFilterCfg.paramsData[i].dataMask[3],
15825 pwdiSetRcvPktFilterReqParamsType->
15826 wdiPktFilterCfg.paramsData[i].dataMask[4],
15827 pwdiSetRcvPktFilterReqParamsType->
15828 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015829 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015830 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015831 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015832 /* Store Params pass it to WDI */
15833 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15834 pWdaParams->pWdaContext = pWDA;
15835 /* Store param pointer as passed in by caller */
15836 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015837 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015838 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015839 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015840 if(IS_WDI_STATUS_FAILURE(status))
15841 {
15842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15843 "Failure in SetFilter(),free all the memory,status %d ",status);
15844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15845 vos_mem_free(pWdaParams->wdaMsgParam);
15846 vos_mem_free(pWdaParams);
15847 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015848 return CONVERT_WDI2VOS_STATUS(status) ;
15849}
Jeff Johnson295189b2012-06-20 16:38:30 -070015850/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015851 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015852 *
15853 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015854void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015855 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15856 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015857{
15858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15859 tWDA_CbContext *pWDA;
15860 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15861 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15862 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15863 tANI_U8 i;
15864 vos_msg_t vosMsg;
15865
15866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015867 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015868 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15869
Jeff Johnsone7245742012-09-05 17:12:55 -070015870 if(NULL == pRcvFltPktMatchCntRsp)
15871 {
15872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015873 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015874 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015875 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015876 return ;
15877 }
15878
Jeff Johnson295189b2012-06-20 16:38:30 -070015879 if(NULL == pWdaParams)
15880 {
15881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015882 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015883 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015884 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015885 return ;
15886 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015887 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15888 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015889 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15890 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15891
15892 /* Message Header */
15893 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15894 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15895
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015896 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015897
15898 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15899 {
15900 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15901 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15902 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015903 /* VOS message wrapper */
15904 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15905 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15906 vosMsg.bodyval = 0;
15907 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15908 {
15909 /* free the mem and return */
15910 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15911 }
15912
15913 vos_mem_free(pWdaParams->wdaMsgParam) ;
15914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15915 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015916
15917 return;
15918}
15919/*
15920 * FUNCTION: WDA_FilterMatchCountReqCallback
15921 * Free memory and send RSP back to SME.
15922 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15923 */
15924void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15925{
15926 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15927 vos_msg_t vosMsg;
15928
15929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15930 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15931
15932 if(NULL == pWdaParams)
15933 {
15934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15935 "%s: pWdaParams received NULL", __func__);
15936 VOS_ASSERT(0);
15937 return;
15938 }
15939
15940 /* VOS message wrapper */
15941 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15942 vosMsg.bodyptr = NULL;
15943 vosMsg.bodyval = 0;
15944
15945 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15946 {
15947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15948 vos_mem_free(pWdaParams->wdaMsgParam);
15949 vos_mem_free(pWdaParams);
15950 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15951 }
15952
15953 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015954}
Jeff Johnson295189b2012-06-20 16:38:30 -070015955/*
15956 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15957 * Request to WDI to get PC Filter Match Count
15958 */
15959VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15960{
Jeff Johnson43971f52012-07-17 12:26:56 -070015961 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015962 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15963 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15964 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015966 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015967 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15968 {
15969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015970 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015971 VOS_ASSERT(0);
15972 return VOS_STATUS_E_NOMEM;
15973 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015974 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15975 if(NULL == pWdaParams)
15976 {
15977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015979 VOS_ASSERT(0);
15980 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15981 return VOS_STATUS_E_NOMEM;
15982 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015983
Yue Ma7f44bbe2013-04-12 11:47:39 -070015984 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15985 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015986
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015987 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15988 pRcvFltPktMatchRsp->bssId,
15989 sizeof(wpt_macAddr));
15990
Jeff Johnson295189b2012-06-20 16:38:30 -070015991 /* Store Params pass it to WDI */
15992 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15993 pWdaParams->pWdaContext = pWDA;
15994 /* Store param pointer as passed in by caller */
15995 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015996 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015997 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015998 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015999 if(IS_WDI_STATUS_FAILURE(status))
16000 {
16001 /* failure returned by WDI API */
16002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16003 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16005 vos_mem_free(pWdaParams) ;
16006 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16007 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16008 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016009 return CONVERT_WDI2VOS_STATUS(status) ;
16010}
Jeff Johnson295189b2012-06-20 16:38:30 -070016011/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016012 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016013 *
16014 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016015void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016016 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16017 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016018{
16019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016021 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016022/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16023 if(NULL == pWdaParams)
16024 {
16025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016026 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016027 VOS_ASSERT(0) ;
16028 return ;
16029 }
16030
16031 vos_mem_free(pWdaParams->wdaMsgParam) ;
16032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16033 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016034 //print a msg, nothing else to do
16035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016036 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016037 return ;
16038}
Jeff Johnson295189b2012-06-20 16:38:30 -070016039/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016040 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16041 * Free memory.
16042 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16043 */
16044void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16045{
16046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16047
16048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16049 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16050
16051 if(NULL == pWdaParams)
16052 {
16053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16054 "%s: Invalid pWdaParams pointer", __func__);
16055 VOS_ASSERT(0);
16056 return;
16057 }
16058
16059 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16060 {
16061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16062 vos_mem_free(pWdaParams->wdaMsgParam);
16063 vos_mem_free(pWdaParams);
16064 }
16065
16066 return;
16067}
16068/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016069 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16070 * Request to WDI to clear Receive Filters
16071 */
16072VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16073 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16074{
Jeff Johnson43971f52012-07-17 12:26:56 -070016075 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016076 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16077 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16078 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016080 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016081 if(NULL == pwdiRcvFltPktClearReqParamsType)
16082 {
16083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016084 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016085 VOS_ASSERT(0);
16086 return VOS_STATUS_E_NOMEM;
16087 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016088 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16089 if(NULL == pWdaParams)
16090 {
16091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016093 VOS_ASSERT(0);
16094 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16095 return VOS_STATUS_E_NOMEM;
16096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016097 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16098 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016099 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16100 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16101 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16102 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016103
Yue Ma7f44bbe2013-04-12 11:47:39 -070016104 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016105 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016106 /* Store Params pass it to WDI */
16107 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16108 pWdaParams->pWdaContext = pWDA;
16109 /* Store param pointer as passed in by caller */
16110 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016111 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016112 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016113 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016114 if(IS_WDI_STATUS_FAILURE(status))
16115 {
16116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16117 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016119 vos_mem_free(pWdaParams->wdaMsgParam);
16120 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016122 return CONVERT_WDI2VOS_STATUS(status) ;
16123}
16124#endif // WLAN_FEATURE_PACKET_FILTERING
16125
Jeff Johnson295189b2012-06-20 16:38:30 -070016126/*
16127 * FUNCTION: WDA_ProcessSetPowerParamsReq
16128 * Request to WDI to set power params
16129 */
16130VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16131 tSirSetPowerParamsReq *pPowerParams)
16132{
Jeff Johnson43971f52012-07-17 12:26:56 -070016133 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016134 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16135 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016136 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016138 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016139 if(NULL == pwdiSetPowerParamsReqInfo)
16140 {
16141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016142 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016143 VOS_ASSERT(0);
16144 return VOS_STATUS_E_NOMEM;
16145 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016146 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16147 if(NULL == pWdaParams)
16148 {
16149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016150 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016151 VOS_ASSERT(0);
16152 vos_mem_free(pwdiSetPowerParamsReqInfo);
16153 return VOS_STATUS_E_NOMEM;
16154 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016155
Jeff Johnson295189b2012-06-20 16:38:30 -070016156
16157 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16158 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016159 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16160 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016161 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16162 pPowerParams->uListenInterval;
16163 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16164 pPowerParams->uBcastMcastFilter;
16165 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16166 pPowerParams->uEnableBET;
16167 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16168 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016169 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16170 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016171 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16172 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016173
Jeff Johnson295189b2012-06-20 16:38:30 -070016174 /* Store Params pass it to WDI */
16175 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16176 pWdaParams->pWdaContext = pWDA;
16177 /* Store param pointer as passed in by caller */
16178 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016179 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016180 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016181 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016182 if(IS_WDI_STATUS_FAILURE(status))
16183 {
16184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16185 "Failure in Set power params REQ WDI API, free all the memory " );
16186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16187 vos_mem_free(pWdaParams->wdaMsgParam);
16188 pWdaParams->wdaWdiApiMsgParam = NULL;
16189 pWdaParams->wdaMsgParam = NULL;
16190 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016191 return CONVERT_WDI2VOS_STATUS(status) ;
16192}
16193
16194/*
16195 * FUNCTION: WDA_SetTmLevelRspCallback
16196 * Set TM Level response
16197 */
16198void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16199{
16200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16201
16202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016203 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016204
16205 if(NULL == pWdaParams)
16206 {
16207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016208 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016209 VOS_ASSERT(0) ;
16210 return ;
16211 }
16212
16213 /* Dose not need to send notification to upper layer
16214 * Just free allocated resources */
16215 if( pWdaParams != NULL )
16216 {
16217 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16218 {
16219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16220 }
16221 vos_mem_free(pWdaParams->wdaMsgParam) ;
16222 vos_mem_free(pWdaParams) ;
16223 }
16224}
16225
16226/*
16227 * FUNCTION: WDA_ProcessSetTmLevelReq
16228 * Set TM Level request
16229 */
16230VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16231 tAniSetTmLevelReq *setTmLevelReq)
16232{
16233 WDI_Status status = WDI_STATUS_SUCCESS ;
16234 tWDA_ReqParams *pWdaParams ;
16235 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16236 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16237 sizeof(WDI_SetTmLevelReqType)) ;
16238 if(NULL == wdiSetTmLevelReq)
16239 {
16240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016242 VOS_ASSERT(0);
16243 return VOS_STATUS_E_NOMEM;
16244 }
16245
16246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16247 if(NULL == pWdaParams)
16248 {
16249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016251 VOS_ASSERT(0);
16252 vos_mem_free(wdiSetTmLevelReq);
16253 return VOS_STATUS_E_NOMEM;
16254 }
16255
16256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016257 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016258
16259 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16260 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16261
16262 pWdaParams->pWdaContext = pWDA;
16263 pWdaParams->wdaMsgParam = setTmLevelReq;
16264 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16265
16266 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16267 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16268
16269 if(IS_WDI_STATUS_FAILURE(status))
16270 {
16271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016272 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016273 vos_mem_free(pWdaParams->wdaMsgParam) ;
16274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16275 vos_mem_free(pWdaParams) ;
16276 }
16277
16278 return CONVERT_WDI2VOS_STATUS(status) ;
16279}
16280
16281VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16282 tpTxControlParams pTxCtrlParam)
16283{
16284 VOS_STATUS wdaStatus;
16285
16286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016287 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016288 if( pTxCtrlParam == NULL )
16289 {
16290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016291 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016292 return VOS_STATUS_E_FAILURE;
16293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016294 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16295 {
16296 wdaStatus = WDA_SuspendDataTx(pWDA);
16297 }
16298 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16299 {
16300 wdaStatus = WDA_ResumeDataTx(pWDA);
16301 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016302 return wdaStatus;
16303}
16304
16305 /* FUNCTION WDA_featureCapsExchange
16306 * WDA API to invoke capability exchange between host and FW.
16307 */
16308void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16309{
16310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016311 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016312 WDI_featureCapsExchangeReq( NULL, pVosContext);
16313}
16314
Yathish9f22e662012-12-10 14:21:35 -080016315/* FUNCTION WDA_disableCapablityFeature
16316 * WDA API to diable Active mode offload in host.
16317 */
16318void WDA_disableCapablityFeature(tANI_U8 feature_index)
16319{
16320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16321 "%s:enter", __func__ );
16322 WDI_disableCapablityFeature(feature_index);
16323}
16324
Jeff Johnson295189b2012-06-20 16:38:30 -070016325 /* FUNCTION WDA_getHostWlanFeatCaps
16326 * Wrapper for WDI API, that will return if the feature (enum value).passed
16327 * to this API is supported or not in Host
16328 * return value
16329 * 0 - implies feature is NOT Supported
16330 * any non zero value - implies feature is SUPPORTED
16331 */
16332tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16333{
16334 return WDI_getHostWlanFeatCaps(featEnumValue);
16335}
16336
16337 /* FUNCTION WDA_getFwWlanFeatCaps
16338 * Wrapper for WDI API, that will return if the feature (enum value).passed
16339 * to this API is supported or not in FW
16340 * return value
16341 * 0 - implies feature is NOT Supported
16342 * any non zero value - implies feature is SUPPORTED
16343 */
16344tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16345{
16346 return WDI_getFwWlanFeatCaps(featEnumValue);
16347}
16348
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016349
Jeff Johnson295189b2012-06-20 16:38:30 -070016350/*
16351 * FUNCTION: WDA_shutdown
16352 * Shutdown WDA/WDI without handshaking with Riva.
16353 * Synchronous function.
16354 */
16355VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16356{
16357 WDI_Status wdiStatus;
16358 //tANI_U8 eventIdx = 0;
16359 VOS_STATUS status = VOS_STATUS_SUCCESS;
16360 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016361 if (NULL == pWDA)
16362 {
16363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016364 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016365 VOS_ASSERT(0);
16366 return VOS_STATUS_E_FAILURE;
16367 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016368 /* FTM mode stay START_STATE */
16369 if( (WDA_READY_STATE != pWDA->wdaState) &&
16370 (WDA_INIT_STATE != pWDA->wdaState) &&
16371 (WDA_START_STATE != pWDA->wdaState) )
16372 {
16373 VOS_ASSERT(0);
16374 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016375
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016376 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16377 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016378 {
16379 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016380 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016381 }
Leo Chang9d76f622013-08-23 16:34:52 -070016382 else
16383 {
16384 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16385 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016386
Jeff Johnson295189b2012-06-20 16:38:30 -070016387 /* call WDI shutdown */
16388 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016389 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16390 {
16391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16392 "error in WDA Stop" );
16393 status = VOS_STATUS_E_FAILURE;
16394 }
16395 /* WDI stop is synchrnous, shutdown is complete when it returns */
16396 pWDA->wdaState = WDA_STOP_STATE;
16397
Jeff Johnson295189b2012-06-20 16:38:30 -070016398 /* shutdown should perform the stop & close actions. */
16399 /* Destroy the event */
16400 status = vos_event_destroy(&pWDA->txFrameEvent);
16401 if(!VOS_IS_STATUS_SUCCESS(status))
16402 {
16403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016404 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016405 status = VOS_STATUS_E_FAILURE;
16406 }
16407 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16408 if(!VOS_IS_STATUS_SUCCESS(status))
16409 {
16410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016411 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016412 status = VOS_STATUS_E_FAILURE;
16413 }
16414 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16415 if(!VOS_IS_STATUS_SUCCESS(status))
16416 {
16417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016418 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016419 status = VOS_STATUS_E_FAILURE;
16420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016421 /* free WDA context */
16422 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16423 if ( !VOS_IS_STATUS_SUCCESS(status) )
16424 {
16425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16426 "error in WDA close " );
16427 status = VOS_STATUS_E_FAILURE;
16428 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016429 return status;
16430}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016431
Jeff Johnsone7245742012-09-05 17:12:55 -070016432/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016433 * FUNCTION: WDA_setNeedShutdown
16434 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016435 */
16436
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016437void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016438{
16439 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016440 if(pWDA == NULL)
16441 {
16442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16443 "Could not get the WDA Context pointer" );
16444 return;
16445 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016446 pWDA->needShutdown = TRUE;
16447}
16448/*
16449 * FUNCTION: WDA_needShutdown
16450 * WDA needs a shutdown
16451 */
16452
16453v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16454{
16455 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016456 if(pWDA == NULL)
16457 {
16458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16459 "Could not get the WDA Context pointer" );
16460 return 0;
16461 }
16462 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016463}
16464
Mohit Khanna4a70d262012-09-11 16:30:12 -070016465#ifdef WLAN_FEATURE_11AC
16466/*
16467 * FUNCTION: WDA_SetBeaconFilterReqCallback
16468 *
16469 */
16470void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16471{
16472 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016474 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016475 if(NULL == pWdaParams)
16476 {
16477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016478 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016479 VOS_ASSERT(0) ;
16480 return ;
16481 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016482
Mohit Khanna4a70d262012-09-11 16:30:12 -070016483 vos_mem_free(pWdaParams->wdaMsgParam) ;
16484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16485 vos_mem_free(pWdaParams) ;
16486 /*
16487 * No respone required for SetBeaconFilter req so just free the request
16488 * param here
16489 */
16490
16491 return ;
16492}
16493
16494VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16495 tUpdateVHTOpMode *pData)
16496{
16497 WDI_Status status = WDI_STATUS_SUCCESS ;
16498 tWDA_ReqParams *pWdaParams ;
16499 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16500 sizeof(WDI_UpdateVHTOpMode)) ;
16501 if(NULL == wdiTemp)
16502 {
16503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016504 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016505 VOS_ASSERT(0);
16506 return VOS_STATUS_E_NOMEM;
16507 }
16508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16509 if(NULL == pWdaParams)
16510 {
16511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016512 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016513 VOS_ASSERT(0);
16514 vos_mem_free(wdiTemp);
16515 return VOS_STATUS_E_NOMEM;
16516 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053016517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16518 "------> %s Opmode = %d and staid = %d" ,
16519 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016520 wdiTemp->opMode = pData->opMode;
16521 wdiTemp->staId = pData->staId;
16522
16523 pWdaParams->pWdaContext = pWDA;
16524 /* Store Req pointer, as this will be used for response */
16525 pWdaParams->wdaMsgParam = (void *)pData;
16526 /* store Params pass it to WDI */
16527 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16528
16529 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16530
16531 if(IS_WDI_STATUS_FAILURE(status))
16532 {
16533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16534 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16536 vos_mem_free(pWdaParams->wdaMsgParam);
16537 vos_mem_free(pWdaParams);
16538 }
16539 return CONVERT_WDI2VOS_STATUS(status) ;
16540}
16541#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016542
16543/*==========================================================================
16544 FUNCTION WDA_TransportChannelDebug
16545
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016546 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016547 Display Transport Channel debugging information
16548 User may request to display DXE channel snapshot
16549 Or if host driver detects any abnormal stcuk may display
16550
16551 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016552 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016553 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016554 debugFlags : Enable stall detect features
16555 defined by WPAL_DeviceDebugFlags
16556 These features may effect
16557 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016558
16559 RETURN VALUE
16560 NONE
16561
16562===========================================================================*/
16563void WDA_TransportChannelDebug
16564(
schang6295e542013-03-12 15:31:23 -070016565 tpAniSirGlobal pMac,
16566 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016567 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016568)
16569{
Mihir Shete40a55652014-03-02 14:14:47 +053016570 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016571 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016572}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016573
16574/*==========================================================================
16575 FUNCTION WDA_SetEnableSSR
16576
16577 DESCRIPTION
16578 API to enable/disable SSR on WDI timeout
16579
16580 PARAMETERS
16581 enableSSR : enable/disable SSR
16582
16583 RETURN VALUE
16584 NONE
16585
16586===========================================================================*/
16587void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16588{
16589 WDI_SetEnableSSR(enableSSR);
16590}
Leo Chang9056f462013-08-01 19:21:11 -070016591
16592#ifdef FEATURE_WLAN_LPHB
16593/*
16594 * FUNCTION: WDA_LPHBconfRspCallback
16595 *
16596 */
16597void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16598{
16599 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16600
16601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16602 "<------ %s " ,__func__);
16603 if (NULL == pWdaParams)
16604 {
16605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16606 "%s: pWdaParams received NULL", __func__);
16607 VOS_ASSERT(0) ;
16608 return ;
16609 }
16610
16611 /* Do not need to send notification to upper layer
16612 * Just free allocated resources */
16613 if (pWdaParams != NULL)
16614 {
16615 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16616 {
16617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16618 }
16619 vos_mem_free(pWdaParams->wdaMsgParam) ;
16620 vos_mem_free(pWdaParams) ;
16621 }
16622
16623 return;
16624}
16625
16626/*
16627 * FUNCTION: WDA_ProcessLPHBConfReq
16628 *
16629 */
16630VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16631 tSirLPHBReq *pData)
16632{
16633 WDI_Status wdiStatus;
16634 tWDA_ReqParams *pWdaParams ;
16635
16636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16637 "------> %s " , __func__);
16638
16639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16640 if (NULL == pWdaParams)
16641 {
16642 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16643 "%s: VOS MEM Alloc Failure", __func__);
16644 VOS_ASSERT(0);
16645 vos_mem_free(pData);
16646 return VOS_STATUS_E_NOMEM;
16647 }
16648
16649 pWdaParams->pWdaContext = pWDA;
16650 pWdaParams->wdaMsgParam = (void *)pData;
16651 pWdaParams->wdaWdiApiMsgParam = NULL;
16652
16653 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16654 if (WDI_STATUS_PENDING == wdiStatus)
16655 {
16656 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16657 "Pending received for %s:%d ", __func__, __LINE__);
16658 }
16659 else if (WDI_STATUS_SUCCESS != wdiStatus)
16660 {
16661 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16662 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16663 vos_mem_free(pWdaParams->wdaMsgParam);
16664 vos_mem_free(pWdaParams);
16665 }
16666
16667 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16668}
16669#endif /* FEATURE_WLAN_LPHB */
16670
c_hpothu92367912014-05-01 15:18:17 +053016671void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16672 void* pUserData)
16673{
16674 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16675
16676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16677 "<------ %s " ,__func__);
16678 if (NULL == pBcnMissRateInfo)
16679 {
16680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16681 "%s: pWdaParams received NULL", __func__);
16682 VOS_ASSERT(0) ;
16683 return ;
16684 }
16685 if (pBcnMissRateInfo->callback)
16686 {
16687 pBcnMissRateInfo->callback(status, bcnMissRate,
16688 pBcnMissRateInfo->data);
16689 }
16690 vos_mem_free(pUserData);
16691
16692 return;
16693}
16694
16695v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16696 tSirBcnMissRateReq *pData)
16697{
16698 WDI_Status wdiStatus;
16699 tSirBcnMissRateInfo *pBcnMissRateInfo;
16700
16701 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16702 "------> %s " , __func__);
16703
16704 pBcnMissRateInfo =
16705 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
16706 if (NULL == pBcnMissRateInfo)
16707 {
16708 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16709 "%s: VOS MEM Alloc Failure", __func__);
16710 VOS_ASSERT(0);
16711 vos_mem_free(pData);
16712 return;
16713 }
16714
16715 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
16716 pBcnMissRateInfo->data = pData->data;
16717
16718 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
16719 WDA_GetBcnMissRateCallback,
16720 pData->bssid);
16721 if (WDI_STATUS_PENDING == wdiStatus)
16722 {
16723 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16724 "Pending received for %s:%d ", __func__, __LINE__);
16725 }
16726 else if (WDI_STATUS_SUCCESS != wdiStatus)
16727 {
16728 if (pBcnMissRateInfo->callback)
16729 {
16730 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
16731 -1, pBcnMissRateInfo->data);
16732 }
16733 }
16734 vos_mem_free(pData);
16735}
Dino Mycle41bdc942014-06-10 11:30:24 +053016736
16737#ifdef WLAN_FEATURE_EXTSCAN
16738
16739/*==========================================================================
16740 FUNCTION WDA_EXTScanStartRspCallback
16741
16742 DESCRIPTION
16743 API to send EXTScan Start Response to HDD
16744
16745 PARAMETERS
16746 pEventData: Response from FW
16747 pUserData:
16748===========================================================================*/
16749void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
16750{
16751 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16752 tWDA_CbContext *pWDA = NULL;
16753 void *pCallbackContext;
16754 tpAniSirGlobal pMac;
16755
16756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16757 "%s:", __func__);
16758 if (NULL == pWdaParams)
16759 {
16760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16761 "%s: pWdaParams received NULL", __func__);
16762 VOS_ASSERT(0);
16763 return;
16764 }
16765
16766 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16767
16768 if (NULL == pWDA)
16769 {
16770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16771 "%s: pWDA received NULL", __func__);
16772 VOS_ASSERT(0);
16773 goto error;
16774 }
16775
16776 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16777 if (NULL == pMac)
16778 {
16779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16780 "%s:pMac is NULL", __func__);
16781 VOS_ASSERT(0);
16782 goto error;
16783 }
16784
16785 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16786
16787 if (pMac->sme.pEXTScanIndCb)
16788 {
16789 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
16790 pEventData);
16791 }
16792 else
16793 {
16794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16795 "%s:HDD callback is null", __func__);
16796 VOS_ASSERT(0);
16797 }
16798
16799error:
16800
16801 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16802 {
16803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16804 }
16805 if (pWdaParams->wdaMsgParam != NULL)
16806 {
16807 vos_mem_free(pWdaParams->wdaMsgParam);
16808 }
16809 vos_mem_free(pWdaParams) ;
16810
16811 return;
16812}
16813
16814/*==========================================================================
16815 FUNCTION WDA_EXTScanStopRspCallback
16816
16817 DESCRIPTION
16818 API to send EXTScan Stop Response to HDD
16819
16820 PARAMETERS
16821 pEventData: Response from FW
16822 pUserData:
16823===========================================================================*/
16824void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
16825{
16826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16827 tWDA_CbContext *pWDA = NULL;
16828 void *pCallbackContext;
16829 tpAniSirGlobal pMac;
16830
16831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16832 "%s:", __func__);
16833 if (NULL == pWdaParams)
16834 {
16835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16836 "%s: pWdaParams received NULL", __func__);
16837 VOS_ASSERT(0);
16838 return;
16839 }
16840
16841 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16842
16843 if (NULL == pWDA)
16844 {
16845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16846 "%s: pWDA received NULL", __func__);
16847 VOS_ASSERT(0);
16848 goto error;
16849 }
16850
16851 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16852 if (NULL == pMac)
16853 {
16854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16855 "%s:pMac is NULL", __func__);
16856 VOS_ASSERT(0);
16857 goto error;
16858 }
16859 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16860
16861 if (pMac->sme.pEXTScanIndCb)
16862 {
16863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16864 "%s:HDD call back function called", __func__);
16865 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
16866 pEventData);
16867 }
16868 else
16869 {
16870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16871 "%s:HDD callback is null", __func__);
16872 VOS_ASSERT(0);
16873 }
16874
16875error:
16876
16877 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16878 {
16879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16880 }
16881 if (pWdaParams->wdaMsgParam != NULL)
16882 {
16883 vos_mem_free(pWdaParams->wdaMsgParam);
16884 }
16885 vos_mem_free(pWdaParams) ;
16886
16887
16888 return;
16889}
16890
16891/*==========================================================================
16892 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
16893
16894 DESCRIPTION
16895 API to send EXTScan Get Cached Results Response to HDD
16896
16897 PARAMETERS
16898 pEventData: Response from FW
16899 pUserData:
16900===========================================================================*/
16901void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
16902{
16903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16904 tWDA_CbContext *pWDA = NULL;
16905 void *pCallbackContext;
16906 tpAniSirGlobal pMac;
16907
16908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16909 "%s: ", __func__);
16910 if (NULL == pWdaParams)
16911 {
16912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16913 "%s: pWdaParams received NULL", __func__);
16914 VOS_ASSERT(0);
16915 return;
16916 }
16917
16918 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16919
16920 if (NULL == pWDA)
16921 {
16922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16923 "%s: pWDA received NULL", __func__);
16924 VOS_ASSERT(0);
16925 goto error;
16926 }
16927
16928 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16929 if (NULL == pMac)
16930 {
16931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16932 "%s:pMac is NULL", __func__);
16933 VOS_ASSERT(0);
16934 goto error;
16935 }
16936
16937 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16938
16939 if (pMac->sme.pEXTScanIndCb)
16940 {
16941 pMac->sme.pEXTScanIndCb(pCallbackContext,
16942 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
16943 pEventData);
16944 }
16945 else
16946 {
16947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16948 "%s:HDD callback is null", __func__);
16949 VOS_ASSERT(0);
16950 }
16951
16952
16953error:
16954
16955 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16956 {
16957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16958 }
16959 if (pWdaParams->wdaMsgParam != NULL)
16960 {
16961 vos_mem_free(pWdaParams->wdaMsgParam);
16962 }
16963 vos_mem_free(pWdaParams) ;
16964
16965 return;
16966}
16967
16968/*==========================================================================
16969 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
16970
16971 DESCRIPTION
16972 API to send EXTScan Get Capabilities Response to HDD
16973
16974 PARAMETERS
16975 pEventData: Response from FW
16976 pUserData:
16977===========================================================================*/
16978void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
16979{
16980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16981 tWDA_CbContext *pWDA = NULL;
16982 void *pCallbackContext;
16983 tpAniSirGlobal pMac;
16984
16985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16986 "%s:", __func__);
16987 if (NULL == pWdaParams)
16988 {
16989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16990 "%s: pWdaParams received NULL", __func__);
16991 VOS_ASSERT(0);
16992 return;
16993 }
16994
16995 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16996
16997 if (NULL == pWDA)
16998 {
16999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17000 "%s: pWDA received NULL", __func__);
17001 VOS_ASSERT(0);
17002 goto error;
17003 }
17004
17005 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17006 if (NULL == pMac)
17007 {
17008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17009 "%s:pMac is NULL", __func__);
17010 VOS_ASSERT(0);
17011 goto error;
17012 }
17013
17014 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17015
17016 if (pMac->sme.pEXTScanIndCb)
17017 {
17018 pMac->sme.pEXTScanIndCb(pCallbackContext,
17019 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17020 pEventData);
17021 }
17022 else
17023 {
17024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17025 "%s:HDD callback is null", __func__);
17026 VOS_ASSERT(0);
17027 }
17028
17029
17030error:
17031
17032 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17033 {
17034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17035 }
17036 if (pWdaParams->wdaMsgParam != NULL)
17037 {
17038 vos_mem_free(pWdaParams->wdaMsgParam);
17039 }
17040 vos_mem_free(pWdaParams) ;
17041
17042 return;
17043}
17044
17045/*==========================================================================
17046 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17047
17048 DESCRIPTION
17049 API to send EXTScan Set BSSID Hotlist Response to HDD
17050
17051 PARAMETERS
17052 pEventData: Response from FW
17053 pUserData:
17054===========================================================================*/
17055void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17056{
17057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17058 tWDA_CbContext *pWDA = NULL;
17059 void *pCallbackContext;
17060 tpAniSirGlobal pMac;
17061
17062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17063 "%s: ", __func__);
17064 if (NULL == pWdaParams)
17065 {
17066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17067 "%s: pWdaParams received NULL", __func__);
17068 VOS_ASSERT(0) ;
17069 return;
17070 }
17071
17072 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17073
17074 if (NULL == pWDA)
17075 {
17076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17077 "%s: pWDA received NULL", __func__);
17078 VOS_ASSERT(0);
17079 goto error;
17080 }
17081
17082 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17083 if (NULL == pMac)
17084 {
17085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17086 "%s:pMac is NULL", __func__);
17087 VOS_ASSERT(0);
17088 goto error;
17089 }
17090
17091 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17092
17093 if (pMac->sme.pEXTScanIndCb)
17094 {
17095 pMac->sme.pEXTScanIndCb(pCallbackContext,
17096 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17097 pEventData);
17098 }
17099 else
17100 {
17101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17102 "%s:HDD callback is null", __func__);
17103 VOS_ASSERT(0);
17104 }
17105
17106
17107error:
17108
17109 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17110 {
17111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17112 }
17113 if (pWdaParams->wdaMsgParam != NULL)
17114 {
17115 vos_mem_free(pWdaParams->wdaMsgParam);
17116 }
17117 vos_mem_free(pWdaParams) ;
17118
17119 return;
17120}
17121
17122/*==========================================================================
17123 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17124
17125 DESCRIPTION
17126 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17127
17128 PARAMETERS
17129 pEventData: Response from FW
17130 pUserData:
17131===========================================================================*/
17132void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17133{
17134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17135 tWDA_CbContext *pWDA = NULL;
17136 void *pCallbackContext;
17137 tpAniSirGlobal pMac;
17138
17139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17140 "%s:", __func__);
17141 if (NULL == pWdaParams)
17142 {
17143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17144 "%s: pWdaParams received NULL", __func__);
17145 VOS_ASSERT(0) ;
17146 return;
17147 }
17148
17149 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17150
17151 if (NULL == pWDA)
17152 {
17153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17154 "%s: pWDA received NULL", __func__);
17155 VOS_ASSERT(0);
17156 goto error;
17157 }
17158
17159 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17160 if (NULL == pMac)
17161 {
17162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17163 "%s:pMac is NULL", __func__);
17164 VOS_ASSERT(0);
17165 goto error;
17166 }
17167
17168 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17169
17170 if (pMac->sme.pEXTScanIndCb)
17171 {
17172 pMac->sme.pEXTScanIndCb(pCallbackContext,
17173 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17174 pEventData);
17175 }
17176 else
17177 {
17178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17179 "%s:HDD callback is null", __func__);
17180 VOS_ASSERT(0);
17181 }
17182
17183
17184error:
17185
17186 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17187 {
17188 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17189 }
17190 if (pWdaParams->wdaMsgParam != NULL)
17191 {
17192 vos_mem_free(pWdaParams->wdaMsgParam);
17193 }
17194 vos_mem_free(pWdaParams) ;
17195
17196 return;
17197}
17198
17199/*==========================================================================
17200 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17201
17202 DESCRIPTION
17203 API to send EXTScan Set Significant RSSI Change RSP to HDD
17204
17205 PARAMETERS
17206 pEventData: Response from FW
17207 pUserData:
17208===========================================================================*/
17209void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17210{
17211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17212 tWDA_CbContext *pWDA = NULL;
17213 void *pCallbackContext;
17214 tpAniSirGlobal pMac;
17215
17216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17217 "%s:", __func__);
17218 if (NULL == pWdaParams)
17219 {
17220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17221 "%s: pWdaParams received NULL", __func__);
17222 VOS_ASSERT(0) ;
17223 return;
17224 }
17225
17226 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17227
17228 if (NULL == pWDA)
17229 {
17230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17231 "%s: pWDA received NULL", __func__);
17232 VOS_ASSERT(0);
17233 goto error;
17234 }
17235
17236 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17237 if (NULL == pMac)
17238 {
17239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17240 "%s:pMac is NULL", __func__);
17241 VOS_ASSERT(0);
17242 goto error;
17243 }
17244
17245 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17246
17247 if (pMac->sme.pEXTScanIndCb)
17248 {
17249 pMac->sme.pEXTScanIndCb(pCallbackContext,
17250 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17251 pEventData);
17252 }
17253 else
17254 {
17255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17256 "%s:HDD callback is null", __func__);
17257 VOS_ASSERT(0);
17258 }
17259
17260
17261error:
17262
17263 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17264 {
17265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17266 }
17267 if (pWdaParams->wdaMsgParam != NULL)
17268 {
17269 vos_mem_free(pWdaParams->wdaMsgParam);
17270 }
17271 vos_mem_free(pWdaParams) ;
17272
17273 return;
17274}
17275
17276/*==========================================================================
17277 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17278
17279 DESCRIPTION
17280 API to send EXTScan Set Significant RSSI Change RSP to HDD
17281
17282 PARAMETERS
17283 pEventData: Response from FW
17284 pUserData:
17285===========================================================================*/
17286void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17287 void* pUserData)
17288{
17289 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17290 tWDA_CbContext *pWDA = NULL;
17291 void *pCallbackContext;
17292 tpAniSirGlobal pMac;
17293
17294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17295 "%s:", __func__);
17296 if (NULL == pWdaParams)
17297 {
17298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17299 "%s: pWdaParams received NULL", __func__);
17300 VOS_ASSERT(0) ;
17301 return;
17302 }
17303
17304 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17305
17306 if (NULL == pWDA)
17307 {
17308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17309 "%s: pWDA received NULL", __func__);
17310 VOS_ASSERT(0);
17311 goto error;
17312 }
17313
17314 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17315 if (NULL == pMac)
17316 {
17317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17318 "%s:pMac is NULL", __func__);
17319 VOS_ASSERT(0);
17320 goto error;
17321 }
17322
17323 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17324
17325 if (pMac->sme.pEXTScanIndCb)
17326 {
17327 pMac->sme.pEXTScanIndCb(pCallbackContext,
17328 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17329 pEventData);
17330 }
17331 else
17332 {
17333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17334 "%s:HDD callback is null", __func__);
17335 VOS_ASSERT(0);
17336 }
17337
17338
17339error:
17340
17341 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17342 {
17343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17344 }
17345 if (pWdaParams->wdaMsgParam != NULL)
17346 {
17347 vos_mem_free(pWdaParams->wdaMsgParam);
17348 }
17349 vos_mem_free(pWdaParams) ;
17350
17351 return;
17352}
17353
17354/*==========================================================================
17355 FUNCTION WDA_ProcessEXTScanStartReq
17356
17357 DESCRIPTION
17358 API to send EXTScan Start Request to WDI
17359
17360 PARAMETERS
17361 pWDA: Pointer to WDA context
17362 wdaRequest: Pointer to EXTScan req parameters
17363===========================================================================*/
17364VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17365 tSirEXTScanStartReqParams *wdaRequest)
17366{
17367 WDI_Status status = WDI_STATUS_SUCCESS;
17368 tWDA_ReqParams *pWdaParams;
17369
17370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17371 "%s: ", __func__);
17372 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17373 if (NULL == pWdaParams)
17374 {
17375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17376 "%s: VOS MEM Alloc Failure", __func__);
17377 VOS_ASSERT(0);
17378 return VOS_STATUS_E_NOMEM;
17379 }
17380 pWdaParams->pWdaContext = pWDA;
17381 pWdaParams->wdaMsgParam = wdaRequest;
17382 pWdaParams->wdaWdiApiMsgParam = NULL;
17383
17384 status = WDI_EXTScanStartReq((void *)wdaRequest,
17385 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17386 (void *)pWdaParams);
17387 if (IS_WDI_STATUS_FAILURE(status))
17388 {
17389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17390 "Failure to request. Free all the memory " );
17391 vos_mem_free(pWdaParams->wdaMsgParam);
17392 vos_mem_free(pWdaParams);
17393 }
17394 return CONVERT_WDI2VOS_STATUS(status);
17395}
17396
17397/*==========================================================================
17398 FUNCTION WDA_ProcessEXTScanStopReq
17399
17400 DESCRIPTION
17401 API to send EXTScan Start Request to WDI
17402
17403 PARAMETERS
17404 pWDA: Pointer to WDA context
17405 wdaRequest: Pointer to EXTScan req parameters
17406===========================================================================*/
17407VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17408 tSirEXTScanStopReqParams *wdaRequest)
17409{
17410 WDI_Status status = WDI_STATUS_SUCCESS;
17411 tWDA_ReqParams *pWdaParams;
17412
17413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17414 "%s:", __func__);
17415 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17416 if (NULL == pWdaParams)
17417 {
17418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17419 "%s: VOS MEM Alloc Failure", __func__);
17420 VOS_ASSERT(0);
17421 return VOS_STATUS_E_NOMEM;
17422 }
17423 pWdaParams->pWdaContext = pWDA;
17424 pWdaParams->wdaMsgParam = wdaRequest;
17425 pWdaParams->wdaWdiApiMsgParam = NULL;
17426
17427 status = WDI_EXTScanStopReq((void *)wdaRequest,
17428 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17429 (void *)pWdaParams);
17430 if (IS_WDI_STATUS_FAILURE(status))
17431 {
17432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17433 "Failure to request. Free all the memory " );
17434 vos_mem_free(pWdaParams->wdaMsgParam);
17435 vos_mem_free(pWdaParams);
17436 }
17437 return CONVERT_WDI2VOS_STATUS(status);
17438}
17439
17440/*==========================================================================
17441 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17442
17443 DESCRIPTION
17444 API to send EXTScan Get Cached Results Request to WDI
17445
17446 PARAMETERS
17447 pWDA: Pointer to WDA context
17448 wdaRequest: Pointer to EXTScan req parameters
17449===========================================================================*/
17450VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17451 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17452{
17453 WDI_Status status = WDI_STATUS_SUCCESS;
17454 tWDA_ReqParams *pWdaParams;
17455
17456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17457 "%s: ", __func__);
17458 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17459 if (NULL == pWdaParams)
17460 {
17461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17462 "%s: VOS MEM Alloc Failure", __func__);
17463 VOS_ASSERT(0);
17464 return VOS_STATUS_E_NOMEM;
17465 }
17466 pWdaParams->pWdaContext = pWDA;
17467 pWdaParams->wdaMsgParam = wdaRequest;
17468 pWdaParams->wdaWdiApiMsgParam = NULL;
17469
17470 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17471 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17472 (void *)pWdaParams);
17473 if (IS_WDI_STATUS_FAILURE(status))
17474 {
17475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17476 "Failure to request. Free all the memory " );
17477 vos_mem_free(pWdaParams->wdaMsgParam);
17478 vos_mem_free(pWdaParams);
17479 }
17480 return CONVERT_WDI2VOS_STATUS(status);
17481}
17482
17483/*==========================================================================
17484 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17485
17486 DESCRIPTION
17487 API to send EXTScan Get Capabilities Request to WDI
17488
17489 PARAMETERS
17490 pWDA: Pointer to WDA context
17491 wdaRequest: Pointer to EXTScan req parameters
17492===========================================================================*/
17493VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17494 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17495{
17496 WDI_Status status = WDI_STATUS_SUCCESS;
17497 tWDA_ReqParams *pWdaParams;
17498
17499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17500 "%s:", __func__);
17501 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17502 if (NULL == pWdaParams)
17503 {
17504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17505 "%s: VOS MEM Alloc Failure", __func__);
17506 VOS_ASSERT(0);
17507 return VOS_STATUS_E_NOMEM;
17508 }
17509 pWdaParams->pWdaContext = pWDA;
17510 pWdaParams->wdaMsgParam = wdaRequest;
17511 pWdaParams->wdaWdiApiMsgParam = NULL;
17512
17513 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17514 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17515 (void *)pWdaParams);
17516 if (IS_WDI_STATUS_FAILURE(status))
17517 {
17518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17519 "Failure to request. Free all the memory " );
17520 vos_mem_free(pWdaParams->wdaMsgParam);
17521 vos_mem_free(pWdaParams);
17522 }
17523 return CONVERT_WDI2VOS_STATUS(status);
17524}
17525
17526/*==========================================================================
17527 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17528
17529 DESCRIPTION
17530 API to send Set BSSID Hotlist Request to WDI
17531
17532 PARAMETERS
17533 pWDA: Pointer to WDA context
17534 wdaRequest: Pointer to EXTScan req parameters
17535===========================================================================*/
17536VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17537 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17538{
17539 WDI_Status status = WDI_STATUS_SUCCESS;
17540 tWDA_ReqParams *pWdaParams;
17541
17542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17543 "%s: ", __func__);
17544 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17545 if (NULL == pWdaParams)
17546 {
17547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17548 "%s: VOS MEM Alloc Failure", __func__);
17549 VOS_ASSERT(0);
17550 return VOS_STATUS_E_NOMEM;
17551 }
17552 pWdaParams->pWdaContext = pWDA;
17553 pWdaParams->wdaMsgParam = wdaRequest;
17554 pWdaParams->wdaWdiApiMsgParam = NULL;
17555
17556 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17557 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17558 (void *)pWdaParams);
17559 if (IS_WDI_STATUS_FAILURE(status))
17560 {
17561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17562 "Failure to request. Free all the memory " );
17563 vos_mem_free(pWdaParams->wdaMsgParam);
17564 vos_mem_free(pWdaParams);
17565 }
17566 return CONVERT_WDI2VOS_STATUS(status);
17567}
17568
17569/*==========================================================================
17570 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17571
17572 DESCRIPTION
17573 API to send Reset BSSID Hotlist Request to WDI
17574
17575 PARAMETERS
17576 pWDA: Pointer to WDA context
17577 wdaRequest: Pointer to EXTScan req parameters
17578===========================================================================*/
17579VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17580 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17581{
17582 WDI_Status status = WDI_STATUS_SUCCESS;
17583 tWDA_ReqParams *pWdaParams;
17584
17585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17586 "%s:", __func__);
17587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17588 if (NULL == pWdaParams)
17589 {
17590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17591 "%s: VOS MEM Alloc Failure", __func__);
17592 VOS_ASSERT(0);
17593 return VOS_STATUS_E_NOMEM;
17594 }
17595 pWdaParams->pWdaContext = pWDA;
17596 pWdaParams->wdaMsgParam = wdaRequest;
17597 pWdaParams->wdaWdiApiMsgParam = NULL;
17598
17599 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17600 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17601 (void *)pWdaParams);
17602 if (IS_WDI_STATUS_FAILURE(status))
17603 {
17604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17605 "Failure to request. Free all the memory " );
17606 vos_mem_free(pWdaParams->wdaMsgParam);
17607 vos_mem_free(pWdaParams);
17608 }
17609 return CONVERT_WDI2VOS_STATUS(status);
17610}
17611
17612/*==========================================================================
17613 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17614
17615 DESCRIPTION
17616 API to send Set Significant RSSI Change Request to WDI
17617
17618 PARAMETERS
17619 pWDA: Pointer to WDA context
17620 wdaRequest: Pointer to EXTScan req parameters
17621===========================================================================*/
17622VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17623 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17624{
17625 WDI_Status status = WDI_STATUS_SUCCESS;
17626 tWDA_ReqParams *pWdaParams;
17627
17628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17629 "%s: ", __func__);
17630 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17631 if (NULL == pWdaParams)
17632 {
17633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17634 "%s: VOS MEM Alloc Failure", __func__);
17635 VOS_ASSERT(0);
17636 return VOS_STATUS_E_NOMEM;
17637 }
17638 pWdaParams->pWdaContext = pWDA;
17639 pWdaParams->wdaMsgParam = wdaRequest;
17640 pWdaParams->wdaWdiApiMsgParam = NULL;
17641
17642 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17643 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17644 (void *)pWdaParams);
17645 if (IS_WDI_STATUS_FAILURE(status))
17646 {
17647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17648 "Failure to request. Free all the memory " );
17649 vos_mem_free(pWdaParams->wdaMsgParam);
17650 vos_mem_free(pWdaParams);
17651 }
17652 return CONVERT_WDI2VOS_STATUS(status);
17653}
17654
17655/*==========================================================================
17656 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17657
17658 DESCRIPTION
17659 API to send Reset Significant RSSI Change Request to WDI
17660
17661 PARAMETERS
17662 pWDA: Pointer to WDA context
17663 wdaRequest: Pointer to EXTScan req parameters
17664===========================================================================*/
17665VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17666 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17667{
17668 WDI_Status status = WDI_STATUS_SUCCESS;
17669 tWDA_ReqParams *pWdaParams;
17670
17671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17672 "%s:", __func__);
17673 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17674 if (NULL == pWdaParams)
17675 {
17676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17677 "%s: VOS MEM Alloc Failure", __func__);
17678 VOS_ASSERT(0);
17679 return VOS_STATUS_E_NOMEM;
17680 }
17681 pWdaParams->pWdaContext = pWDA;
17682 pWdaParams->wdaMsgParam = wdaRequest;
17683 pWdaParams->wdaWdiApiMsgParam = NULL;
17684
17685 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
17686 (WDI_EXTScanResetSignfRSSIChangeRspCb)
17687 WDA_EXTScanResetSignfRSSIChangeRspCallback,
17688 (void *)pWdaParams);
17689 if (IS_WDI_STATUS_FAILURE(status))
17690 {
17691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17692 "Failure to request. Free all the memory " );
17693 vos_mem_free(pWdaParams->wdaMsgParam);
17694 vos_mem_free(pWdaParams);
17695 }
17696 return CONVERT_WDI2VOS_STATUS(status);
17697}
17698#endif /* WLAN_FEATURE_EXTSCAN */
17699
Sunil Duttbd736ed2014-05-26 21:19:41 +053017700#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17701
17702/*==========================================================================
17703 FUNCTION WDA_LLStatsSetRspCallback
17704
17705 DESCRIPTION
17706 API to process set link layer statistics response from FW
17707
17708 PARAMETERS
17709 pRsp: Pointer to set link layer statistics response
17710 pUserData: Pointer to user data
17711
17712 RETURN VALUE
17713 NONE
17714
17715===========================================================================*/
17716void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
17717{
17718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17719
17720
17721 if (NULL == pWdaParams)
17722 {
17723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17724 "%s: pWdaParams received NULL", __func__);
17725 VOS_ASSERT(0) ;
17726 return ;
17727 }
17728
17729 /* Do not need to send notification to upper layer
17730 * Just free allocated resources */
17731 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17732 {
17733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17734 }
17735 if (pWdaParams->wdaMsgParam != NULL)
17736 {
17737 vos_mem_free(pWdaParams->wdaMsgParam);
17738 }
17739 vos_mem_free(pWdaParams) ;
17740
17741 return;
17742}
17743
17744/*==========================================================================
17745 FUNCTION WDA_ProcessLLStatsSetReq
17746
17747 DESCRIPTION
17748 API to send Set Link Layer Stats request to WDI
17749
17750 PARAMETERS
17751 pWDA: Pointer to WDA context
17752 wdaRequest: Pointer to set Link Layer Stats req parameters
17753===========================================================================*/
17754VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
17755 tSirLLStatsSetReq *wdaRequest)
17756{
17757 WDI_Status status = WDI_STATUS_SUCCESS;
17758 tWDA_ReqParams *pWdaParams;
17759
17760 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17761 if (NULL == pWdaParams)
17762 {
17763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17764 "%s: VOS MEM Alloc Failure", __func__);
17765 VOS_ASSERT(0);
17766 return VOS_STATUS_E_NOMEM;
17767 }
17768 pWdaParams->pWdaContext = pWDA;
17769 pWdaParams->wdaMsgParam = wdaRequest;
17770 pWdaParams->wdaWdiApiMsgParam = NULL;
17771
17772 status = WDI_LLStatsSetReq((void *)wdaRequest,
17773 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
17774 (void *)pWdaParams);
17775 if (IS_WDI_STATUS_FAILURE(status))
17776 {
17777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17778 "Failure to request. Free all the memory " );
17779 vos_mem_free(pWdaParams->wdaMsgParam);
17780 vos_mem_free(pWdaParams);
17781 }
17782 return CONVERT_WDI2VOS_STATUS(status);
17783}
17784
17785/*==========================================================================
17786 FUNCTION WDA_LLStatsGetRspCallback
17787
17788 DESCRIPTION
17789 API to process get link layer statistics response from FW
17790
17791 PARAMETERS
17792 pRsp: Pointer to get link layer statistics response
17793 pUserData: Pointer to user data
17794
17795 RETURN VALUE
17796 NONE
17797
17798===========================================================================*/
17799void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
17800{
17801 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17802
17803 if (NULL == pWdaParams)
17804 {
17805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17806 "%s: pWdaParams received NULL", __func__);
17807 VOS_ASSERT(0) ;
17808 return ;
17809 }
17810
17811 /* Do not need to send notification to upper layer
17812 * Just free allocated resources */
17813 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17814 {
17815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17816 }
17817 if (pWdaParams->wdaMsgParam != NULL)
17818 {
17819 vos_mem_free(pWdaParams->wdaMsgParam);
17820 }
17821 vos_mem_free(pWdaParams) ;
17822
17823 return;
17824}
17825
17826/*==========================================================================
17827 FUNCTION WDA_ProcessLLStatsGetReq
17828
17829 DESCRIPTION
17830 API to send Get Link Layer Stats request to WDI
17831
17832 PARAMETERS
17833 pWDA: Pointer to WDA context
17834 wdaRequest: Pointer to get Link Layer Stats req parameters
17835===========================================================================*/
17836VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
17837 tSirLLStatsGetReq *wdaRequest)
17838{
17839 WDI_Status status = WDI_STATUS_SUCCESS;
17840 tWDA_ReqParams *pWdaParams;
17841
17842 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17843 if (NULL == pWdaParams)
17844 {
17845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17846 "%s: VOS MEM Alloc Failure", __func__);
17847 VOS_ASSERT(0);
17848 return VOS_STATUS_E_NOMEM;
17849 }
17850 pWdaParams->pWdaContext = pWDA;
17851 pWdaParams->wdaMsgParam = wdaRequest;
17852 pWdaParams->wdaWdiApiMsgParam = NULL;
17853
17854 status = WDI_LLStatsGetReq((void *) wdaRequest,
17855 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
17856 (void *)pWdaParams);
17857 if (IS_WDI_STATUS_FAILURE(status))
17858 {
17859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17860 "Failure to request. Free all the memory " );
17861 vos_mem_free(pWdaParams->wdaMsgParam);
17862 vos_mem_free(pWdaParams);
17863 }
17864 return CONVERT_WDI2VOS_STATUS(status);
17865}
17866
17867/*==========================================================================
17868 FUNCTION WDA_LLStatsClearRspCallback
17869
17870 DESCRIPTION
17871 API to process clear link layer statistics response from FW
17872
17873 PARAMETERS
17874 pRsp: Pointer to clear link layer statistics response
17875 pUserData: Pointer to user data
17876
17877 RETURN VALUE
17878 NONE
17879
17880===========================================================================*/
17881void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
17882{
17883 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17884
17885
17886 if (NULL == pWdaParams)
17887 {
17888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17889 "%s: pWdaParams received NULL", __func__);
17890 VOS_ASSERT(0) ;
17891 return ;
17892 }
17893 /* Do not need to send notification to upper layer
17894 * Just free allocated resources */
17895 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17896 {
17897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17898 }
17899 if (pWdaParams->wdaMsgParam != NULL)
17900 {
17901 vos_mem_free(pWdaParams->wdaMsgParam);
17902 }
17903 vos_mem_free(pWdaParams) ;
17904 return;
17905}
17906
17907/*==========================================================================
17908 FUNCTION WDA_ProcessLLStatsClearReq
17909
17910 DESCRIPTION
17911 API to send Clear Link Layer Stats request to WDI
17912
17913 PARAMETERS
17914 pWDA: Pointer to WDA context
17915 wdaRequest: Pointer to earLink Layer Stats req
17916===========================================================================*/
17917VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
17918 tSirLLStatsClearReq *wdaRequest)
17919{
17920 WDI_Status status = WDI_STATUS_SUCCESS;
17921 tWDA_ReqParams *pWdaParams;
17922
17923 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17924 if (NULL == pWdaParams)
17925 {
17926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17927 "%s: VOS MEM Alloc Failure", __func__);
17928 VOS_ASSERT(0);
17929 return VOS_STATUS_E_NOMEM;
17930 }
17931 pWdaParams->pWdaContext = pWDA;
17932 pWdaParams->wdaMsgParam = wdaRequest;
17933 pWdaParams->wdaWdiApiMsgParam = NULL;
17934
17935 status = WDI_LLStatsClearReq((void *) wdaRequest,
17936 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
17937 (void *)pWdaParams);
17938 if (IS_WDI_STATUS_FAILURE(status))
17939 {
17940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17941 "Failure to request. Free all the memory " );
17942 vos_mem_free(pWdaParams->wdaMsgParam);
17943 vos_mem_free(pWdaParams);
17944 }
17945 return CONVERT_WDI2VOS_STATUS(status);
17946}
17947
17948#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053017949
Abhishek Singh85b74712014-10-08 11:38:19 +053017950void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
17951{
17952 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
17953
17954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17955 "<------ %s " ,__func__);
17956 if (NULL == fwStatsinfo)
17957 {
17958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17959 "%s: pWdaParams received NULL", __func__);
17960 VOS_ASSERT(0);
17961 return;
17962 }
17963
17964 if(fwStatsinfo->callback)
17965 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
17966
17967 vos_mem_free(pUserData);
17968 return;
17969}
17970
17971
17972v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
17973 tSirFWStatsGetReq *pData)
17974{
17975
17976 WDI_Status wdiStatus;
17977 tSirFWStatsInfo *fwStatsinfo;
17978
17979 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17980 "------> %s" , __func__);
17981
17982 fwStatsinfo =
17983 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
17984 if (NULL == fwStatsinfo)
17985 {
17986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17987 "%s: VOS MEM Alloc Failure", __func__);
17988 VOS_ASSERT(0);
17989 vos_mem_free(pData);
17990 return;
17991 }
17992
17993 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
17994 fwStatsinfo->data = pData->data;
17995
17996 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
17997 WDA_FWStatsGetRspCallback,
17998 pData->stats);
17999 if (WDI_STATUS_PENDING == wdiStatus)
18000 {
18001 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18002 "Pending received for %s:%d ", __func__, __LINE__);
18003 }
18004 else if (WDI_STATUS_SUCCESS != wdiStatus)
18005 {
18006 if (fwStatsinfo->callback)
18007 {
18008 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18009 }
18010 vos_mem_free(fwStatsinfo);
18011 }
18012 vos_mem_free(pData);
18013}
18014
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018015/*==========================================================================
18016 FUNCTION WDA_EncryptMsgRspCallback
18017
18018 DESCRIPTION
18019 API to send Encrypt message response to HDD
18020
18021 PARAMETERS
18022 pEventData: Response from FW
18023 pUserData: Data sent to firmware as part of request
18024===========================================================================*/
18025void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18026 void* pUserData)
18027{
18028 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18029 tWDA_CbContext *pWDA = NULL;
18030 tpAniSirGlobal pMac;
18031 vos_msg_t vosMsg;
18032 tpSirEncryptedDataRspParams pEncRspParams;
18033 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18034
18035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18036 FL("%s:"), __func__);
18037 if (NULL == pWdaParams)
18038 {
18039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18040 FL("%s: pWdaParams received NULL"), __func__);
18041 VOS_ASSERT(0);
18042 return;
18043 }
18044
18045 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18046
18047 if (NULL == pWDA)
18048 {
18049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18050 FL("%s: pWDA received NULL"), __func__);
18051 VOS_ASSERT(0);
18052 goto error;
18053 }
18054
18055 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18056 if (NULL == pMac)
18057 {
18058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18059 FL("%s:pMac is NULL"), __func__);
18060 VOS_ASSERT(0);
18061 goto error;
18062 }
18063
18064 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18065
18066 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18067 if (NULL == pEncRspParams)
18068 {
18069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18070 FL("%s: VOS MEM Alloc Failure"), __func__);
18071 VOS_ASSERT(0);
18072 goto error;
18073 }
18074
18075 /* Message Header */
18076 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18077 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18078 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18079 pEncryptedDataRsp->encryptedPayload.length;
18080 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18081 pEncryptedDataRsp->encryptedPayload.data,
18082 pEncryptedDataRsp->encryptedPayload.length);
18083
18084 /* VOS message wrapper */
18085 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18086 vosMsg.bodyptr = (void *)pEncRspParams;
18087 vosMsg.bodyval = 0;
18088
18089 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18090 {
18091 /* free the mem */
18092 vos_mem_free((v_VOID_t *) pEncRspParams);
18093 }
18094
18095error:
18096
18097 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18098 {
18099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18100 }
18101 if (pWdaParams->wdaMsgParam != NULL)
18102 {
18103 vos_mem_free(pWdaParams->wdaMsgParam);
18104 }
18105 vos_mem_free(pWdaParams) ;
18106
18107 return;
18108}
18109/*==========================================================================
18110 FUNCTION WDA_ProcessEncryptMsgReq
18111
18112 DESCRIPTION
18113 API to send Encrypt message Request to WDI
18114
18115 PARAMETERS
18116 pWDA: Pointer to WDA context
18117 wdaRequest: Pointer to Encrypt_msg req parameters
18118===========================================================================*/
18119VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18120 u8 *wdaRequest)
18121{
18122 WDI_Status status = WDI_STATUS_SUCCESS;
18123 tWDA_ReqParams *pWdaParams;
18124
18125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18126 FL("%s: "), __func__);
18127 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18128 if (NULL == pWdaParams)
18129 {
18130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18131 FL("%s: VOS MEM Alloc Failure"), __func__);
18132 VOS_ASSERT(0);
18133 return VOS_STATUS_E_NOMEM;
18134 }
18135 pWdaParams->pWdaContext = pWDA;
18136 pWdaParams->wdaMsgParam = wdaRequest;
18137 pWdaParams->wdaWdiApiMsgParam = NULL;
18138
18139 status = WDI_EncryptMsgReq((void *)wdaRequest,
18140 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18141 (void *)pWdaParams);
18142 if (IS_WDI_STATUS_FAILURE(status))
18143 {
18144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18145 FL("Failure to request. Free all the memory " ));
18146 vos_mem_free(pWdaParams->wdaMsgParam);
18147 vos_mem_free(pWdaParams);
18148 }
18149 return CONVERT_WDI2VOS_STATUS(status);
18150}