blob: 60e099da9a06e9c7a5bc45577d9d198bbcd6a879 [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
Jeff Johnson295189b2012-06-20 16:38:30 -0700259/*
260 * FUNCTION: WDA_open
261 * Allocate the WDA context
262 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530263VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700264 tMacOpenParameters *pMacParams )
265{
266 tWDA_CbContext *wdaContext;
267 VOS_STATUS status;
268 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 /* Allocate WDA context */
270 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
271 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
272 if(!VOS_IS_STATUS_SUCCESS(status))
273 {
274 return VOS_STATUS_E_NOMEM;
275 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 /*__asm int 3;*/
277 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
278
279 /* Initialize data structures */
280 wdaContext->pVosContext = pVosContext;
281 wdaContext->wdaState = WDA_INIT_STATE;
282 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
283
284 /* Initialize WDA-WDI synchronization event */
285 status = vos_event_init(&wdaContext->wdaWdiEvent);
286 if(!VOS_IS_STATUS_SUCCESS(status))
287 {
288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800289 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800290 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700292 /* Init Frame transfer event */
293 status = vos_event_init(&wdaContext->txFrameEvent);
294 if(!VOS_IS_STATUS_SUCCESS(status))
295 {
296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800297 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800298 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700299 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700300 status = vos_event_init(&wdaContext->suspendDataTxEvent);
301 if(!VOS_IS_STATUS_SUCCESS(status))
302 {
303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800304 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800305 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700306 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700307 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
308 if(!VOS_IS_STATUS_SUCCESS(status))
309 {
310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800311 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800312 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700313 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700314 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700315 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530316 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 &wdiDevCapability, pMacParams->driverType))
318 {
319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
320 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800321 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700322 }
323 else
324 {
325 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
326 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
327 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700328 /* update max STA in WDA used for BA */
329 wdaContext->wdaMaxSta = pMacParams->maxStation;
330 /* store the frameTransRequired flag in wdaContext, to send this to HAL
331 * in WDA_Start
332 */
333 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
334 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700335 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800336
337error:
338 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
339 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700340}
341
Jeff Johnson295189b2012-06-20 16:38:30 -0700342/*
343 * FUNCTION: WDA_preStart
344 * Trigger DAL-AL to start CFG download
345 */
346VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
347{
348 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
349 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700350 /*
351 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
352 */
353 wdaMsg.type = WNI_CFG_DNLD_REQ ;
354 wdaMsg.bodyptr = NULL;
355 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700356 /* post the message.. */
357 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
358 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
359 {
360 vosStatus = VOS_STATUS_E_BADMSG;
361 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700362 return( vosStatus );
363}
Jeff Johnson295189b2012-06-20 16:38:30 -0700364/*
365 * FUNCTION: WDA_wdiStartCallback
366 * Once WDI_Start is finished, WDI start callback will be called by WDI
367 * to indicate completion of WDI_Start.
368 */
369void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
370 void *pVosContext)
371{
372 tWDA_CbContext *wdaContext;
373 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700374 if (NULL == pVosContext)
375 {
376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700377 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700378 return;
379 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700380 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
381 if (NULL == wdaContext)
382 {
383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700384 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 return;
386 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
388 {
389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700390 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 }
392 else
393 {
394 wdaContext->wdaState = WDA_START_STATE;
395 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 /* extract and save version information from the Start Response */
397 wdaContext->wcnssWlanCompiledVersion.major =
398 wdiRspParams->wlanCompiledVersion.major;
399 wdaContext->wcnssWlanCompiledVersion.minor =
400 wdiRspParams->wlanCompiledVersion.minor;
401 wdaContext->wcnssWlanCompiledVersion.version =
402 wdiRspParams->wlanCompiledVersion.version;
403 wdaContext->wcnssWlanCompiledVersion.revision =
404 wdiRspParams->wlanCompiledVersion.revision;
405 wdaContext->wcnssWlanReportedVersion.major =
406 wdiRspParams->wlanReportedVersion.major;
407 wdaContext->wcnssWlanReportedVersion.minor =
408 wdiRspParams->wlanReportedVersion.minor;
409 wdaContext->wcnssWlanReportedVersion.version =
410 wdiRspParams->wlanReportedVersion.version;
411 wdaContext->wcnssWlanReportedVersion.revision =
412 wdiRspParams->wlanReportedVersion.revision;
413 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
414 wdiRspParams->wcnssSoftwareVersion,
415 sizeof(wdaContext->wcnssSoftwareVersionString));
416 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
417 wdiRspParams->wcnssHardwareVersion,
418 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 /* Notify WDA_start that WDI_Start has completed */
420 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700421 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 {
423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700424 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 return;
427}
428
Jeff Johnson295189b2012-06-20 16:38:30 -0700429/*
430 * FUNCTION: WDA_start
431 * Prepare TLV configuration and call WDI_Start.
432 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700433VOS_STATUS WDA_start(v_PVOID_t pVosContext)
434{
435 tWDA_CbContext *wdaContext;
436 VOS_STATUS status;
437 WDI_Status wdiStatus;
438 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 if (NULL == pVosContext)
440 {
441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700442 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 return VOS_STATUS_E_FAILURE;
444 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
446 if (NULL == wdaContext)
447 {
448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700449 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700450 return VOS_STATUS_E_FAILURE;
451 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 /* Non-FTM mode, WDA status for START must be INIT
453 * FTM mode, WDA Status for START can be INIT or STOP */
454 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
455 (WDA_STOP_STATE != wdaContext->wdaState) )
456 {
457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
458 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700459 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700460 return VOS_STATUS_E_FAILURE;
461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 /* initialize the wdiStartParam. Note that we can create this on
463 the stack since we won't exit until WDI_Start() completes or
464 times out */
465 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700466 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 /* prepare the config TLV for the WDI */
468 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
469 if ( !VOS_IS_STATUS_SUCCESS(status) )
470 {
471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700472 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700473 return VOS_STATUS_E_FAILURE;
474 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 /* note from here onwards if an error occurs we must
476 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
478 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
479 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 /* initialize the WDA-WDI synchronization event */
481 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 /* call WDI start */
483 wdiStatus = WDI_Start(&wdiStartParam,
484 (WDI_StartRspCb)WDA_wdiStartCallback,
485 (v_VOID_t *)pVosContext);
486 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
487 {
488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700489 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700490 vos_mem_free(wdiStartParam.pConfigBuffer);
491 return VOS_STATUS_E_FAILURE;
492 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 /* wait for WDI start to invoke our callback */
494 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
495 WDA_WDI_START_TIMEOUT );
496 if ( !VOS_IS_STATUS_SUCCESS(status) )
497 {
498 if ( VOS_STATUS_E_TIMEOUT == status )
499 {
500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700501 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700502 }
503 else
504 {
505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
506 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700507 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 }
509 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530510 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700513 /* we no longer need the config TLV */
514 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 /* if we are not in the START state then WDI_Start() failed */
516 if (WDA_START_STATE != wdaContext->wdaState)
517 {
518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700519 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 return VOS_STATUS_E_FAILURE;
521 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700522 /* FTM mode does not need to monitor BA activity */
523 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
524 {
525 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800526 if(VOS_STATUS_SUCCESS == status)
527 {
528 wdaContext->wdaTimersCreated = VOS_TRUE;
529 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 }
Leo Chang9d76f622013-08-23 16:34:52 -0700531 else
532 {
533 vos_event_init(&wdaContext->ftmStopDoneEvent);
534 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 return status;
536}
537
Jeff Johnson295189b2012-06-20 16:38:30 -0700538/*
539 * FUNCTION: WDA_prepareConfigTLV
540 * Function to prepare CFG for DAL(WDA)
541 */
542VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
543 WDI_StartReqParamsType *wdiStartParams )
544{
545 /* get pMac to acess CFG data base */
546 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
547 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
548 tHalCfg *tlvStruct = NULL ;
549 tANI_U8 *tlvStructStart = NULL ;
550 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
551 v_PVOID_t *configParam;
552 tANI_U32 configParamSize;
553 tANI_U32 *configDataValue;
554 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700555 tANI_U8 i;
556
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 if ((NULL == pMac)||(NULL == wdaContext))
558 {
559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700560 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700561 VOS_ASSERT(0);
562 return VOS_STATUS_E_FAILURE;
563 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
565 WNI_CFG_STA_ID_LEN +
566 WNI_CFG_EDCA_WME_ACBK_LEN +
567 WNI_CFG_EDCA_WME_ACBE_LEN +
568 WNI_CFG_EDCA_WME_ACVI_LEN +
569 WNI_CFG_EDCA_WME_ACVO_LEN +
570 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700571 /* malloc memory for all configs in one shot */
572 configParam = vos_mem_malloc(configParamSize);
573
574 if(NULL == configParam )
575 {
576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700577 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 VOS_ASSERT(0) ;
579 return VOS_STATUS_E_NOMEM;
580 }
581 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 tlvStruct = (tHalCfg *)configParam;
584 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 /* TODO: Remove Later */
586 /* QWLAN_HAL_CFG_STA_ID */
587 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
588 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
589 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
590 eSIR_SUCCESS)
591 {
592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
593 "Failed to get value for WNI_CFG_STA_ID");
594 goto handle_failure;
595 }
596 tlvStruct->length = strLength ;
597 /* calculate the pad bytes to have the CFG in aligned format */
598 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
599 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
601 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
603 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
604 tlvStruct->length = sizeof(tANI_U32);
605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
606 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
607 != eSIR_SUCCESS)
608 {
609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
610 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
611 goto handle_failure;
612 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
614 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700615 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
616 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
617 tlvStruct->length = sizeof(tANI_U32);
618 configDataValue = (tANI_U32 *)(tlvStruct + 1);
619 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
620 eSIR_SUCCESS)
621 {
622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
623 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
624 goto handle_failure;
625 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700626 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
627 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700628 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
629 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
630 tlvStruct->length = sizeof(tANI_U32);
631 configDataValue = (tANI_U32 *)(tlvStruct + 1);
632 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
633 != eSIR_SUCCESS)
634 {
635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
636 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
637 goto handle_failure;
638 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700639 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
640 + sizeof(tHalCfg) + tlvStruct->length)) ;
641
642 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
643 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
644 tlvStruct->length = sizeof(tANI_U32);
645 configDataValue = (tANI_U32 *)(tlvStruct + 1);
646 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
647 configDataValue ) != eSIR_SUCCESS)
648 {
649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
650 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
651 goto handle_failure;
652 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
654 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 /* QWLAN_HAL_CFG_CAL_PERIOD */
656 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
657 tlvStruct->length = sizeof(tANI_U32);
658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
659 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
660 != eSIR_SUCCESS)
661 {
662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
663 "Failed to get value for WNI_CFG_CAL_PERIOD");
664 goto handle_failure;
665 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
667 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 /* QWLAN_HAL_CFG_CAL_CONTROL */
669 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
670 tlvStruct->length = sizeof(tANI_U32);
671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
672 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
673 != eSIR_SUCCESS)
674 {
675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
676 "Failed to get value for WNI_CFG_CAL_CONTROL");
677 goto handle_failure;
678 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
680 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 /* QWLAN_HAL_CFG_PROXIMITY */
682 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
683 tlvStruct->length = sizeof(tANI_U32);
684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
685 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
686 != eSIR_SUCCESS)
687 {
688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
689 "Failed to get value for WNI_CFG_PROXIMITY");
690 goto handle_failure;
691 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700692 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
693 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
695 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
696 tlvStruct->length = sizeof(tANI_U32);
697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
698 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
699 != eSIR_SUCCESS)
700 {
701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
702 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
703 goto handle_failure;
704 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
706 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
708 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
709 tlvStruct->length = sizeof(tANI_U32);
710 configDataValue = (tANI_U32 *)(tlvStruct + 1);
711 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
712 eSIR_SUCCESS)
713 {
714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
715 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
716 goto handle_failure;
717 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
719 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
721 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
722 tlvStruct->length = sizeof(tANI_U32);
723 configDataValue = (tANI_U32 *)(tlvStruct + 1);
724 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
725 configDataValue ) != eSIR_SUCCESS)
726 {
727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
728 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
729 goto handle_failure;
730 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
732 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
734 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
735 tlvStruct->length = sizeof(tANI_U32);
736 configDataValue = (tANI_U32 *)(tlvStruct + 1);
737 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
738 eSIR_SUCCESS)
739 {
740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
741 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
742 goto handle_failure;
743 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
745 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
747 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
748 tlvStruct->length = sizeof(tANI_U32);
749 configDataValue = (tANI_U32 *)(tlvStruct + 1);
750 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
751 eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
755 goto handle_failure;
756 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
758 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
760 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
761 tlvStruct->length = sizeof(tANI_U32);
762 configDataValue = (tANI_U32 *)(tlvStruct + 1);
763 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
764 eSIR_SUCCESS)
765 {
766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
767 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
768 goto handle_failure;
769 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
771 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700772 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
773 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
774 tlvStruct->length = sizeof(tANI_U32);
775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
776 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
777 configDataValue ) != eSIR_SUCCESS)
778 {
779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
780 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
781 goto handle_failure;
782 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700783 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
784 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700785 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
786 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
787 tlvStruct->length = sizeof(tANI_U32);
788 configDataValue = (tANI_U32 *)(tlvStruct + 1);
789 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
790 configDataValue ) != eSIR_SUCCESS)
791 {
792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
793 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
794 goto handle_failure;
795 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700796 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
797 + sizeof(tHalCfg) + tlvStruct->length));
798
799 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
800 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
801 tlvStruct->length = sizeof(tANI_U32);
802 configDataValue = (tANI_U32 *)(tlvStruct + 1);
803 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
804 configDataValue ) != eSIR_SUCCESS)
805 {
806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
807 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
808 goto handle_failure;
809 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700810 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
811 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700812 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
813 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
814 tlvStruct->length = sizeof(tANI_U32);
815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
816 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
817 configDataValue ) != eSIR_SUCCESS)
818 {
819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
820 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
821 goto handle_failure;
822 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700823 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
824 + sizeof(tHalCfg) + tlvStruct->length));
825
826 /* QWLAN_HAL_CFG_FIXED_RATE */
827 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
828 tlvStruct->length = sizeof(tANI_U32);
829 configDataValue = (tANI_U32 *)(tlvStruct + 1);
830 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
831 != eSIR_SUCCESS)
832 {
833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
834 "Failed to get value for WNI_CFG_FIXED_RATE");
835 goto handle_failure;
836 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700837 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
838 + sizeof(tHalCfg) + tlvStruct->length));
839
840 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
841 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
842 tlvStruct->length = sizeof(tANI_U32);
843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
844 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
845 != eSIR_SUCCESS)
846 {
847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
848 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
849 goto handle_failure;
850 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700851 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
852 + sizeof(tHalCfg) + tlvStruct->length));
853
854 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
855 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
856 tlvStruct->length = sizeof(tANI_U32);
857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
858 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
859 configDataValue ) != eSIR_SUCCESS)
860 {
861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
862 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
863 goto handle_failure;
864 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
866 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
868 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
869 tlvStruct->length = sizeof(tANI_U32);
870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
871 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
872 configDataValue ) != eSIR_SUCCESS)
873 {
874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
875 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
876 goto handle_failure;
877 }
878 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
879 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
881 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
882 tlvStruct->length = sizeof(tANI_U32);
883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
884 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
885 configDataValue ) != eSIR_SUCCESS)
886 {
887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
888 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
889 goto handle_failure;
890 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700891 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
892 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700893 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
894 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
895 tlvStruct->length = sizeof(tANI_U32);
896 configDataValue = (tANI_U32 *)(tlvStruct + 1);
897 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
898 configDataValue ) != eSIR_SUCCESS)
899 {
900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
901 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
902 goto handle_failure;
903 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700904 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
905 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
907 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
908 tlvStruct->length = sizeof(tANI_U32);
909 configDataValue = (tANI_U32 *)(tlvStruct + 1);
910 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
911 configDataValue ) != eSIR_SUCCESS)
912 {
913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
914 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
915 goto handle_failure;
916 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700917 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
918 + sizeof(tHalCfg) + tlvStruct->length);
919
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
921 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
922 tlvStruct->length = sizeof(tANI_U32);
923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
924 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
925 configDataValue ) != eSIR_SUCCESS)
926 {
927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
928 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
929 goto handle_failure;
930 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700931 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
932 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
934 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
935 tlvStruct->length = sizeof(tANI_U32);
936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
937 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
938 configDataValue ) != eSIR_SUCCESS)
939 {
940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
941 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
942 goto handle_failure;
943 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700944 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
945 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
947 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
948 tlvStruct->length = sizeof(tANI_U32);
949 configDataValue = (tANI_U32 *)(tlvStruct + 1);
950 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
951 eSIR_SUCCESS)
952 {
953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
954 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
955 goto handle_failure;
956 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700957 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
958 + sizeof(tHalCfg) + tlvStruct->length);
959
960 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
961 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
962 tlvStruct->length = sizeof(tANI_U32);
963 configDataValue = (tANI_U32 *)(tlvStruct + 1);
964 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
965 configDataValue ) != eSIR_SUCCESS)
966 {
967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
968 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
969 goto handle_failure;
970 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700971 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
972 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
974 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
975 tlvStruct->length = sizeof(tANI_U32);
976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
977 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
978 configDataValue ) != eSIR_SUCCESS)
979 {
980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
981 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
982 goto handle_failure;
983 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700984 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
985 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
987 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
988 tlvStruct->length = sizeof(tANI_U32);
989 configDataValue = (tANI_U32 *)(tlvStruct + 1);
990 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
991 configDataValue ) != eSIR_SUCCESS)
992 {
993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
994 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
995 goto handle_failure;
996 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700997 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
998 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700999 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1000 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1001 tlvStruct->length = sizeof(tANI_U32);
1002 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1003 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1004 configDataValue ) != eSIR_SUCCESS)
1005 {
1006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1007 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1008 goto handle_failure;
1009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1011 + sizeof(tHalCfg) + tlvStruct->length);
1012
1013 /* QWLAN_HAL_CFG_STATS_PERIOD */
1014 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1015 tlvStruct->length = sizeof(tANI_U32);
1016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1017 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1018 eSIR_SUCCESS)
1019 {
1020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1021 "Failed to get value for WNI_CFG_STATS_PERIOD");
1022 goto handle_failure;
1023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001024 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1025 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1027 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1028 tlvStruct->length = sizeof(tANI_U32);
1029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1030 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1031 eSIR_SUCCESS)
1032 {
1033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1034 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1035 goto handle_failure;
1036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001037 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1038 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001039 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1040 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1041 tlvStruct->length = sizeof(tANI_U32);
1042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1043 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1044 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1046 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001047 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1048 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1049 tlvStruct->length = sizeof(tANI_U32);
1050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1051 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1052 != eSIR_SUCCESS)
1053 {
1054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1055 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1056 goto handle_failure;
1057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001058 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1059 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001060 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1061 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1062 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1064 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1065 &strLength) != eSIR_SUCCESS)
1066 {
1067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1068 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1069 goto handle_failure;
1070 }
1071 tlvStruct->length = strLength;
1072 /* calculate the pad bytes to have the CFG in aligned format */
1073 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1074 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001075 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1076 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001077 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1078 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1079 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1081 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1082 &strLength) != eSIR_SUCCESS)
1083 {
1084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1085 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1086 goto handle_failure;
1087 }
1088 tlvStruct->length = strLength;
1089 /* calculate the pad bytes to have the CFG in aligned format */
1090 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1091 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001092 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1093 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1095 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1096 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1097 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1098 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1099 &strLength) != eSIR_SUCCESS)
1100 {
1101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1102 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1103 goto handle_failure;
1104 }
1105 tlvStruct->length = strLength;
1106 /* calculate the pad bytes to have the CFG in aligned format */
1107 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1108 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1110 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1112 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1113 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1115 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1116 &strLength) != eSIR_SUCCESS)
1117 {
1118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1119 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1120 goto handle_failure;
1121 }
1122 tlvStruct->length = strLength;
1123 /* calculate the pad bytes to have the CFG in aligned format */
1124 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1125 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001126 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1127 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1129 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1130 tlvStruct->length = sizeof(tANI_U32);
1131 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1132 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1133 != eSIR_SUCCESS)
1134 {
1135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1136 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1137 goto handle_failure;
1138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001139 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1140 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1142 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1143 tlvStruct->length = sizeof(tANI_U32);
1144 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1145 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1146 != eSIR_SUCCESS)
1147 {
1148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1149 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1150 goto handle_failure;
1151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001152 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1153 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001154 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1155 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1156 tlvStruct->length = sizeof(tANI_U32);
1157 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1158 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1159 != eSIR_SUCCESS)
1160 {
1161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1162 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1163 goto handle_failure;
1164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001165 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1166 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001167 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1168 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1169 tlvStruct->length = sizeof(tANI_U32);
1170 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1171 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1172 != eSIR_SUCCESS)
1173 {
1174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1175 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1176 goto handle_failure;
1177 }
1178 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1179 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001180 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1181 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1182 tlvStruct->length = sizeof(tANI_U32);
1183 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1184 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1185 != eSIR_SUCCESS)
1186 {
1187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1188 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1189 goto handle_failure;
1190 }
1191 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1192 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001193 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1194 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1195 tlvStruct->length = sizeof(tANI_U32);
1196 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1197 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1198 != eSIR_SUCCESS)
1199 {
1200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1201 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1202 goto handle_failure;
1203 }
1204 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1205 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1207 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1208 tlvStruct->length = sizeof(tANI_U32);
1209 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1210 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1211 != eSIR_SUCCESS)
1212 {
1213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1214 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1215 goto handle_failure;
1216 }
1217 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1218 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1220 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1221 tlvStruct->length = sizeof(tANI_U32);
1222 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1223 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1224 != eSIR_SUCCESS)
1225 {
1226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1227 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1228 goto handle_failure;
1229 }
1230 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1231 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1233 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1234 tlvStruct->length = sizeof(tANI_U32);
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1237 != eSIR_SUCCESS)
1238 {
1239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1240 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1241 goto handle_failure;
1242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001243 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1244 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1246 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1247 tlvStruct->length = sizeof(tANI_U32);
1248 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1249 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1250 != eSIR_SUCCESS)
1251 {
1252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1253 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1254 goto handle_failure;
1255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001256 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1257 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001258 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1259 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1260 tlvStruct->length = sizeof(tANI_U32);
1261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1262 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1263 != eSIR_SUCCESS)
1264 {
1265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1266 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1267 goto handle_failure;
1268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001269 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1270 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001271 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1272 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1273 * into FW, so the parameters are added here.
1274 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001275 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1276 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1277 tlvStruct->length = sizeof(tANI_U32);
1278 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1279 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1280 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1281 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001282 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1283 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1284 tlvStruct->length = sizeof(tANI_U32);
1285 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1286 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1287 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1288 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1290 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1291 tlvStruct->length = sizeof(tANI_U32);
1292 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1293 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1294 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1295 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001296 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1337 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
1343
1344 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1345 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1349 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1350 + sizeof(tHalCfg) + tlvStruct->length) ;
1351
1352 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1353 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1354 tlvStruct->length = sizeof(tANI_U32);
1355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1356 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1357 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1358 + sizeof(tHalCfg) + tlvStruct->length) ;
1359
1360 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1361 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1362 tlvStruct->length = sizeof(tANI_U32);
1363 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1364 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1366 + sizeof(tHalCfg) + tlvStruct->length) ;
1367
1368 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1369 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
1375
1376 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1377 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1378 tlvStruct->length = sizeof(tANI_U32);
1379 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1380 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1382 + sizeof(tHalCfg) + tlvStruct->length) ;
1383
1384 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1385 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1386 tlvStruct->length = sizeof(tANI_U32);
1387 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1388 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391
1392 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1393 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1394 tlvStruct->length = sizeof(tANI_U32);
1395 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1396 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1397 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1398 + sizeof(tHalCfg) + tlvStruct->length) ;
1399
Wilson Tsaof8b37942013-09-06 10:49:00 -07001400 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1401 {
1402 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1403 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1404 tlvStruct->length = sizeof(tANI_U32);
1405 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1406 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1407 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1408 + sizeof(tHalCfg) + tlvStruct->length) ;
1409
1410 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1411 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1412 tlvStruct->length = sizeof(tANI_U32);
1413 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1414 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1415 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1416 + sizeof(tHalCfg) + tlvStruct->length) ;
1417
1418 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1419 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1420 tlvStruct->length = sizeof(tANI_U32);
1421 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1422 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1423 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1424 + sizeof(tHalCfg) + tlvStruct->length) ;
1425
1426 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1427 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1428 tlvStruct->length = sizeof(tANI_U32);
1429 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1430 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1431 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1432 + sizeof(tHalCfg) + tlvStruct->length) ;
1433 }
1434
1435 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1436 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1437 tlvStruct->length = sizeof(tANI_U32);
1438 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1439 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1440 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1441 + sizeof(tHalCfg) + tlvStruct->length) ;
1442
1443 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1444 {
1445 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1446 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1447 tlvStruct->length = sizeof(tANI_U32);
1448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1449 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1450 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1451 + sizeof(tHalCfg) + tlvStruct->length) ;
1452 }
1453
1454 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1455 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1456 tlvStruct->length = sizeof(tANI_U32);
1457 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1458 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1459 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1460 + sizeof(tHalCfg) + tlvStruct->length) ;
1461
Jeff Johnson32d95a32012-09-10 13:15:23 -07001462 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001463 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1464 tlvStruct->length = sizeof(tANI_U32);
1465 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1466 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1467 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1468 wcnssCompiledApiVersion.minor,
1469 wcnssCompiledApiVersion.version,
1470 wcnssCompiledApiVersion.revision);
1471 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1472 + sizeof(tHalCfg) + tlvStruct->length) ;
1473
Jeff Johnsond13512a2012-07-17 11:42:19 -07001474 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1475 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1476 tlvStruct->length = sizeof(tANI_U32);
1477 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1478 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1479 configDataValue ) != eSIR_SUCCESS)
1480 {
1481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1482 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1483 goto handle_failure;
1484 }
1485
1486 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1487 + sizeof(tHalCfg) + tlvStruct->length) ;
1488 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1489 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1490 tlvStruct->length = sizeof(tANI_U32);
1491 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1492 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1493 configDataValue ) != eSIR_SUCCESS)
1494 {
1495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1496 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1497 goto handle_failure;
1498 }
1499
1500 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1501 + sizeof(tHalCfg) + tlvStruct->length) ;
1502
1503 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1504 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1505 tlvStruct->length = sizeof(tANI_U32);
1506 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1507 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1508 != eSIR_SUCCESS)
1509 {
1510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1511 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1512 goto handle_failure;
1513 }
1514
1515 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1516 + sizeof(tHalCfg) + tlvStruct->length) ;
1517
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001518 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1519 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1520 tlvStruct->length = sizeof(tANI_U32);
1521 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1522 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1523 != eSIR_SUCCESS)
1524 {
1525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1526 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1527 goto handle_failure;
1528 }
1529
1530 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1531 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001532#ifdef WLAN_SOFTAP_VSTA_FEATURE
1533 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1534 tlvStruct->length = sizeof(tANI_U32);
1535 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1536 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1537 != eSIR_SUCCESS)
1538 {
1539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1540 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1541 goto handle_failure;
1542 }
1543
1544 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1545 + sizeof(tHalCfg) + tlvStruct->length) ;
1546#endif
1547
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001548 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1549 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1550 tlvStruct->length = sizeof(tANI_U32);
1551 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1552
1553 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1554 != eSIR_SUCCESS)
1555 {
1556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1557 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1558 goto handle_failure;
1559 }
1560
1561 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1562 + sizeof(tHalCfg) + tlvStruct->length) ;
1563
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301564/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1565 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1566 tlvStruct->length = sizeof(tANI_U32);
1567 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1568 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1569 configDataValue ) != eSIR_SUCCESS)
1570 {
1571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1572 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1573 goto handle_failure;
1574 }
1575
1576 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1577 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301578#ifdef FEATURE_WLAN_TDLS
1579 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1580 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1581 tlvStruct->length = sizeof(tANI_U32);
1582 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1583 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1584 configDataValue ) != eSIR_SUCCESS)
1585 {
1586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1587 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1588 goto handle_failure;
1589 }
1590 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1591 + sizeof(tHalCfg) + tlvStruct->length) ;
1592
1593 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1594 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1595 tlvStruct->length = sizeof(tANI_U32);
1596 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1597 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1598 configDataValue ) != eSIR_SUCCESS)
1599 {
1600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1601 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1602 goto handle_failure;
1603 }
1604 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1605 + sizeof(tHalCfg) + tlvStruct->length) ;
1606 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1607 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1608 tlvStruct->length = sizeof(tANI_U32);
1609 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1610 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1611 configDataValue ) != eSIR_SUCCESS)
1612 {
1613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1614 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1615 goto handle_failure;
1616 }
1617 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1618 + sizeof(tHalCfg) + tlvStruct->length) ;
1619 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1620 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1621 tlvStruct->length = sizeof(tANI_U32);
1622 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1623 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1624 configDataValue ) != eSIR_SUCCESS)
1625 {
1626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1627 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1628 goto handle_failure;
1629 }
1630 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1631 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301632 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1633 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1634 tlvStruct->length = sizeof(tANI_U32);
1635 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1636 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1637 configDataValue ) != eSIR_SUCCESS)
1638 {
1639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1640 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1641 goto handle_failure;
1642 }
1643 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1644 + sizeof(tHalCfg) + tlvStruct->length) ;
1645
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301646#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301647
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001648 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1649 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1650 tlvStruct->length = sizeof(tANI_U32);
1651 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1652 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1653 configDataValue ) != eSIR_SUCCESS)
1654 {
1655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1656 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1657 goto handle_failure;
1658 }
1659
1660 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1661 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001662
1663 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1664 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1665 tlvStruct->length = sizeof(tANI_U32);
1666 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1667 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1668 != eSIR_SUCCESS)
1669 {
1670 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1671 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1672 goto handle_failure;
1673 }
1674 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1675 + sizeof(tHalCfg) + tlvStruct->length));
1676
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301677 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1678 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1679 tlvStruct->length = sizeof(tANI_U32);
1680 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1681 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1682 configDataValue ) != eSIR_SUCCESS)
1683 {
1684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1685 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1686 goto handle_failure;
1687 }
1688
1689 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1690 + sizeof(tHalCfg) + tlvStruct->length) ;
1691
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301692 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1693 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1694 tlvStruct->length = sizeof(tANI_U32);
1695 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1696 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1697 configDataValue ) != eSIR_SUCCESS)
1698 {
1699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1700 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1701 goto handle_failure;
1702 }
1703 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1704 + sizeof(tHalCfg) + tlvStruct->length) ;
1705
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301706 /* QWLAN_HAL_CFG_ATH_DISABLE */
1707 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1708 tlvStruct->length = sizeof(tANI_U32);
1709 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1710 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1711 configDataValue ) != eSIR_SUCCESS)
1712 {
1713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1714 "Failed to get value for WNI_CFG_ATH_DISABLE");
1715 goto handle_failure;
1716 }
1717 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1718 + sizeof(tHalCfg) + tlvStruct->length) ;
1719
c_hpothu6d7dc922013-12-02 12:36:41 +05301720 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1721 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1722 tlvStruct->length = sizeof(tANI_U32);
1723 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1724 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1725 configDataValue ) != eSIR_SUCCESS)
1726 {
1727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1728 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1729 goto handle_failure;
1730 }
1731 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1732 + sizeof(tHalCfg) + tlvStruct->length) ;
1733
1734 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1735 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1736 tlvStruct->length = sizeof(tANI_U32);
1737 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1738 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1739 configDataValue ) != eSIR_SUCCESS)
1740 {
1741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1742 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1743 goto handle_failure;
1744 }
1745 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1746 + sizeof(tHalCfg) + tlvStruct->length) ;
1747
1748 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1749 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1750 tlvStruct->length = sizeof(tANI_U32);
1751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1752 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1753 configDataValue ) != eSIR_SUCCESS)
1754 {
1755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1756 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1757 goto handle_failure;
1758 }
1759 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1760 + sizeof(tHalCfg) + tlvStruct->length) ;
1761
1762 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1763 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1764 tlvStruct->length = sizeof(tANI_U32);
1765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1766 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1767 configDataValue ) != eSIR_SUCCESS)
1768 {
1769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1770 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1771 goto handle_failure;
1772 }
1773 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1774 + sizeof(tHalCfg) + tlvStruct->length) ;
1775
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301776 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1777 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1778 tlvStruct->length = sizeof(tANI_U32);
1779 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1780 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1781 configDataValue ) != eSIR_SUCCESS)
1782 {
1783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1784 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1785 goto handle_failure;
1786 }
1787 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1788 + sizeof(tHalCfg) + tlvStruct->length) ;
1789
1790 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1791 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1792 tlvStruct->length = sizeof(tANI_U32);
1793 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1794 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1795 configDataValue ) != eSIR_SUCCESS)
1796 {
1797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1798 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1799 goto handle_failure;
1800 }
1801 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1802 + sizeof(tHalCfg) + tlvStruct->length) ;
1803
1804 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1805 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1806 tlvStruct->length = sizeof(tANI_U32);
1807 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1808 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1809 configDataValue ) != eSIR_SUCCESS)
1810 {
1811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1812 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1813 goto handle_failure;
1814 }
1815 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1816 + sizeof(tHalCfg) + tlvStruct->length) ;
1817
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001818 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1819 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1820 tlvStruct->length = sizeof(tANI_U32);
1821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1822 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1823 configDataValue ) != eSIR_SUCCESS)
1824 {
1825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1826 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1827 goto handle_failure;
1828 }
1829 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1830 + sizeof(tHalCfg) + tlvStruct->length) ;
1831
c_hpothu5bd1ae42014-03-07 20:28:22 +05301832 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1833 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1834 tlvStruct->length = sizeof(tANI_U32);
1835 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1836
1837 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1838 configDataValue ) != eSIR_SUCCESS)
1839 {
1840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1841 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1842 goto handle_failure;
1843 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301844 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1845 + sizeof(tHalCfg) + tlvStruct->length) ;
1846
1847 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1848 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1849 tlvStruct->length = sizeof(tANI_U32);
1850 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1851
1852 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1853 configDataValue ) != eSIR_SUCCESS)
1854 {
1855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1856 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1857 goto handle_failure;
1858 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301859 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1860 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301861
c_hpothu2d0f1c42014-04-01 18:38:51 +05301862 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1863 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1864 tlvStruct->length = sizeof(tANI_U32);
1865 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1866
1867 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1868 configDataValue ) != eSIR_SUCCESS)
1869 {
1870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1871 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1872 goto handle_failure;
1873 }
1874 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1875 + sizeof(tHalCfg) + tlvStruct->length) ;
1876
1877 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1878 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1879 tlvStruct->length = sizeof(tANI_U32);
1880 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1881
1882 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1883 configDataValue ) != eSIR_SUCCESS)
1884 {
1885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1886 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1887 goto handle_failure;
1888 }
1889 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1890 + sizeof(tHalCfg) + tlvStruct->length) ;
1891
1892 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1893 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1894 tlvStruct->length = sizeof(tANI_U32);
1895 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1896
1897 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1898 configDataValue ) != eSIR_SUCCESS)
1899 {
1900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1901 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1902 goto handle_failure;
1903 }
1904 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1905 + sizeof(tHalCfg) + tlvStruct->length) ;
1906
1907 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1908 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1909 tlvStruct->length = sizeof(tANI_U32);
1910 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1911
1912 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1913 configDataValue ) != eSIR_SUCCESS)
1914 {
1915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1916 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1917 goto handle_failure;
1918 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301919 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1920 + sizeof(tHalCfg) + tlvStruct->length) ;
1921
Mihir Shetec34258c2014-07-30 17:50:27 +05301922 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1923 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1924 tlvStruct->length = sizeof(tANI_U32);
1925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1926
1927 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1928 configDataValue ) != eSIR_SUCCESS)
1929 {
1930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1931 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1932 goto handle_failure;
1933 }
1934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1935 + sizeof(tHalCfg) + tlvStruct->length) ;
1936
1937 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1938 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1939 tlvStruct->length = sizeof(tANI_U32);
1940 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1941
1942 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1943 configDataValue ) != eSIR_SUCCESS)
1944 {
1945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1946 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1947 goto handle_failure;
1948 }
1949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1950 + sizeof(tHalCfg) + tlvStruct->length) ;
1951
1952 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1953 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1954 tlvStruct->length = sizeof(tANI_U32);
1955 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1956
1957 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1958 configDataValue ) != eSIR_SUCCESS)
1959 {
1960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1961 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1962 goto handle_failure;
1963 }
1964 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1965 + sizeof(tHalCfg) + tlvStruct->length) ;
1966
1967 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1968 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1969 tlvStruct->length = sizeof(tANI_U32);
1970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1971
1972 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1973 configDataValue ) != eSIR_SUCCESS)
1974 {
1975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1976 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1977 goto handle_failure;
1978 }
1979 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1980 + sizeof(tHalCfg) + tlvStruct->length) ;
1981
1982 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1983 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1984 tlvStruct->length = sizeof(tANI_U32);
1985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1986
1987 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1988 configDataValue ) != eSIR_SUCCESS)
1989 {
1990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1991 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1992 goto handle_failure;
1993 }
1994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1995 + sizeof(tHalCfg) + tlvStruct->length) ;
1996
1997 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
1998 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
1999 tlvStruct->length = sizeof(tANI_U32);
2000 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2001
2002 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2003 configDataValue ) != eSIR_SUCCESS)
2004 {
2005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2006 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2007 goto handle_failure;
2008 }
2009 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2010 + sizeof(tHalCfg) + tlvStruct->length) ;
2011
2012 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2013 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2014 tlvStruct->length = sizeof(tANI_U32);
2015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2016
2017 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2018 configDataValue ) != eSIR_SUCCESS)
2019 {
2020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2021 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2022 goto handle_failure;
2023 }
2024 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2025 + sizeof(tHalCfg) + tlvStruct->length) ;
2026
2027 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2028 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2029 tlvStruct->length = sizeof(tANI_U32);
2030 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2031
2032 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2033 configDataValue ) != eSIR_SUCCESS)
2034 {
2035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2036 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2037 goto handle_failure;
2038 }
2039 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2040 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302041
2042 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2043 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2044 tlvStruct->length = sizeof(tANI_U32);
2045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2046
2047 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2048 configDataValue ) != eSIR_SUCCESS)
2049 {
2050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2051 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2052 goto handle_failure;
2053 }
2054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2055 + sizeof(tHalCfg) + tlvStruct->length) ;
2056
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302057 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2058 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2059 tlvStruct->length = sizeof(tANI_U32);
2060 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2061
2062 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2063 configDataValue ) != eSIR_SUCCESS)
2064 {
2065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2066 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2067 goto handle_failure;
2068 }
2069 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2070 + sizeof(tHalCfg) + tlvStruct->length) ;
2071
2072
Jeff Johnson295189b2012-06-20 16:38:30 -07002073 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002074#ifdef WLAN_DEBUG
2075 {
2076 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2078 "****** Dumping CFG TLV ***** ");
2079 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2080 {
2081 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2082 "%02x %02x %02x %02x %02x %02x %02x %02x",
2083 tlvStructStart[i],
2084 tlvStructStart[i+1],
2085 tlvStructStart[i+2],
2086 tlvStructStart[i+3],
2087 tlvStructStart[i+4],
2088 tlvStructStart[i+5],
2089 tlvStructStart[i+6],
2090 tlvStructStart[i+7]);
2091 }
2092 /* Dump the bytes in the last line*/
2093 for (; i < wdiStartParams->usConfigBufferLen; i++)
2094 {
2095 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2096 "%02x ",tlvStructStart[i]);
2097 }
2098 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2099 "**************************** ");
2100 }
2101#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002102 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002103handle_failure:
2104 vos_mem_free(configParam);
2105 return VOS_STATUS_E_FAILURE;
2106}
Jeff Johnson295189b2012-06-20 16:38:30 -07002107/*
2108 * FUNCTION: WDA_wdiCompleteCB
2109 * call the voss call back function
2110 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002111void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002112{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2114 tWDA_CbContext *wdaContext;
2115
2116 if(NULL == pWdaParams)
2117 {
2118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002119 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002120 VOS_ASSERT(0) ;
2121 return ;
2122 }
2123
2124 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2125
Jeff Johnson295189b2012-06-20 16:38:30 -07002126 if (NULL == wdaContext)
2127 {
2128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002129 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002130 return ;
2131 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002132
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002134 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002135 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002138 vos_mem_free(pWdaParams);
2139
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 if(WDI_STATUS_SUCCESS != status)
2141 {
2142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2143 "WDI stop callback returned failure" );
2144 VOS_ASSERT(0) ;
2145 }
2146 else
2147 {
2148 wdaContext->wdaState = WDA_STOP_STATE;
2149 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002150
Leo Chang9d76f622013-08-23 16:34:52 -07002151 /* FTM Driver stop procedure should be synced.
2152 * Stop and Close will happen on same context */
2153 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2154 {
2155 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2156 {
2157 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2158 "%s: FTM Stop Event Set Fail", __func__);
2159 VOS_ASSERT(0);
2160 }
2161 }
2162
Jeff Johnson295189b2012-06-20 16:38:30 -07002163 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002164 vos_WDAComplete_cback(wdaContext->pVosContext);
2165
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 return ;
2167}
Jeff Johnson295189b2012-06-20 16:38:30 -07002168/*
2169 * FUNCTION: WDA_stop
2170 * call WDI_stop
2171 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002172VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2173{
2174 WDI_Status wdiStatus;
2175 VOS_STATUS status = VOS_STATUS_SUCCESS;
2176 WDI_StopReqParamsType *wdiStopReq;
2177 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002178 tWDA_ReqParams *pWdaParams ;
2179
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 if (NULL == pWDA)
2181 {
2182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002183 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002184 VOS_ASSERT(0);
2185 return VOS_STATUS_E_FAILURE;
2186 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002187 if (pWDA->wdiFailed == true)
2188 {
2189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002190 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002191 return VOS_STATUS_E_ALREADY;
2192 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002193
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 /* FTM mode stay START_STATE */
2195 if( (WDA_READY_STATE != pWDA->wdaState) &&
2196 (WDA_INIT_STATE != pWDA->wdaState) &&
2197 (WDA_START_STATE != pWDA->wdaState) )
2198 {
2199 VOS_ASSERT(0);
2200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002201 wdiStopReq = (WDI_StopReqParamsType *)
2202 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2203 if(NULL == wdiStopReq)
2204 {
2205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002207 VOS_ASSERT(0);
2208 return VOS_STATUS_E_NOMEM;
2209 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002210
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 wdiStopReq->wdiStopReason = reason;
2212 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002213
2214 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2215 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 {
2217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002218 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 VOS_ASSERT(0);
2220 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002221 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002223
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002224 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2225 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002226 {
2227 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002228 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002230
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002231 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2232 pWdaParams->wdaMsgParam = NULL;
2233 pWdaParams->pWdaContext = pWDA;
2234
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 /* call WDI stop */
2236 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002237 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2238
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2240 {
2241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2242 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2244 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 status = VOS_STATUS_E_FAILURE;
2246 }
Leo Chang9d76f622013-08-23 16:34:52 -07002247
2248 /* FTM Driver stop procedure should be synced.
2249 * Stop and Close will happen on same context */
2250 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2251 {
2252 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2253 WDI_RESPONSE_TIMEOUT);
2254 if (status != VOS_STATUS_SUCCESS)
2255 {
2256 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2257 "%s: FTM Stop Timepoout", __func__);
2258 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002259 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302260 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002262 return status;
2263}
Jeff Johnson295189b2012-06-20 16:38:30 -07002264/*
2265 * FUNCTION: WDA_close
2266 * call WDI_close and free the WDA context
2267 */
2268VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2269{
Jeff Johnson43971f52012-07-17 12:26:56 -07002270 VOS_STATUS status = VOS_STATUS_SUCCESS;
2271 WDI_Status wstatus;
2272 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002273 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002274 if (NULL == wdaContext)
2275 {
2276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002277 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 return VOS_STATUS_E_FAILURE;
2279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002280 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2281 (WDA_STOP_STATE != wdaContext->wdaState))
2282 {
2283 VOS_ASSERT(0);
2284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002286 wstatus = WDI_Close();
2287 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 {
2289 status = VOS_STATUS_E_FAILURE;
2290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002293 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2294 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 {
2296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002297 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 status = VOS_STATUS_E_FAILURE;
2299 }
2300
Jeff Johnson43971f52012-07-17 12:26:56 -07002301 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002302 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 {
2304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002305 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 status = VOS_STATUS_E_FAILURE;
2307 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002308 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002309 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 {
2311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002312 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 status = VOS_STATUS_E_FAILURE;
2314 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002315 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002316 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 {
2318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002319 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 status = VOS_STATUS_E_FAILURE;
2321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002323 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002324 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 {
2326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2327 "error in WDA close " );
2328 status = VOS_STATUS_E_FAILURE;
2329 }
2330 return status;
2331}
Jeff Johnson295189b2012-06-20 16:38:30 -07002332/*
2333 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2334 * returns 1 if the compiled version is greater than or equal to the input version
2335 */
2336
2337uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2338{
2339 VOS_STATUS status = VOS_STATUS_SUCCESS;
2340 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2341 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002342 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2344 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2345 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2346 (compiledVersion.revision >= revision)))
2347 return 1;
2348 else
2349 return 0;
2350}
Jeff Johnson295189b2012-06-20 16:38:30 -07002351/*
2352 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2353 * returns 1 if the compiled version is greater than or equal to the input version
2354 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002355uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2356{
2357 VOS_STATUS status = VOS_STATUS_SUCCESS;
2358 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2359 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002360 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2362 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2363 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2364 (reportedVersion.revision >= revision)))
2365 return 1;
2366 else
2367 return 0;
2368}
Jeff Johnson295189b2012-06-20 16:38:30 -07002369/*
2370 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2371 * Returns the version of the WCNSS WLAN API with which the HOST
2372 * device driver was compiled
2373 */
2374VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2375 tSirVersionType *pVersion)
2376{
2377 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002378 if ((NULL == pvosGCtx) || (NULL == pVersion))
2379 {
2380 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002381 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002382 VOS_ASSERT(0);
2383 return VOS_STATUS_E_FAILURE;
2384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2386 if (NULL == pWDA )
2387 {
2388 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002389 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 VOS_ASSERT(0);
2391 return VOS_STATUS_E_FAILURE;
2392 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 *pVersion = pWDA->wcnssWlanCompiledVersion;
2394 return VOS_STATUS_SUCCESS;
2395}
Jeff Johnson295189b2012-06-20 16:38:30 -07002396/*
2397 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2398 * Returns the version of the WCNSS WLAN API with which the WCNSS
2399 * device driver was compiled
2400 */
2401VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2402 tSirVersionType *pVersion)
2403{
2404 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 if ((NULL == pvosGCtx) || (NULL == pVersion))
2406 {
2407 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002408 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 VOS_ASSERT(0);
2410 return VOS_STATUS_E_FAILURE;
2411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2413 if (NULL == pWDA )
2414 {
2415 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002416 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 VOS_ASSERT(0);
2418 return VOS_STATUS_E_FAILURE;
2419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 *pVersion = pWDA->wcnssWlanReportedVersion;
2421 return VOS_STATUS_SUCCESS;
2422}
Jeff Johnson295189b2012-06-20 16:38:30 -07002423/*
2424 * FUNCTION: WDA_GetWcnssSoftwareVersion
2425 * Returns the WCNSS Software version string
2426 */
2427VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2428 tANI_U8 *pVersion,
2429 tANI_U32 versionBufferSize)
2430{
2431 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002432 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002433 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 if ((NULL == pvosGCtx) || (NULL == pVersion))
2435 {
2436 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002437 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 VOS_ASSERT(0);
2439 return VOS_STATUS_E_FAILURE;
2440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2442 if (NULL == pWDA )
2443 {
2444 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002445 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 VOS_ASSERT(0);
2447 return VOS_STATUS_E_FAILURE;
2448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2450 return VOS_STATUS_SUCCESS;
2451}
Jeff Johnson295189b2012-06-20 16:38:30 -07002452/*
2453 * FUNCTION: WDA_GetWcnssHardwareVersion
2454 * Returns the WCNSS Hardware version string
2455 */
2456VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2457 tANI_U8 *pVersion,
2458 tANI_U32 versionBufferSize)
2459{
2460 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002462 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 if ((NULL == pvosGCtx) || (NULL == pVersion))
2464 {
2465 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002466 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 VOS_ASSERT(0);
2468 return VOS_STATUS_E_FAILURE;
2469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2471 if (NULL == pWDA )
2472 {
2473 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 VOS_ASSERT(0);
2476 return VOS_STATUS_E_FAILURE;
2477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2479 return VOS_STATUS_SUCCESS;
2480}
Jeff Johnson295189b2012-06-20 16:38:30 -07002481/*
2482 * FUNCTION: WDA_WniCfgDnld
2483 * Trigger CFG Download
2484 */
2485VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2486{
2487 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302488 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002489
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 if (NULL == pMac )
2491 {
2492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002493 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 VOS_ASSERT(0);
2495 return VOS_STATUS_E_FAILURE;
2496 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302497 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002498 return vosStatus;
2499}
Jeff Johnson295189b2012-06-20 16:38:30 -07002500/* -----------------------------------------------------------------
2501 * WDI interface
2502 * -----------------------------------------------------------------
2503 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002504/*
2505 * FUNCTION: WDA_suspendDataTxCallback
2506 * call back function called from TL after suspend Transmission
2507 */
2508VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2509 v_U8_t* ucSTAId,
2510 VOS_STATUS vosStatus)
2511{
2512 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002514 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 if (NULL == pWDA )
2516 {
2517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002518 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 VOS_ASSERT(0);
2520 return VOS_STATUS_E_FAILURE;
2521 }
2522 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2523 {
2524 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2525 }
2526 else
2527 {
2528 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2529 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 /* Trigger the event to bring the WDA TL suspend function to come
2531 * out of wait*/
2532 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2533 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2534 {
2535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002536 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 /* If TL suspended had timedout before this callback was called, resume back
2539 * TL.*/
2540 if (pWDA->txSuspendTimedOut)
2541 {
2542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002543 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 WDA_ResumeDataTx(pWDA);
2545 pWDA->txSuspendTimedOut = FALSE;
2546 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 return VOS_STATUS_SUCCESS;
2548}
Jeff Johnson295189b2012-06-20 16:38:30 -07002549/*
2550 * FUNCTION: WDA_suspendDataTx
2551 * Update TL to suspend the data Transmission
2552 */
2553VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2554{
2555 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2556 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002557
2558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002559 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 if (pWDA->txSuspendTimedOut)
2562 {
2563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002564 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 return status;
2566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 /* Reset the event to be not signalled */
2568 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2569 if(!VOS_IS_STATUS_SUCCESS(status))
2570 {
2571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002572 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 return VOS_STATUS_E_FAILURE;
2574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002576 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 WDA_SuspendDataTxCallback);
2578 if(status != VOS_STATUS_SUCCESS)
2579 {
2580 return status;
2581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 /* Wait for the event to be set by the TL, to get the response of
2583 * suspending the TX queues, this event should be set by the Callback
2584 * function called by TL*/
2585 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2586 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2587 if(!VOS_IS_STATUS_SUCCESS(status))
2588 {
2589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2590 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002591 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 /* Set this flag to true when TL suspend times out, so that when TL
2593 * suspend eventually happens and calls the callback, TL can be resumed
2594 * right away by looking at this flag when true.*/
2595 pWDA->txSuspendTimedOut = TRUE;
2596 }
2597 else
2598 {
2599 pWDA->txSuspendTimedOut = FALSE;
2600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2602 {
2603 status = VOS_STATUS_SUCCESS;
2604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 return status;
2606}
Jeff Johnson295189b2012-06-20 16:38:30 -07002607/*
2608 * FUNCTION: WDA_resumeDataTx
2609 * Update TL to resume the data Transmission
2610 */
2611VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2612{
2613 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002614
2615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002616 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002617
2618 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 return status;
2620}
Jeff Johnson295189b2012-06-20 16:38:30 -07002621/*
2622 * FUNCTION: WDA_InitScanReqCallback
2623 * Trigger Init SCAN callback
2624 */
2625void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2626{
2627 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2628 tWDA_CbContext *pWDA;
2629 tInitScanParams *pWDA_ScanParam ;
2630 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002632 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 if(NULL == pWdaParams)
2634 {
2635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002636 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002637 VOS_ASSERT(0) ;
2638 return ;
2639 }
2640 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2641 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 if(NULL == pWDA_ScanParam)
2643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002645 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002646 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2648 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002649 return ;
2650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 if(WDI_STATUS_SUCCESS != wdiStatus)
2652 {
2653 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 if(VOS_STATUS_SUCCESS != status)
2655 {
2656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002657 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 }
2659 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 /* free WDI command buffer */
2661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002663
Jeff Johnson295189b2012-06-20 16:38:30 -07002664
2665 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002666 /* without converting the Status to Failure or Success Just
2667 pass the same status to lim */
2668 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 /* send SCAN RSP message back to PE */
2670 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 return ;
2672}
2673
2674/*
2675 * FUNCTION: WDA_ProcessInitScanReq
2676 * Trigger Init SCAN in DAL
2677 */
2678VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2679 tInitScanParams *initScanParams)
2680{
2681 WDI_Status status = WDI_STATUS_SUCCESS ;
2682 WDI_InitScanReqParamsType *wdiInitScanParam =
2683 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2684 sizeof(WDI_InitScanReqParamsType)) ;
2685 tWDA_ReqParams *pWdaParams;
2686 tANI_U8 i = 0;
2687
2688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002689 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 if(NULL == wdiInitScanParam)
2691 {
2692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002693 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002694 VOS_ASSERT(0);
2695 return VOS_STATUS_E_NOMEM;
2696 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2698 if(NULL == pWdaParams)
2699 {
2700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002701 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 VOS_ASSERT(0);
2703 vos_mem_free(wdiInitScanParam);
2704 return VOS_STATUS_E_NOMEM;
2705 }
2706
2707 /* Copy init Scan params to WDI structure */
2708 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2709 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2710 sizeof(tSirMacAddr)) ;
2711 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2712 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2713 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2715 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2717 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2719 {
2720 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2721 initScanParams->scanEntry.bssIdx[i] ;
2722 }
2723
2724 /* if Frame length, copy macMgmtHdr or WDI structure */
2725 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2726 {
2727 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2728 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2729 }
2730 wdiInitScanParam->wdiReqStatusCB = NULL ;
2731
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 /* Store Init Req pointer, as this will be used for response */
2733 pWdaParams->pWdaContext = pWDA;
2734 pWdaParams->wdaMsgParam = initScanParams;
2735 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 /* first try to suspend TX */
2737 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 if(WDI_STATUS_SUCCESS != status)
2739 {
2740 goto handleWdiFailure;
2741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 /* call DAL API to pass init scan request to DAL */
2743 status = WDI_InitScanReq(wdiInitScanParam,
2744 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 if(IS_WDI_STATUS_FAILURE(status))
2746 {
2747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2748 "error in WDA Init Scan, Resume Tx " );
2749 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 VOS_ASSERT(0) ;
2751
2752 goto handleWdiFailure;
2753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002754 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002755handleWdiFailure:
2756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2757 "Failure in WDI Api, free all the memory " );
2758 /* free WDI command buffer */
2759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2760 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 /* send Failure to PE */
2762 initScanParams->status = eSIR_FAILURE ;
2763 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 return CONVERT_WDI2VOS_STATUS(status) ;
2765}
2766
Jeff Johnson295189b2012-06-20 16:38:30 -07002767/*
2768 * FUNCTION: WDA_StartScanReqCallback
2769 * send Start SCAN RSP back to PE
2770 */
2771void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2772 void* pUserData)
2773{
2774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2775 tWDA_CbContext *pWDA;
2776 tStartScanParams *pWDA_ScanParam;
2777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002778 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 if(NULL == pWdaParams)
2780 {
2781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002782 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 VOS_ASSERT(0) ;
2784 return ;
2785 }
2786 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2787 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 if(NULL == pWDA_ScanParam)
2789 {
2790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002791 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002793 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 return ;
2795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2797 {
2798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002799 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002801 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 return ;
2803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2805 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002806
Jeff Johnson295189b2012-06-20 16:38:30 -07002807
2808 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002809 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 /* send SCAN RSP message back to PE */
2811 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 return ;
2813}
2814
Jeff Johnson295189b2012-06-20 16:38:30 -07002815/*
2816 * FUNCTION: WDA_ProcessStartScanReq
2817 * Trigger start SCAN in WDI
2818 */
2819VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2820 tStartScanParams *startScanParams)
2821{
2822 WDI_Status status = WDI_STATUS_SUCCESS;
2823 WDI_StartScanReqParamsType *wdiStartScanParams =
2824 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2825 sizeof(WDI_StartScanReqParamsType)) ;
2826 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002828 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 if(NULL == wdiStartScanParams)
2830 {
2831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002832 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 VOS_ASSERT(0);
2834 return VOS_STATUS_E_NOMEM;
2835 }
2836 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2837 if(NULL == pWdaParams)
2838 {
2839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002840 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 VOS_ASSERT(0);
2842 vos_mem_free(wdiStartScanParams);
2843 return VOS_STATUS_E_NOMEM;
2844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 /* Copy init Scan params to WDI structure */
2846 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2847 wdiStartScanParams->wdiReqStatusCB = NULL ;
2848
Jeff Johnson295189b2012-06-20 16:38:30 -07002849 /* Store Init Req pointer, as this will be used for response */
2850 /* store Params pass it to WDI */
2851 pWdaParams->pWdaContext = pWDA;
2852 pWdaParams->wdaMsgParam = startScanParams;
2853 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 /* call DAL API to pass init scan request to DAL */
2855 status = WDI_StartScanReq(wdiStartScanParams,
2856 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 /* failure returned by WDI API */
2858 if(IS_WDI_STATUS_FAILURE(status))
2859 {
2860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2861 "Failure in Start Scan WDI API, free all the memory "
2862 "It should be due to previous abort scan." );
2863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2864 vos_mem_free(pWdaParams) ;
2865 startScanParams->status = eSIR_FAILURE ;
2866 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 return CONVERT_WDI2VOS_STATUS(status) ;
2869}
Jeff Johnson295189b2012-06-20 16:38:30 -07002870/*
2871 * FUNCTION: WDA_EndScanReqCallback
2872 * END SCAN callback
2873 */
2874void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2875{
2876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2877 tWDA_CbContext *pWDA;
2878 tEndScanParams *endScanParam;
2879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002880 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002881 if(NULL == pWdaParams)
2882 {
2883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002884 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 VOS_ASSERT(0) ;
2886 return ;
2887 }
2888 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2889 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002890 if(NULL == endScanParam)
2891 {
2892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002893 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2896 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 return ;
2898 }
2899
2900 /* Free WDI command buffer */
2901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2902 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002904 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 /* send response back to PE */
2906 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2907 return ;
2908}
2909
Jeff Johnson295189b2012-06-20 16:38:30 -07002910/*
2911 * FUNCTION: WDA_ProcessEndScanReq
2912 * Trigger END SCAN in WDI
2913 */
2914VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2915 tEndScanParams *endScanParams)
2916{
2917 WDI_Status status = WDI_STATUS_SUCCESS;
2918 WDI_EndScanReqParamsType *wdiEndScanParams =
2919 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2920 sizeof(WDI_EndScanReqParamsType)) ;
2921 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002923 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 if(NULL == wdiEndScanParams)
2925 {
2926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 VOS_ASSERT(0);
2929 return VOS_STATUS_E_NOMEM;
2930 }
2931 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2932 if(NULL == pWdaParams)
2933 {
2934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 VOS_ASSERT(0);
2937 vos_mem_free(wdiEndScanParams);
2938 return VOS_STATUS_E_NOMEM;
2939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002940 /* Copy init Scan params to WDI structure */
2941 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2942 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 /* Store Init Req pointer, as this will be used for response */
2944 /* store Params pass it to WDI */
2945 pWdaParams->pWdaContext = pWDA;
2946 pWdaParams->wdaMsgParam = endScanParams;
2947 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 /* call DAL API to pass init scan request to DAL */
2949 status = WDI_EndScanReq(wdiEndScanParams,
2950 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 if(IS_WDI_STATUS_FAILURE(status))
2952 {
2953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2954 "Failure in End Scan WDI API, free all the memory "
2955 "It should be due to previous abort scan." );
2956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2957 vos_mem_free(pWdaParams) ;
2958 endScanParams->status = eSIR_FAILURE ;
2959 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 return CONVERT_WDI2VOS_STATUS(status) ;
2962}
Jeff Johnson295189b2012-06-20 16:38:30 -07002963/*
2964 * FUNCTION: WDA_FinishScanReqCallback
2965 * Trigger Finish SCAN callback
2966 */
2967void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2968{
2969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2970 tWDA_CbContext *pWDA;
2971 tFinishScanParams *finishScanParam;
2972 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002974 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 if(NULL == pWdaParams)
2976 {
2977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002978 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002979 VOS_ASSERT(0) ;
2980 return ;
2981 }
2982
2983 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2984 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 if(NULL == finishScanParam)
2986 {
2987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002988 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2991 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 return ;
2993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2995 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 /*
2997 * Now Resume TX, if we reached here means, TX is already suspended, we
2998 * have to resume it unconditionaly
2999 */
3000 status = WDA_ResumeDataTx(pWDA) ;
3001
3002 if(VOS_STATUS_SUCCESS != status)
3003 {
3004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003005 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003007 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3009 return ;
3010}
Jeff Johnson295189b2012-06-20 16:38:30 -07003011/*
3012 * FUNCTION: WDA_ProcessFinshScanReq
3013 * Trigger Finish SCAN in WDI
3014 */
3015VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3016 tFinishScanParams *finishScanParams)
3017{
3018 WDI_Status status = WDI_STATUS_SUCCESS;
3019 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3020 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3021 sizeof(WDI_FinishScanReqParamsType)) ;
3022 tWDA_ReqParams *pWdaParams ;
3023 tANI_U8 i = 0;
3024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003025 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 if(NULL == wdiFinishScanParams)
3027 {
3028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003029 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 VOS_ASSERT(0);
3031 return VOS_STATUS_E_NOMEM;
3032 }
3033 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3034 if(NULL == pWdaParams)
3035 {
3036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003037 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 VOS_ASSERT(0);
3039 vos_mem_free(wdiFinishScanParams);
3040 return VOS_STATUS_E_NOMEM;
3041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 /* Copy init Scan params to WDI structure */
3043 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3044 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3045 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3047 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3048 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3049 finishScanParams->frameLength ;
3050 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3051 finishScanParams->currentOperChannel ;
3052 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3053 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3054 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3056 {
3057 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3058 finishScanParams->scanEntry.bssIdx[i] ;
3059 }
3060
3061
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 /* if Frame length, copy macMgmtHdr ro WDI structure */
3063 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3064 {
3065 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3066 &finishScanParams->macMgmtHdr,
3067 sizeof(WDI_MacMgmtHdr)) ;
3068 }
3069 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 /* Store Init Req pointer, as this will be used for response */
3071 /* store Params pass it to WDI */
3072 pWdaParams->pWdaContext = pWDA;
3073 pWdaParams->wdaMsgParam = finishScanParams;
3074 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 /* call DAL API to pass init scan request to DAL */
3076 status = WDI_FinishScanReq(wdiFinishScanParams,
3077 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003078
Jeff Johnson295189b2012-06-20 16:38:30 -07003079
3080 /*
3081 * WDI API returns failure..
3082 */
3083 if(IS_WDI_STATUS_FAILURE( status))
3084 {
3085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3086 "Failure in Finish Scan WDI API, free all the memory " );
3087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3088 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 finishScanParams->status = eSIR_FAILURE ;
3090 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 return CONVERT_WDI2VOS_STATUS(status) ;
3093}
Jeff Johnson295189b2012-06-20 16:38:30 -07003094/*---------------------------------------------------------------------
3095 * ASSOC API's
3096 *---------------------------------------------------------------------
3097 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003098/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303099 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 * Trigger Init SCAN callback
3101 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303102void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003103{
3104 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3105 tWDA_CbContext *pWDA;
3106 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003108 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 if(NULL == pWdaParams)
3110 {
3111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003112 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 VOS_ASSERT(0) ;
3114 return ;
3115 }
3116 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3117 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3119 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 /* reset macBSSID */
3121 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 /* reset macSTASelf */
3123 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003124 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 return ;
3127}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303128
3129/*
3130 * FUNCTION: WDA_JoinReqCallback
3131 * Free memory and send SWITCH CHANNEL RSP back to PE.
3132 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3133 */
3134void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3135{
3136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3137 tWDA_CbContext *pWDA;
3138 tSwitchChannelParams *joinReqParam;
3139
3140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3141 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3142
3143 if(NULL == pWdaParams)
3144 {
3145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3146 "%s: pWdaParams received NULL", __func__);
3147 VOS_ASSERT(0);
3148 return;
3149 }
3150
3151 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3152 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3153 joinReqParam->status = wdiStatus;
3154
3155 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3156 {
3157 /* reset macBSSID */
3158 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3159 /* reset macSTASelf */
3160 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3161
3162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3163 vos_mem_free(pWdaParams);
3164 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3165 }
3166
3167 return;
3168}
3169
Jeff Johnson295189b2012-06-20 16:38:30 -07003170/*
3171 * FUNCTION: WDA_ProcessJoinReq
3172 * Trigger Join REQ in WDI
3173 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003174VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3175 tSwitchChannelParams* joinReqParam)
3176{
3177 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 WDI_JoinReqParamsType *wdiJoinReqParam =
3179 (WDI_JoinReqParamsType *)vos_mem_malloc(
3180 sizeof(WDI_JoinReqParamsType)) ;
3181 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003183 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 if(NULL == wdiJoinReqParam)
3185 {
3186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003187 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003188 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003189 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 return VOS_STATUS_E_NOMEM;
3191 }
3192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3193 if(NULL == pWdaParams)
3194 {
3195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003196 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 VOS_ASSERT(0);
3198 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003199 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 return VOS_STATUS_E_NOMEM;
3201 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003202
3203 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3204 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3205 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3206 {
3207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3208 "%s: received join request when BSSID or self-STA is NULL "
3209 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003210 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003211 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3212 VOS_ASSERT(0);
3213 vos_mem_free(wdiJoinReqParam);
3214 vos_mem_free(pWdaParams);
3215 joinReqParam->status = eSIR_FAILURE ;
3216 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3217 return VOS_STATUS_E_INVAL;
3218 }
3219
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 /* copy the BSSID for pWDA */
3221 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3222 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3224 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003225 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3226 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003227#ifdef WLAN_FEATURE_VOWIFI
3228 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3229 joinReqParam->maxTxPower ;
3230#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3232 joinReqParam->localPowerConstraint ;
3233#endif
3234 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3235 joinReqParam->secondaryChannelOffset ;
3236 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3237
Sachin Ahuja935eda782014-07-30 14:57:41 +05303238 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3239 wdiJoinReqParam->pUserData = pWdaParams;
3240
Jeff Johnson295189b2012-06-20 16:38:30 -07003241 /* Store Init Req pointer, as this will be used for response */
3242 /* store Params pass it to WDI */
3243 pWdaParams->pWdaContext = pWDA;
3244 pWdaParams->wdaMsgParam = joinReqParam;
3245 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303247 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003248 if(IS_WDI_STATUS_FAILURE(status))
3249 {
3250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3251 "Failure in Join WDI API, free all the memory " );
3252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3253 vos_mem_free(pWdaParams) ;
3254 joinReqParam->status = eSIR_FAILURE ;
3255 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 return CONVERT_WDI2VOS_STATUS(status) ;
3258}
Jeff Johnson295189b2012-06-20 16:38:30 -07003259/*
3260 * FUNCTION: WDA_SwitchChannelReqCallback
3261 * send Switch channel RSP back to PE
3262 */
3263void WDA_SwitchChannelReqCallback(
3264 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3265{
3266 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3267 tWDA_CbContext *pWDA;
3268 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003270 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 if(NULL == pWdaParams)
3272 {
3273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003274 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 VOS_ASSERT(0) ;
3276 return ;
3277 }
3278 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3279 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3280
3281#ifdef WLAN_FEATURE_VOWIFI
3282 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3283#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3285 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003287 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 return ;
3290}
Jeff Johnson295189b2012-06-20 16:38:30 -07003291/*
3292 * FUNCTION: WDA_ProcessChannelSwitchReq
3293 * Request to WDI to switch channel REQ params.
3294 */
3295VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3296 tSwitchChannelParams *pSwitchChanParams)
3297{
3298 WDI_Status status = WDI_STATUS_SUCCESS ;
3299 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3300 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3301 sizeof(WDI_SwitchChReqParamsType)) ;
3302 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003304 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 if(NULL == wdiSwitchChanParam)
3306 {
3307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003308 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003309 VOS_ASSERT(0);
3310 return VOS_STATUS_E_NOMEM;
3311 }
3312 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3313 if(NULL == pWdaParams)
3314 {
3315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003316 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 VOS_ASSERT(0);
3318 vos_mem_free(wdiSwitchChanParam);
3319 return VOS_STATUS_E_NOMEM;
3320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3322#ifndef WLAN_FEATURE_VOWIFI
3323 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3324 pSwitchChanParams->localPowerConstraint;
3325#endif
3326 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3327 pSwitchChanParams->secondaryChannelOffset;
3328 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 /* Store req pointer, as this will be used for response */
3330 /* store Params pass it to WDI */
3331 pWdaParams->pWdaContext = pWDA;
3332 pWdaParams->wdaMsgParam = pSwitchChanParams;
3333 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003334#ifdef WLAN_FEATURE_VOWIFI
3335 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3336 = pSwitchChanParams->maxTxPower;
3337 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3338 pSwitchChanParams ->selfStaMacAddr,
3339 sizeof(tSirMacAddr));
3340#endif
3341 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3342 pSwitchChanParams->bssId,
3343 sizeof(tSirMacAddr));
3344
3345 status = WDI_SwitchChReq(wdiSwitchChanParam,
3346 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 if(IS_WDI_STATUS_FAILURE(status))
3348 {
3349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3350 "Failure in process channel switch Req WDI API, free all the memory " );
3351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3352 vos_mem_free(pWdaParams) ;
3353 pSwitchChanParams->status = eSIR_FAILURE ;
3354 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 return CONVERT_WDI2VOS_STATUS(status) ;
3357}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003358
3359/*
3360 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3361 * send Switch channel RSP back to PE
3362 */
3363void WDA_SwitchChannelReqCallback_V1(
3364 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3365 void* pUserData)
3366{
3367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3368 tWDA_CbContext *pWDA;
3369 tSwitchChannelParams *pSwitchChanParams;
3370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3371 "<------ %s " ,__func__);
3372
3373 if (NULL == pWdaParams)
3374 {
3375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3376 "%s: pWdaParams received NULL", __func__);
3377 VOS_ASSERT(0);
3378 return ;
3379 }
3380 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3381 pSwitchChanParams =
3382 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3383 pSwitchChanParams->channelSwitchSrc =
3384 wdiSwitchChanRsp->channelSwitchSrc;
3385#ifdef WLAN_FEATURE_VOWIFI
3386 pSwitchChanParams->txMgmtPower =
3387 wdiSwitchChanRsp->ucTxMgmtPower;
3388#endif
3389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3390 vos_mem_free(pWdaParams);
3391 pSwitchChanParams->status =
3392 wdiSwitchChanRsp->wdiStatus ;
3393 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3394 (void *)pSwitchChanParams , 0);
3395 return;
3396}
3397
3398/*
3399 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3400 * Request to WDI to switch channel REQ params.
3401 */
3402VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3403 tSwitchChannelParams *pSwitchChanParams)
3404{
3405 WDI_Status status = WDI_STATUS_SUCCESS ;
3406 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3407 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3408 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3409 tWDA_ReqParams *pWdaParams ;
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3411 "------> %s " ,__func__);
3412 if (NULL == wdiSwitchChanParam)
3413 {
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3415 "%s: VOS MEM Alloc Failure", __func__);
3416 VOS_ASSERT(0);
3417 return VOS_STATUS_E_NOMEM;
3418 }
3419 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3420 if (NULL == pWdaParams)
3421 {
3422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3423 "%s: VOS MEM Alloc Failure", __func__);
3424 VOS_ASSERT(0);
3425 vos_mem_free(wdiSwitchChanParam);
3426 return VOS_STATUS_E_NOMEM;
3427 }
3428 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3429 pSwitchChanParams->channelSwitchSrc;
3430
3431 wdiSwitchChanParam->wdiChInfo.ucChannel =
3432 pSwitchChanParams->channelNumber;
3433#ifndef WLAN_FEATURE_VOWIFI
3434 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3435 pSwitchChanParams->localPowerConstraint;
3436#endif
3437 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3438 pSwitchChanParams->secondaryChannelOffset;
3439 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3440 /* Store req pointer, as this will be used for response */
3441 /* store Params pass it to WDI */
3442 pWdaParams->pWdaContext = pWDA;
3443 pWdaParams->wdaMsgParam = pSwitchChanParams;
3444 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3445#ifdef WLAN_FEATURE_VOWIFI
3446 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3447 pSwitchChanParams->maxTxPower;
3448 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3449 pSwitchChanParams ->selfStaMacAddr,
3450 sizeof(tSirMacAddr));
3451#endif
3452 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3453 pSwitchChanParams->bssId,
3454 sizeof(tSirMacAddr));
3455
3456 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3457 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3458 pWdaParams);
3459 if (IS_WDI_STATUS_FAILURE(status))
3460 {
3461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3462 "Failure in process channel switch Req WDI "
3463 "API, free all the memory " );
3464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3465 vos_mem_free(pWdaParams) ;
3466 pSwitchChanParams->status = eSIR_FAILURE ;
3467 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3468 (void *)pSwitchChanParams, 0) ;
3469 }
3470 return CONVERT_WDI2VOS_STATUS(status) ;
3471}
3472
Jeff Johnson295189b2012-06-20 16:38:30 -07003473/*
3474 * FUNCTION: WDA_ConfigBssReqCallback
3475 * config BSS Req Callback, called by WDI
3476 */
3477void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3478 ,void* pUserData)
3479{
3480 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3481 tWDA_CbContext *pWDA;
3482 tAddBssParams *configBssReqParam;
3483 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003485 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 if(NULL == pWdaParams)
3487 {
3488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003489 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 VOS_ASSERT(0) ;
3491 return ;
3492 }
3493 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3494 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3495 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003497 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3499 {
3500 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3501 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003502 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3503 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3504 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3505
3506 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3507 {
3508 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3509 {
3510 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3511 staConfigBssParam->staType = STA_ENTRY_BSSID;
3512 }
3513 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3514 (staConfigBssParam->staType == STA_ENTRY_SELF))
3515 {
3516 /* This is the 1st add BSS Req for the BTAMP STA */
3517 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3518 staConfigBssParam->staType = STA_ENTRY_BSSID;
3519 }
3520 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3521 (staConfigBssParam->staType == STA_ENTRY_PEER))
3522 {
3523 /* This is the 2nd ADD BSS Request that is sent
3524 * on the BTAMP STA side. The Sta type is
3525 * set to STA_ENTRY_PEER here.*/
3526 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3527 }
3528 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3529 (staConfigBssParam->staType == STA_ENTRY_SELF))
3530 {
3531 /* statype is already set by PE.
3532 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3533 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3534 staConfigBssParam->staType = STA_ENTRY_BSSID;
3535 }
3536 else
3537 {
3538 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3539 staConfigBssParam->staType = STA_ENTRY_PEER;
3540 }
3541 }
3542 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3543 {
3544 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3545 staConfigBssParam->staType = STA_ENTRY_SELF;
3546 }
3547 else
3548 {
3549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3550 "Invalid operation mode specified");
3551 VOS_ASSERT(0);
3552 }
3553
3554 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003557 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3559 sizeof(tSirMacAddr));
3560 staConfigBssParam->txChannelWidthSet =
3561 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3563 staConfigBssParam->htCapable)
3564 {
3565 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3566 wdiConfigBssRsp->ucBSSIdx;
3567 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3568 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303569 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3570 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3573 wdiConfigBssRsp->ucBSSIdx,
3574 wdiConfigBssRsp->ucSTAIdx))
3575 {
3576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003577 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003578 VOS_ASSERT(0) ;
3579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003580 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3581 {
3582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003583 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 VOS_ASSERT(0) ;
3585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003586#ifdef WLAN_FEATURE_VOWIFI
3587 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3588#endif
3589 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303590 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3591 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3593 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 return ;
3596}
Jeff Johnson295189b2012-06-20 16:38:30 -07003597/*
3598 * FUNCTION: WDA_UpdateEdcaParamsForAC
3599 * Update WDI EDCA params with PE edca params
3600 */
3601void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3602 WDI_EdcaParamRecord *wdiEdcaParam,
3603 tSirMacEdcaParamRecord *macEdcaParam)
3604{
3605 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3606 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3607 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3608 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3609 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3610 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3611}
Jeff Johnson295189b2012-06-20 16:38:30 -07003612/*
3613 * FUNCTION: WDA_ProcessConfigBssReq
3614 * Configure BSS before starting Assoc with AP
3615 */
3616VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3617 tAddBssParams* configBssReqParam)
3618{
3619 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303620 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003623 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303624 if (NULL == configBssReqParam)
3625 {
3626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3627 "%s: configBssReqParam is NULL", __func__);
3628 return VOS_STATUS_E_INVAL;
3629 }
3630
3631 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3632 sizeof(WDI_ConfigBSSReqParamsType)) ;
3633
Jeff Johnson295189b2012-06-20 16:38:30 -07003634 if(NULL == wdiConfigBssReqParam)
3635 {
3636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003638 VOS_ASSERT(0);
3639 return VOS_STATUS_E_NOMEM;
3640 }
3641 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3642 if(NULL == pWdaParams)
3643 {
3644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003645 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003646 VOS_ASSERT(0);
3647 vos_mem_free(wdiConfigBssReqParam);
3648 return VOS_STATUS_E_NOMEM;
3649 }
Kiran4a17ebe2013-01-31 10:43:43 -08003650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3651 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003652 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3654 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 /* Store Init Req pointer, as this will be used for response */
3656 /* store Params pass it to WDI */
3657 pWdaParams->pWdaContext = pWDA;
3658 pWdaParams->wdaMsgParam = configBssReqParam;
3659 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003660 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3661 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 if(IS_WDI_STATUS_FAILURE(status))
3663 {
3664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3665 "Failure in Config BSS WDI API, free all the memory " );
3666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3667 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003668 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003669 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3670 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 return CONVERT_WDI2VOS_STATUS(status) ;
3672}
Jeff Johnson295189b2012-06-20 16:38:30 -07003673#ifdef ENABLE_HAL_COMBINED_MESSAGES
3674/*
3675 * FUNCTION: WDA_PostAssocReqCallback
3676 * Post ASSOC req callback, send RSP back to PE
3677 */
3678void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3679 void* pUserData)
3680{
3681 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3682 tPostAssocParams *postAssocReqParam =
3683 (tPostAssocParams *)pWDA->wdaMsgParam ;
3684 /*STA context within the BSS Params*/
3685 tAddStaParams *staPostAssocParam =
3686 &postAssocReqParam->addBssParams.staContext ;
3687 /*STA Params for self STA*/
3688 tAddStaParams *selfStaPostAssocParam =
3689 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003691 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003692 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003693 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3695 {
3696 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3697 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3698 sizeof(tSirMacAddr)) ;
3699 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3700 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3701 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003702 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3703 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303704 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3706 pWDA->wdaWdiApiMsgParam = NULL;
3707 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003709 return ;
3710}
Jeff Johnson295189b2012-06-20 16:38:30 -07003711/*
3712 * FUNCTION: WDA_ProcessPostAssocReq
3713 * Trigger POST ASSOC processing in WDI
3714 */
3715VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3716 tPostAssocParams *postAssocReqParam)
3717{
Jeff Johnson295189b2012-06-20 16:38:30 -07003718 WDI_Status status = WDI_STATUS_SUCCESS ;
3719
3720 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3721 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3722 sizeof(WDI_PostAssocReqParamsType)) ;
3723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003724 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003725
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 if(NULL == wdiPostAssocReqParam)
3727 {
3728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003730 VOS_ASSERT(0);
3731 return VOS_STATUS_E_NOMEM;
3732 }
3733
3734 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3735 {
3736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003737 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 VOS_ASSERT(0);
3739 return VOS_STATUS_E_FAILURE;
3740 }
3741
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 /* update BSS params into WDI structure */
3743 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3744 &postAssocReqParam->addBssParams) ;
3745 /* update STA params into WDI structure */
3746 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3747 &postAssocReqParam->addStaParams) ;
3748
3749 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3750 postAssocReqParam->addBssParams.highPerformance;
3751 WDA_UpdateEdcaParamsForAC(pWDA,
3752 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3753 &postAssocReqParam->addBssParams.acbe);
3754 WDA_UpdateEdcaParamsForAC(pWDA,
3755 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3756 &postAssocReqParam->addBssParams.acbk);
3757 WDA_UpdateEdcaParamsForAC(pWDA,
3758 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3759 &postAssocReqParam->addBssParams.acvi);
3760 WDA_UpdateEdcaParamsForAC(pWDA,
3761 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3762 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 /* Store Init Req pointer, as this will be used for response */
3764 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003765 /* store Params pass it to WDI */
3766 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003767 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3768 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003769 if(IS_WDI_STATUS_FAILURE(status))
3770 {
3771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3772 "Failure in Post Assoc WDI API, free all the memory " );
3773 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3774 pWDA->wdaWdiApiMsgParam = NULL;
3775 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003776 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 return CONVERT_WDI2VOS_STATUS(status) ;
3780}
3781#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003782/*
3783 * FUNCTION: WDA_AddStaReqCallback
3784 * ADD STA req callback, send RSP back to PE
3785 */
3786void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3787 void* pUserData)
3788{
3789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3790 tWDA_CbContext *pWDA;
3791 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003793 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003794 if(NULL == pWdaParams)
3795 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 VOS_ASSERT(0) ;
3798 return ;
3799 }
3800 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3801 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003803 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003804 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3805 {
3806 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3807 /*TODO: UMAC structure doesn't have these fields*/
3808 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3809 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3810 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3811 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3812 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3813 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003814#ifdef FEATURE_WLAN_TDLS
3815 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3816 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3817#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003818 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003819#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 {
3821 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3822 wdiConfigStaRsp->ucBssIdx;
3823 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3824 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303825 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3826 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003827 }
3828 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3829 {
3830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003831 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003832 VOS_ASSERT(0) ;
3833 return ;
3834 }
3835 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3837 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003838 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 return ;
3840}
Jeff Johnson295189b2012-06-20 16:38:30 -07003841/*
3842 * FUNCTION: WDA_ConfigStaReq
3843 * Trigger Config STA processing in WDI
3844 */
3845VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3846 tAddStaParams *addStaReqParam)
3847{
Jeff Johnson295189b2012-06-20 16:38:30 -07003848 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003849 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3850 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3851 sizeof(WDI_ConfigSTAReqParamsType)) ;
3852 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003854 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 if(NULL == wdiConfigStaReqParam)
3856 {
3857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003859 VOS_ASSERT(0);
3860 return VOS_STATUS_E_NOMEM;
3861 }
3862 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3863 if(NULL == pWdaParams)
3864 {
3865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003866 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 VOS_ASSERT(0);
3868 vos_mem_free(wdiConfigStaReqParam);
3869 return VOS_STATUS_E_NOMEM;
3870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 /* update STA params into WDI structure */
3873 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3874 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 /* Store Init Req pointer, as this will be used for response */
3876 /* store Params pass it to WDI */
3877 pWdaParams->pWdaContext = pWDA;
3878 pWdaParams->wdaMsgParam = addStaReqParam;
3879 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3881 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003882 if(IS_WDI_STATUS_FAILURE(status))
3883 {
3884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3885 "Failure in Config STA WDI API, free all the memory " );
3886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3887 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3890 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003891 return CONVERT_WDI2VOS_STATUS(status) ;
3892}
Jeff Johnson295189b2012-06-20 16:38:30 -07003893/*
3894 * FUNCTION: WDA_DelBSSReqCallback
3895 * Dens DEL BSS RSP back to PE
3896 */
3897void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3898 void* pUserData)
3899{
3900 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3901 tWDA_CbContext *pWDA;
3902 tDeleteBssParams *delBssReqParam;
3903 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003905 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 if(NULL == pWdaParams)
3907 {
3908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003909 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 VOS_ASSERT(0) ;
3911 return ;
3912 }
3913 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3914 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003915 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003916 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3917 {
3918 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3919 sizeof(tSirMacAddr)) ;
3920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003921 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3922 {
3923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003924 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003925 VOS_ASSERT(0) ;
3926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3928 {
3929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003930 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 VOS_ASSERT(0) ;
3932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003933 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3934 {
3935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003936 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 VOS_ASSERT(0) ;
3938 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303939
3940 WLANTL_StartForwarding(staIdx,0,0);
3941
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3943 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 /* reset the the system role*/
3945 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3946
3947 /* Reset the BA related information */
3948 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3949 {
3950 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3951 {
3952 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3953 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303954 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003955 /* Reset framesTxed counters here */
3956 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3957 {
3958 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3959 }
3960 }
3961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003962 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003963 return ;
3964}
3965
Jeff Johnson295189b2012-06-20 16:38:30 -07003966/*
3967 * FUNCTION: WDA_ProcessDelBssReq
3968 * Init DEL BSS req with WDI
3969 */
3970VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3971 tDeleteBssParams *delBssParam)
3972{
3973 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3975 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3976 sizeof(WDI_DelBSSReqParamsType)) ;
3977 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003979 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003980 if(NULL == wdiDelBssReqParam)
3981 {
3982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003984 VOS_ASSERT(0);
3985 return VOS_STATUS_E_NOMEM;
3986 }
3987 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3988 if(NULL == pWdaParams)
3989 {
3990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 VOS_ASSERT(0);
3993 vos_mem_free(wdiDelBssReqParam);
3994 return VOS_STATUS_E_NOMEM;
3995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3997 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3998
3999 /* Store Init Req pointer, as this will be used for response */
4000 /* store Params pass it to WDI */
4001 pWdaParams->pWdaContext = pWDA;
4002 pWdaParams->wdaMsgParam = delBssParam;
4003 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 status = WDI_DelBSSReq(wdiDelBssReqParam,
4005 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 if(IS_WDI_STATUS_FAILURE(status))
4007 {
4008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4009 "Failure in Del BSS WDI API, free all the memory " );
4010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4011 vos_mem_free(pWdaParams) ;
4012 delBssParam->status = eSIR_FAILURE ;
4013 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 return CONVERT_WDI2VOS_STATUS(status) ;
4016}
Jeff Johnson295189b2012-06-20 16:38:30 -07004017/*
4018 * FUNCTION: WDA_DelSTAReqCallback
4019 * Dens DEL STA RSP back to PE
4020 */
4021void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4022 void* pUserData)
4023{
4024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4025 tWDA_CbContext *pWDA;
4026 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004028 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 if(NULL == pWdaParams)
4030 {
4031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004032 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004033 VOS_ASSERT(0) ;
4034 return ;
4035 }
4036 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4037 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004038 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4040 {
4041 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4042 {
4043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004044 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 VOS_ASSERT(0) ;
4046 }
4047 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304048 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 }
4050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4051 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 /*Reset the BA information corresponding to this STAIdx */
4053 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4054 WDA_INVALID_STA_INDEX;
4055 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304056 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 return ;
4059}
Jeff Johnson295189b2012-06-20 16:38:30 -07004060/*
4061 * FUNCTION: WDA_ProcessDelStaReq
4062 * Init DEL STA req with WDI
4063 */
4064VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4065 tDeleteStaParams *delStaParam)
4066{
4067 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4069 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4070 sizeof(WDI_DelSTAReqParamsType)) ;
4071 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004073 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004074 if(NULL == wdiDelStaReqParam)
4075 {
4076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 VOS_ASSERT(0);
4079 return VOS_STATUS_E_NOMEM;
4080 }
4081 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4082 if(NULL == pWdaParams)
4083 {
4084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004085 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 VOS_ASSERT(0);
4087 vos_mem_free(wdiDelStaReqParam);
4088 return VOS_STATUS_E_NOMEM;
4089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4091 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 /* Store Init Req pointer, as this will be used for response */
4093 /* store Params pass it to WDI */
4094 pWdaParams->pWdaContext = pWDA;
4095 pWdaParams->wdaMsgParam = delStaParam;
4096 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004097 status = WDI_DelSTAReq(wdiDelStaReqParam,
4098 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004099 if(IS_WDI_STATUS_FAILURE(status))
4100 {
4101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4102 "Failure in Del STA WDI API, free all the memory status = %d",
4103 status );
4104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4105 vos_mem_free(pWdaParams) ;
4106 delStaParam->status = eSIR_FAILURE ;
4107 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 return CONVERT_WDI2VOS_STATUS(status) ;
4110}
Jeff Johnson295189b2012-06-20 16:38:30 -07004111void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4112{
4113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4114 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304115 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004117 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 if(NULL == pWdaParams)
4119 {
4120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004121 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004122 VOS_ASSERT(0) ;
4123 return ;
4124 }
4125 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4126 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4128 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4130 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4131 pwdiAddSTASelfRsp->macSelfSta,
4132 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304133 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4134 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4135 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4136 {
4137 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4138 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 return ;
4142}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304143
Jeff Johnson295189b2012-06-20 16:38:30 -07004144/*
4145 * FUNCTION: WDA_ProcessAddStaSelfReq
4146 *
4147 */
4148VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4149{
4150 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004151 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4153 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4154 sizeof(WDI_AddSTASelfReqParamsType)) ;
4155 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004157 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304158 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 if( NULL == wdiAddStaSelfReq )
4160 {
4161 VOS_ASSERT( 0 );
4162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004163 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304164 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4165 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 return( VOS_STATUS_E_NOMEM );
4167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 if( NULL == pWdaParams )
4170 {
4171 VOS_ASSERT( 0 );
4172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004173 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304174 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4175 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 vos_mem_free(wdiAddStaSelfReq) ;
4177 return( VOS_STATUS_E_NOMEM );
4178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004180 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004181 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 /* Store Init Req pointer, as this will be used for response */
4183 /* store Params pass it to WDI */
4184 pWdaParams->pWdaContext = pWDA;
4185 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4186 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004187 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004188
Jeff Johnson43971f52012-07-17 12:26:56 -07004189 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 {
4191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4192 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004193 wstatus );
4194 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4196 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304197 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4198 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004199 pAddStaSelfReq->status = eSIR_FAILURE ;
4200 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4201 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004202 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004203}
Jeff Johnson295189b2012-06-20 16:38:30 -07004204/*
4205 * FUNCTION: WDA_DelSTASelfRespCallback
4206 *
4207 */
4208void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4209 wdiDelStaSelfRspParams , void* pUserData)
4210{
4211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4212 tWDA_CbContext *pWDA;
4213 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004215 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 if (NULL == pWdaParams)
4217 {
4218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004219 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 VOS_ASSERT(0);
4221 return;
4222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4224 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004226 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004227
4228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4229 vos_mem_free(pWdaParams) ;
4230
4231 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 return ;
4233}
Jeff Johnson295189b2012-06-20 16:38:30 -07004234/*
4235 * FUNCTION: WDA_DelSTASelfReqCallback
4236 *
4237 */
4238void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4239 void* pUserData)
4240{
4241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4242 tWDA_CbContext *pWDA;
4243 tDelStaSelfParams *delStaSelfParams;
4244
4245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304246 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004247 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004248
4249 if (NULL == pWdaParams)
4250 {
4251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004252 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004253 VOS_ASSERT(0);
4254 return;
4255 }
4256
4257 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4258 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4259
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004260 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004261
4262 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4263 {
4264 VOS_ASSERT(0);
4265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4266 vos_mem_free(pWdaParams) ;
4267 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4268 }
4269
4270 return ;
4271}
4272
4273/*
4274 * FUNCTION: WDA_DelSTASelfReq
4275 * Trigger Config STA processing in WDI
4276 */
4277VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4278 tDelStaSelfParams* pDelStaSelfReqParam)
4279{
4280 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004281 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 tWDA_ReqParams *pWdaParams = NULL;
4283 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4284 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4285 sizeof(WDI_DelSTASelfReqParamsType)) ;
4286
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004288 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004289 if( NULL == wdiDelStaSelfReq )
4290 {
4291 VOS_ASSERT( 0 );
4292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004293 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 return( VOS_STATUS_E_NOMEM );
4295 }
4296
4297 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4298 if( NULL == pWdaParams )
4299 {
4300 VOS_ASSERT( 0 );
4301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004302 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 vos_mem_free(wdiDelStaSelfReq) ;
4304 return( VOS_STATUS_E_NOMEM );
4305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 pWdaParams->pWdaContext = pWDA;
4307 /* Store param pointer as passed in by caller */
4308 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4309 /* store Params pass it to WDI */
4310 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4312 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4313
4314 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4315 wdiDelStaSelfReq->pUserData = pWdaParams;
4316
Jeff Johnson43971f52012-07-17 12:26:56 -07004317 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4319
Jeff Johnson43971f52012-07-17 12:26:56 -07004320 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 {
4322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4323 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4324 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004325 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4327 vos_mem_free(pWdaParams) ;
4328 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4329 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4330 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004331 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004332}
4333
Jeff Johnson295189b2012-06-20 16:38:30 -07004334/*
4335 * FUNCTION: WDA_SendMsg
4336 * Send Message back to PE
4337 */
4338void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4339 void *pBodyptr, tANI_U32 bodyVal)
4340{
4341 tSirMsgQ msg = {0} ;
4342 tANI_U32 status = VOS_STATUS_SUCCESS ;
4343 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 msg.type = msgType;
4345 msg.bodyval = bodyVal;
4346 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 if (VOS_STATUS_SUCCESS != status)
4349 {
4350 if(NULL != pBodyptr)
4351 {
4352 vos_mem_free(pBodyptr);
4353 }
4354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004355 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 VOS_ASSERT(0) ;
4357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 return ;
4359}
Jeff Johnson295189b2012-06-20 16:38:30 -07004360/*
4361 * FUNCTION: WDA_UpdateBSSParams
4362 * Translated WDA/PE BSS info into WDI BSS info..
4363 */
4364void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4365 WDI_ConfigBSSReqInfoType *wdiBssParams,
4366 tAddBssParams *wdaBssParams)
4367{
4368 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004369 /* copy bssReq Params to WDI structure */
4370 vos_mem_copy(wdiBssParams->macBSSID,
4371 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4372 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4373 sizeof(tSirMacAddr)) ;
4374 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4375 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4376 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004377 wdiBssParams->ucShortSlotTimeSupported =
4378 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004379 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4380 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4381 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4382 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4383 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4384
4385 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4386 wdiBssParams->ucTXOPProtectionFullSupport =
4387 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4389 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4392 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4393 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4394 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4395
Chet Lanctot186b5732013-03-18 10:26:30 -07004396 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4397
Jeff Johnson295189b2012-06-20 16:38:30 -07004398 /* copy SSID into WDI structure */
4399 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4400 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4401 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4403 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004405#ifdef WLAN_FEATURE_VOWIFI
4406 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4407#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410#ifdef WLAN_FEATURE_VOWIFI_11R
4411 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 if(wdiBssParams->bExtSetStaKeyParamValid)
4413 {
4414 /* copy set STA key params to WDI structure */
4415 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4416 wdaBssParams->extSetStaKeyParam.staIdx;
4417 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4418 wdaBssParams->extSetStaKeyParam.encType;
4419 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4420 wdaBssParams->extSetStaKeyParam.wepType;
4421 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4422 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4424 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004425 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004426 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4427 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4428 {
4429 WDA_GetWepKeysFromCfg( pWDA,
4430 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4431 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4432 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4433 }
4434 else
4435 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4437 keyIndex++)
4438 {
4439 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4440 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4441 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4442 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4443 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4444 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4446 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4447 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4448 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4449 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4450 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4451 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4452 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4455 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 }
4457 }
4458 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4459 }
4460 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4461 {
4462 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4463 sizeof(wdaBssParams->extSetStaKeyParam) );
4464 }
4465#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004466#ifdef WLAN_FEATURE_11AC
4467 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4468 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4469#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004470
4471 return ;
4472}
Jeff Johnson295189b2012-06-20 16:38:30 -07004473/*
4474 * FUNCTION: WDA_UpdateSTAParams
4475 * Translated WDA/PE BSS info into WDI BSS info..
4476 */
4477void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4478 WDI_ConfigStaReqInfoType *wdiStaParams,
4479 tAddStaParams *wdaStaParams)
4480{
4481 tANI_U8 i = 0;
4482 /* Update STA params */
4483 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4484 sizeof(tSirMacAddr)) ;
4485 wdiStaParams->usAssocId = wdaStaParams->assocId;
4486 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004487 wdiStaParams->staIdx = wdaStaParams->staIdx;
4488
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 wdiStaParams->ucShortPreambleSupported =
4490 wdaStaParams->shortPreambleSupported;
4491 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4492 sizeof(tSirMacAddr)) ;
4493 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4494
4495 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4496
4497 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4498 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4499 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4500 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4501 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4502 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4503 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4504
4505 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4506 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 wdiStaParams->wdiSupportedRates.opRateMode =
4508 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4510 {
4511 wdiStaParams->wdiSupportedRates.llbRates[i] =
4512 wdaStaParams->supportedRates.llbRates[i];
4513 }
4514 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4515 {
4516 wdiStaParams->wdiSupportedRates.llaRates[i] =
4517 wdaStaParams->supportedRates.llaRates[i];
4518 }
4519 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4520 {
4521 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4522 wdaStaParams->supportedRates.aniLegacyRates[i];
4523 }
4524 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4525 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004526#ifdef WLAN_FEATURE_11AC
4527 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4528 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4529 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4530 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4531#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4533 {
4534 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4535 wdaStaParams->supportedRates.supportedMCSSet[i];
4536 }
4537 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4538 wdaStaParams->supportedRates.rxHighestDataRate;
4539
4540 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4541
4542 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4543
4544 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4545 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4546 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4547
4548 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4549 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4550 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4551 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004552 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004553#ifdef WLAN_FEATURE_11AC
4554 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4555 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004556 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304557 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4558 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4559 * must be set by default */
4560 if ( wdiStaParams->vhtTxMUBformeeCapable )
4561 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004562#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004563 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4564 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 return ;
4566}
Jeff Johnson295189b2012-06-20 16:38:30 -07004567/*
4568 * -------------------------------------------------------------------------
4569 * CFG update to WDI
4570 * -------------------------------------------------------------------------
4571 */
4572
4573 /*
4574 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4575 * Convert the WNI CFG ID to HAL CFG ID
4576 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004577static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004578{
4579 switch(wniCfgId)
4580 {
4581 case WNI_CFG_STA_ID:
4582 return QWLAN_HAL_CFG_STA_ID;
4583 case WNI_CFG_CURRENT_TX_ANTENNA:
4584 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4585 case WNI_CFG_CURRENT_RX_ANTENNA:
4586 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4587 case WNI_CFG_LOW_GAIN_OVERRIDE:
4588 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4589 case WNI_CFG_POWER_STATE_PER_CHAIN:
4590 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4591 case WNI_CFG_CAL_PERIOD:
4592 return QWLAN_HAL_CFG_CAL_PERIOD;
4593 case WNI_CFG_CAL_CONTROL:
4594 return QWLAN_HAL_CFG_CAL_CONTROL;
4595 case WNI_CFG_PROXIMITY:
4596 return QWLAN_HAL_CFG_PROXIMITY;
4597 case WNI_CFG_NETWORK_DENSITY:
4598 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4599 case WNI_CFG_MAX_MEDIUM_TIME:
4600 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4601 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4602 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4603 case WNI_CFG_RTS_THRESHOLD:
4604 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4605 case WNI_CFG_SHORT_RETRY_LIMIT:
4606 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4607 case WNI_CFG_LONG_RETRY_LIMIT:
4608 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4609 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4610 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4611 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4612 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4613 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4614 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4615 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4616 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4617 case WNI_CFG_FIXED_RATE:
4618 return QWLAN_HAL_CFG_FIXED_RATE;
4619 case WNI_CFG_RETRYRATE_POLICY:
4620 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4621 case WNI_CFG_RETRYRATE_SECONDARY:
4622 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4623 case WNI_CFG_RETRYRATE_TERTIARY:
4624 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4625 case WNI_CFG_FORCE_POLICY_PROTECTION:
4626 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4627 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4628 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4629 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4630 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4631 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4632 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4633 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4634 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4635 case WNI_CFG_MAX_BA_SESSIONS:
4636 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4637 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4638 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4639 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4640 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4641 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4642 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4643 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4644 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4645 case WNI_CFG_STATS_PERIOD:
4646 return QWLAN_HAL_CFG_STATS_PERIOD;
4647 case WNI_CFG_CFP_MAX_DURATION:
4648 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4649#if 0 /*This is not part of CFG*/
4650 case WNI_CFG_FRAME_TRANS_ENABLED:
4651 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4652#endif
4653 case WNI_CFG_DTIM_PERIOD:
4654 return QWLAN_HAL_CFG_DTIM_PERIOD;
4655 case WNI_CFG_EDCA_WME_ACBK:
4656 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4657 case WNI_CFG_EDCA_WME_ACBE:
4658 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4659 case WNI_CFG_EDCA_WME_ACVI:
4660 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4661 case WNI_CFG_EDCA_WME_ACVO:
4662 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4663#if 0
4664 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4665 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4666 case WNI_CFG_TELE_BCN_TRANS_LI:
4667 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4668 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4669 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4670 case WNI_CFG_TELE_BCN_MAX_LI:
4671 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4672 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4673 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4674#endif
4675 case WNI_CFG_ENABLE_CLOSE_LOOP:
4676 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004677 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4678 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 default:
4680 {
4681 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004682 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 wniCfgId);
4684 return VOS_STATUS_E_INVAL;
4685 }
4686 }
4687}
Jeff Johnson295189b2012-06-20 16:38:30 -07004688/*
4689 * FUNCTION: WDA_UpdateCfgCallback
4690 *
4691 */
4692void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4693{
4694 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4695 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4696 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004698 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004699 /*
4700 * currently there is no response message is expected between PE and
4701 * WDA, Failure return from WDI is a ASSERT condition
4702 */
4703 if(WDI_STATUS_SUCCESS != wdiStatus)
4704 {
4705 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004706 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4708 }
4709
4710 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4711 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4712 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 return ;
4714}
Jeff Johnson295189b2012-06-20 16:38:30 -07004715/*
4716 * FUNCTION: WDA_UpdateCfg
4717 *
4718 */
4719VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4720{
4721
4722 WDI_Status status = WDI_STATUS_SUCCESS ;
4723 tANI_U32 val =0;
4724 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4725 tHalCfg *configData;
4726 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4727 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004729 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 if (NULL == pMac )
4731 {
4732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004733 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004734 return VOS_STATUS_E_FAILURE;
4735 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004736 if(WDA_START_STATE != pWDA->wdaState)
4737 {
4738 return VOS_STATUS_E_FAILURE;
4739 }
4740
4741 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4742 {
4743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004744 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004745 VOS_ASSERT(0);
4746 return VOS_STATUS_E_FAILURE;
4747 }
4748
4749 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4750 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 if(NULL == wdiCfgReqParam)
4752 {
4753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004755 VOS_ASSERT(0);
4756 return VOS_STATUS_E_NOMEM;
4757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004758 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4759 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 if(NULL == wdiCfgReqParam->pConfigBuffer)
4761 {
4762 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004764 vos_mem_free(wdiCfgReqParam);
4765 VOS_ASSERT(0);
4766 return VOS_STATUS_E_NOMEM;
4767 }
4768
4769 /*convert the WNI CFG Id to HAL CFG Id*/
4770 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4771 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4772
4773 /*TODO: revisit this for handling string parameters */
4774 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4775 &val) != eSIR_SUCCESS)
4776 {
4777 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004778 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4780 vos_mem_free(wdiCfgReqParam);
4781 return eSIR_FAILURE;
4782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4784 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4785 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4786 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4787 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4788
4789 /* store Params pass it to WDI */
4790 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004791#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4792 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4793 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 if(IS_WDI_STATUS_FAILURE(status))
4795 {
4796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4797 "Failure in Update CFG WDI API, free all the memory " );
4798 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4799 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4800 pWDA->wdaWdiCfgApiMsgParam = NULL;
4801 /* Failure is not expected */
4802 VOS_ASSERT(0) ;
4803 }
4804#else
4805 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4806 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4807 pWDA->wdaWdiCfgApiMsgParam = NULL;
4808#endif
4809 return CONVERT_WDI2VOS_STATUS(status) ;
4810}
4811
Jeff Johnson295189b2012-06-20 16:38:30 -07004812VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4813 v_U8_t *pDefaultKeyId,
4814 v_U8_t *pNumKeys,
4815 WDI_KeysType *pWdiKeys )
4816{
4817 v_U32_t i, j, defKeyId = 0;
4818 v_U32_t val = SIR_MAC_KEY_LENGTH;
4819 VOS_STATUS status = WDI_STATUS_SUCCESS;
4820 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 if (NULL == pMac )
4822 {
4823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004824 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 return VOS_STATUS_E_FAILURE;
4826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4828 &defKeyId ))
4829 {
4830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4831 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4832 }
4833
4834 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004835 /* Need to extract ALL of the configured WEP Keys */
4836 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4837 {
4838 val = SIR_MAC_KEY_LENGTH;
4839 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4840 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4841 pWdiKeys[j].key,
4842 &val ))
4843 {
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004845 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 }
4847 else
4848 {
4849 pWdiKeys[j].keyId = (tANI_U8) i;
4850 /*
4851 * Actually, a DC (Don't Care) because
4852 * this is determined (and set) by PE/MLME
4853 */
4854 pWdiKeys[j].unicast = 0;
4855 /*
4856 * Another DC (Don't Care)
4857 */
4858 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4859 /* Another DC (Don't Care). Unused for WEP */
4860 pWdiKeys[j].paeRole = 0;
4861 /* Determined from wlan_cfgGetStr() above.*/
4862 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 j++;
4864 *pNumKeys = (tANI_U8) j;
4865 }
4866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 return status;
4868}
Jeff Johnson295189b2012-06-20 16:38:30 -07004869/*
4870 * FUNCTION: WDA_SetBssKeyReqCallback
4871 * send SET BSS key RSP back to PE
4872 */
4873void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4874{
4875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4876 tWDA_CbContext *pWDA;
4877 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 if(NULL == pWdaParams)
4881 {
4882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004883 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 VOS_ASSERT(0) ;
4885 return ;
4886 }
4887 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4888 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304889 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4890 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4892 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004893 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004895 return ;
4896}
Jeff Johnson295189b2012-06-20 16:38:30 -07004897/*
4898 * FUNCTION: WDA_ProcessSetBssKeyReq
4899 * Request to WDI for programming the BSS key( key for
4900 * broadcast/multicast frames Encryption)
4901 */
4902VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4903 tSetBssKeyParams *setBssKeyParams )
4904{
4905 WDI_Status status = WDI_STATUS_SUCCESS ;
4906 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4907 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4908 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4909 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004912 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 if(NULL == wdiSetBssKeyParam)
4914 {
4915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 VOS_ASSERT(0);
4918 return VOS_STATUS_E_NOMEM;
4919 }
4920 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4921 if(NULL == pWdaParams)
4922 {
4923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 VOS_ASSERT(0);
4926 vos_mem_free(wdiSetBssKeyParam);
4927 return VOS_STATUS_E_NOMEM;
4928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 /* copy set BSS params to WDI structure */
4931 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4932 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4933 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 if(setBssKeyParams->encType != eSIR_ED_NONE)
4935 {
4936 if( setBssKeyParams->numKeys == 0 &&
4937 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4938 setBssKeyParams->encType == eSIR_ED_WEP104))
4939 {
4940 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4942 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4943 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4944 }
4945 else
4946 {
4947 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4948 {
4949 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4950 setBssKeyParams->key[keyIndex].keyId;
4951 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4952 setBssKeyParams->key[keyIndex].unicast;
4953 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4954 setBssKeyParams->key[keyIndex].keyDirection;
4955 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4956 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4957 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4958 setBssKeyParams->key[keyIndex].paeRole;
4959 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4960 setBssKeyParams->key[keyIndex].keyLength;
4961 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4962 setBssKeyParams->key[keyIndex].key,
4963 SIR_MAC_MAX_KEY_LENGTH);
4964 }
4965 }
4966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4968 setBssKeyParams->singleTidRc;
4969 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 /* Store set key pointer, as this will be used for response */
4971 /* store Params pass it to WDI */
4972 pWdaParams->pWdaContext = pWDA;
4973 pWdaParams->wdaMsgParam = setBssKeyParams;
4974 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4976 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4977
4978 if(IS_WDI_STATUS_FAILURE(status))
4979 {
4980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4981 "Failure in Set BSS Key Req WDI API, free all the memory " );
4982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4983 vos_mem_free(pWdaParams) ;
4984 setBssKeyParams->status = eSIR_FAILURE ;
4985 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 return CONVERT_WDI2VOS_STATUS(status) ;
4988}
Jeff Johnson295189b2012-06-20 16:38:30 -07004989/*
4990 * FUNCTION: WDA_RemoveBssKeyReqCallback
4991 * send SET BSS key RSP back to PE
4992 */
4993void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4994{
4995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4996 tWDA_CbContext *pWDA;
4997 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005000 if(NULL == pWdaParams)
5001 {
5002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005003 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005004 VOS_ASSERT(0) ;
5005 return ;
5006 }
5007 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5008 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5010 vos_mem_free(pWdaParams) ;
5011
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005012 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 return ;
5015}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305016
5017/*
5018 * FUNCTION: WDA_SpoofMacAddrRspCallback
5019 * recieves spoof mac addr response from FW
5020 */
5021void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5022{
5023 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5024 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305025
Siddharth Bhal171788a2014-09-29 21:02:40 +05305026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5027 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305028
Siddharth Bhal171788a2014-09-29 21:02:40 +05305029 if(NULL == pWdaParams)
5030 {
5031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5032 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305033 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305034 return ;
5035 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305036 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305037
Siddharth Bhal029d6732014-10-09 21:31:23 +05305038 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305040 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305041 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305042 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5043 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305044
Siddharth Bhal171788a2014-09-29 21:02:40 +05305045 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305046 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305047 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305048
5049 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305050}
5051
Jeff Johnson295189b2012-06-20 16:38:30 -07005052/*
5053 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5054 * Request to WDI to remove the BSS key( key for broadcast/multicast
5055 * frames Encryption)
5056 */
5057VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5058 tRemoveBssKeyParams *removeBssKeyParams )
5059{
5060 WDI_Status status = WDI_STATUS_SUCCESS ;
5061 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5062 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5063 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5064 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005066 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 if(NULL == wdiRemoveBssKeyParam)
5068 {
5069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 VOS_ASSERT(0);
5072 return VOS_STATUS_E_NOMEM;
5073 }
5074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5075 if(NULL == pWdaParams)
5076 {
5077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 VOS_ASSERT(0);
5080 vos_mem_free(wdiRemoveBssKeyParam);
5081 return VOS_STATUS_E_NOMEM;
5082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005083 /* copy Remove BSS key params to WDI structure*/
5084 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5085 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5086 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5087 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5088 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005089 /* Store remove key pointer, as this will be used for response */
5090 /* store Params pass it to WDI */
5091 pWdaParams->pWdaContext = pWDA;
5092 pWdaParams->wdaMsgParam = removeBssKeyParams;
5093 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005094 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5095 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005096 if(IS_WDI_STATUS_FAILURE(status))
5097 {
5098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5099 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5101 vos_mem_free(pWdaParams) ;
5102 removeBssKeyParams->status = eSIR_FAILURE ;
5103 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005105 return CONVERT_WDI2VOS_STATUS(status) ;
5106}
Jeff Johnson295189b2012-06-20 16:38:30 -07005107/*
5108 * FUNCTION: WDA_SetBssKeyReqCallback
5109 * send SET BSS key RSP back to PE
5110 */
5111void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5112{
5113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5114 tWDA_CbContext *pWDA;
5115 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005117 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005118 if(NULL == pWdaParams)
5119 {
5120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005121 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005122 VOS_ASSERT(0) ;
5123 return ;
5124 }
5125 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5126 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305127 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5128 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5130 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005131 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 return ;
5134}
Jeff Johnson295189b2012-06-20 16:38:30 -07005135/*
5136 * FUNCTION: WDA_ProcessSetStaKeyReq
5137 * Request to WDI for programming the STA key( key for Unicast frames
5138 * Encryption)
5139 */
5140VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5141 tSetStaKeyParams *setStaKeyParams )
5142{
5143 WDI_Status status = WDI_STATUS_SUCCESS ;
5144 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5145 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5146 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5147 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 if(NULL == wdiSetStaKeyParam)
5152 {
5153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005155 VOS_ASSERT(0);
5156 return VOS_STATUS_E_NOMEM;
5157 }
5158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5159 if(NULL == pWdaParams)
5160 {
5161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 VOS_ASSERT(0);
5164 vos_mem_free(wdiSetStaKeyParam);
5165 return VOS_STATUS_E_NOMEM;
5166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 /* copy set STA key params to WDI structure */
5170 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5171 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5172 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5173 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 if(setStaKeyParams->encType != eSIR_ED_NONE)
5175 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005176 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005177 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5178 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5179 {
5180 WDA_GetWepKeysFromCfg( pWDA,
5181 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5182 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5183 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5184 }
5185 else
5186 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5188 keyIndex++)
5189 {
5190 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5191 setStaKeyParams->key[keyIndex].keyId;
5192 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5193 setStaKeyParams->key[keyIndex].unicast;
5194 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5195 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5197 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5198 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5199 setStaKeyParams->key[keyIndex].paeRole;
5200 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5201 setStaKeyParams->key[keyIndex].keyLength;
5202 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5203 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5204 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5205 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5206 {
5207 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5208 }
5209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005210 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5211 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 }
5213 }
5214 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5215 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005216 /* Store set key pointer, as this will be used for response */
5217 /* store Params pass it to WDI */
5218 pWdaParams->pWdaContext = pWDA;
5219 pWdaParams->wdaMsgParam = setStaKeyParams;
5220 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005221 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5222 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 if(IS_WDI_STATUS_FAILURE(status))
5224 {
5225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5226 "Failure in set STA Key Req WDI API, free all the memory " );
5227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5228 vos_mem_free(pWdaParams) ;
5229 setStaKeyParams->status = eSIR_FAILURE ;
5230 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005232 return CONVERT_WDI2VOS_STATUS(status) ;
5233}
Jeff Johnson295189b2012-06-20 16:38:30 -07005234/*
5235 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5236 * send SET Bcast STA key RSP back to PE
5237 */
5238void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5239{
5240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5241 tWDA_CbContext *pWDA;
5242 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005244 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 if(NULL == pWdaParams)
5246 {
5247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005248 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 VOS_ASSERT(0) ;
5250 return ;
5251 }
5252 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5253 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5255 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005256 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005257 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 return ;
5259}
5260
Jeff Johnson295189b2012-06-20 16:38:30 -07005261/*
5262 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5263 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5264 * Encryption)
5265 */
5266VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5267 tSetStaKeyParams *setStaKeyParams )
5268{
5269 WDI_Status status = WDI_STATUS_SUCCESS ;
5270 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5271 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5272 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5273 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005276 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 if(NULL == wdiSetStaKeyParam)
5278 {
5279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 VOS_ASSERT(0);
5282 return VOS_STATUS_E_NOMEM;
5283 }
5284 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5285 if(NULL == pWdaParams)
5286 {
5287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005288 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 VOS_ASSERT(0);
5290 vos_mem_free(wdiSetStaKeyParam);
5291 return VOS_STATUS_E_NOMEM;
5292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005294 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 /* copy set STA key params to WDI structure */
5296 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5297 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5298 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5299 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005300 if(setStaKeyParams->encType != eSIR_ED_NONE)
5301 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005302 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5303 keyIndex++)
5304 {
5305 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5306 setStaKeyParams->key[keyIndex].keyId;
5307 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5308 setStaKeyParams->key[keyIndex].unicast;
5309 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5310 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5312 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5313 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5314 setStaKeyParams->key[keyIndex].paeRole;
5315 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5316 setStaKeyParams->key[keyIndex].keyLength;
5317 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5318 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5321 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 }
5323 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005324 /* Store set key pointer, as this will be used for response */
5325 /* store Params pass it to WDI */
5326 pWdaParams->pWdaContext = pWDA;
5327 pWdaParams->wdaMsgParam = setStaKeyParams;
5328 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5330 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 if(IS_WDI_STATUS_FAILURE(status))
5332 {
5333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5334 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5336 vos_mem_free(pWdaParams) ;
5337 setStaKeyParams->status = eSIR_FAILURE ;
5338 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005340 return CONVERT_WDI2VOS_STATUS(status) ;
5341}
Jeff Johnson295189b2012-06-20 16:38:30 -07005342/*
5343 * FUNCTION: WDA_RemoveStaKeyReqCallback
5344 * send SET BSS key RSP back to PE
5345 */
5346void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5347{
5348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5349 tWDA_CbContext *pWDA;
5350 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005352 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 if(NULL == pWdaParams)
5354 {
5355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005356 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005357 VOS_ASSERT(0) ;
5358 return ;
5359 }
5360 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5361 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5363 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005364 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005366 return ;
5367}
5368
Jeff Johnson295189b2012-06-20 16:38:30 -07005369/*
5370 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5371 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5372 */
5373VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5374 tRemoveStaKeyParams *removeStaKeyParams )
5375{
5376 WDI_Status status = WDI_STATUS_SUCCESS ;
5377 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5378 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5379 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5380 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005382 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 if(NULL == wdiRemoveStaKeyParam)
5384 {
5385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 VOS_ASSERT(0);
5388 return VOS_STATUS_E_NOMEM;
5389 }
5390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5391 if(NULL == pWdaParams)
5392 {
5393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005395 VOS_ASSERT(0);
5396 vos_mem_free(wdiRemoveStaKeyParam);
5397 return VOS_STATUS_E_NOMEM;
5398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 /* copy remove STA key params to WDI structure*/
5400 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5401 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5402 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5403 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5404 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 /* Store remove key pointer, as this will be used for response */
5406 /* store Params pass it to WDI */
5407 pWdaParams->pWdaContext = pWDA;
5408 pWdaParams->wdaMsgParam = removeStaKeyParams;
5409 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005410 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5411 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005412 if(IS_WDI_STATUS_FAILURE(status))
5413 {
5414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5415 "Failure in remove STA Key Req WDI API, free all the memory " );
5416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5417 vos_mem_free(pWdaParams) ;
5418 removeStaKeyParams->status = eSIR_FAILURE ;
5419 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005421 return CONVERT_WDI2VOS_STATUS(status) ;
5422}
Jeff Johnson295189b2012-06-20 16:38:30 -07005423/*
5424 * FUNCTION: WDA_IsHandleSetLinkStateReq
5425 * Update the WDA state and return the status to handle this message or not
5426 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005427WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5428 tWDA_CbContext *pWDA,
5429 tLinkStateParams *linkStateParams)
5430{
5431 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 switch(linkStateParams->state)
5433 {
5434 case eSIR_LINK_PREASSOC_STATE:
5435 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5436 /*
5437 * set the WDA state to PRE ASSOC
5438 * copy the BSSID into pWDA to use it in join request and return,
5439 * No need to handle these messages.
5440 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005441 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5442 {
5443 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005445 }
5446 else
5447 {
5448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005449 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005450 VOS_ASSERT(0);
5451 }
5452
5453 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5454 {
5455 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005457 }
5458 else
5459 {
5460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005461 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005462 VOS_ASSERT(0);
5463 }
5464
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5466 *channel and after ) so reset the WDA state to ready when the second
5467 * time UMAC issue the link state with PREASSOC
5468 */
5469 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5470 {
5471 /* RESET WDA state back to WDA_READY_STATE */
5472 pWDA->wdaState = WDA_READY_STATE;
5473 }
5474 else
5475 {
5476 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5477 }
5478 //populate linkState info in WDACbCtxt
5479 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005481 default:
5482 if(pWDA->wdaState != WDA_READY_STATE)
5483 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005484 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5485 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5486 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5487 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5488 *the ASSERT in WDA_Stop during module unload.*/
5489 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5490 {
5491 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005492 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005493 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005494 else
5495 {
5496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005497 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005498 status = WDA_IGNORE_SET_LINK_STATE;
5499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 }
5501 break;
5502 }
5503
5504 return status;
5505}
Jeff Johnson295189b2012-06-20 16:38:30 -07005506/*
5507 * FUNCTION: WDA_SetLinkStateCallback
5508 * call back function for set link state from WDI
5509 */
5510void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5511{
5512 tWDA_CbContext *pWDA;
5513 tLinkStateParams *linkStateParams;
5514 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005516 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005517 if(NULL == pWdaParams)
5518 {
5519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005520 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 VOS_ASSERT(0) ;
5522 return ;
5523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 /*
5527 * In STA mode start the BA activity check timer after association
5528 * and in AP mode start BA activity check timer after BSS start */
5529 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5530 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005531 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5532 ((status == WDI_STATUS_SUCCESS) &&
5533 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005534 {
5535 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 /*
5539 * No respone required for WDA_SET_LINK_STATE so free the request
5540 * param here
5541 */
5542 if( pWdaParams != NULL )
5543 {
5544 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5545 {
5546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5547 }
5548 vos_mem_free(pWdaParams);
5549 }
5550 return ;
5551}
Jeff Johnson295189b2012-06-20 16:38:30 -07005552/*
5553 * FUNCTION: WDA_ProcessSetLinkState
5554 * Request to WDI to set the link status.
5555 */
5556VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5557 tLinkStateParams *linkStateParams)
5558{
5559 WDI_Status status = WDI_STATUS_SUCCESS ;
5560 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5561 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5562 sizeof(WDI_SetLinkReqParamsType)) ;
5563 tWDA_ReqParams *pWdaParams ;
5564 tpAniSirGlobal pMac;
5565 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5566
5567 if(NULL == pMac)
5568 {
5569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005570 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005572 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 return VOS_STATUS_E_FAILURE;
5574 }
5575
5576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005577 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 if(NULL == wdiSetLinkStateParam)
5579 {
5580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005581 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 VOS_ASSERT(0);
5583 return VOS_STATUS_E_NOMEM;
5584 }
5585 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5586 if(NULL == pWdaParams)
5587 {
5588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 VOS_ASSERT(0);
5591 vos_mem_free(wdiSetLinkStateParam);
5592 return VOS_STATUS_E_NOMEM;
5593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 if(WDA_IGNORE_SET_LINK_STATE ==
5595 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5596 {
5597 status = WDI_STATUS_E_FAILURE;
5598 }
5599 else
5600 {
5601 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5602 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5604 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5606 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005607 pWdaParams->pWdaContext = pWDA;
5608 /* Store remove key pointer, as this will be used for response */
5609 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 /* store Params pass it to WDI */
5611 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5612 /* Stop Timer only other than GO role and concurrent session */
5613 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005614 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5616 {
5617 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5618 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5620 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005621 if(IS_WDI_STATUS_FAILURE(status))
5622 {
5623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5624 "Failure in set link state Req WDI API, free all the memory " );
5625 }
5626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 if(IS_WDI_STATUS_FAILURE(status))
5628 {
5629 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005630 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005631 vos_mem_free(pWdaParams);
5632 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 return CONVERT_WDI2VOS_STATUS(status) ;
5634}
Jeff Johnson295189b2012-06-20 16:38:30 -07005635/*
5636 * FUNCTION: WDA_GetStatsReqParamsCallback
5637 * send the response to PE with Stats received from WDI
5638 */
5639void WDA_GetStatsReqParamsCallback(
5640 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5641 void* pUserData)
5642{
5643 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5644 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5645
5646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005647 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 pGetPEStatsRspParams =
5649 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5650 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5651
5652 if(NULL == pGetPEStatsRspParams)
5653 {
5654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005656 VOS_ASSERT(0);
5657 return;
5658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5660 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5661 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5662 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005663
5664 //Fill the Session Id Properly in PE
5665 pGetPEStatsRspParams->sessionId = 0;
5666 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005667 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005668 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5669 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 vos_mem_copy( pGetPEStatsRspParams + 1,
5671 wdiGetStatsRsp + 1,
5672 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 /* send response to UMAC*/
5674 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5675
5676 return;
5677}
5678
Jeff Johnson295189b2012-06-20 16:38:30 -07005679/*
5680 * FUNCTION: WDA_ProcessGetStatsReq
5681 * Request to WDI to get the statistics
5682 */
5683VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5684 tAniGetPEStatsReq *pGetStatsParams)
5685{
5686 WDI_Status status = WDI_STATUS_SUCCESS ;
5687 WDI_GetStatsReqParamsType wdiGetStatsParam;
5688 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005690 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5692 pGetStatsParams->staId;
5693 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5694 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005696 status = WDI_GetStatsReq(&wdiGetStatsParam,
5697 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005698 if(IS_WDI_STATUS_FAILURE(status))
5699 {
5700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5701 "Failure in Get Stats Req WDI API, free all the memory " );
5702 pGetPEStatsRspParams =
5703 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5704 if(NULL == pGetPEStatsRspParams)
5705 {
5706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005708 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005709 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005710 return VOS_STATUS_E_NOMEM;
5711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005712 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5713 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5714 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5715 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5716 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5717 (void *)pGetPEStatsRspParams, 0) ;
5718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005719 /* Free the request message */
5720 vos_mem_free(pGetStatsParams);
5721 return CONVERT_WDI2VOS_STATUS(status);
5722}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005723
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005724#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005725/*
5726 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5727 * send the response to PE with roam Rssi received from WDI
5728 */
5729void WDA_GetRoamRssiReqParamsCallback(
5730 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5731 void* pUserData)
5732{
5733 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5734 tWDA_CbContext *pWDA = NULL;
5735 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5736 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5738 "<------ %s " ,__func__);
5739 if(NULL == pWdaParams)
5740 {
5741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5742 "%s: pWdaParams received NULL", __func__);
5743 VOS_ASSERT(0) ;
5744 return ;
5745 }
5746 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5747 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5748
5749 if(NULL == pGetRoamRssiReqParams)
5750 {
5751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5752 "%s: pGetRoamRssiReqParams received NULL", __func__);
5753 VOS_ASSERT(0);
5754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5755 vos_mem_free(pWdaParams);
5756 return ;
5757 }
5758 pGetRoamRssiRspParams =
5759 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5760
5761 if(NULL == pGetRoamRssiRspParams)
5762 {
5763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5764 "%s: VOS MEM Alloc Failure", __func__);
5765 VOS_ASSERT(0);
5766 return;
5767 }
5768 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5769 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005770 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005771 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5772 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5773
5774 /* Assign get roam rssi req (backup) in to the response */
5775 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5776
5777 /* free WDI command buffer */
5778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5779 vos_mem_free(pWdaParams) ;
5780
5781 /* send response to UMAC*/
5782 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5783
5784 return;
5785}
5786
5787
5788
5789/*
5790 * FUNCTION: WDA_ProcessGetRoamRssiReq
5791 * Request to WDI to get the statistics
5792 */
5793VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5794 tAniGetRssiReq *pGetRoamRssiParams)
5795{
5796 WDI_Status status = WDI_STATUS_SUCCESS ;
5797 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5798 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5799 tWDA_ReqParams *pWdaParams = NULL;
5800
5801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5802 "------> %s " ,__func__);
5803 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5804 pGetRoamRssiParams->staId;
5805 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5806
5807 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5808 if(NULL == pWdaParams)
5809 {
5810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5811 "%s: VOS MEM Alloc Failure", __func__);
5812 VOS_ASSERT(0);
5813 return VOS_STATUS_E_NOMEM;
5814 }
5815
5816 /* Store Init Req pointer, as this will be used for response */
5817 pWdaParams->pWdaContext = pWDA;
5818
5819 /* Take Get roam Rssi req backup as it stores the callback to be called after
5820 receiving the response */
5821 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5822 pWdaParams->wdaWdiApiMsgParam = NULL;
5823
5824 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5825 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5826 if(IS_WDI_STATUS_FAILURE(status))
5827 {
5828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5829 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5830 pGetRoamRssiRspParams =
5831 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5832 if(NULL == pGetRoamRssiRspParams)
5833 {
5834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5835 "%s: VOS MEM Alloc Failure", __func__);
5836 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305837 vos_mem_free(pGetRoamRssiParams);
5838 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005839 return VOS_STATUS_E_NOMEM;
5840 }
5841 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5842 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5843 pGetRoamRssiRspParams->rssi = 0;
5844 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5845 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5846 (void *)pGetRoamRssiRspParams, 0) ;
5847 }
5848 return CONVERT_WDI2VOS_STATUS(status);
5849}
5850#endif
5851
5852
Jeff Johnson295189b2012-06-20 16:38:30 -07005853/*
5854 * FUNCTION: WDA_UpdateEDCAParamCallback
5855 * call back function for Update EDCA params from WDI
5856 */
5857void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5858{
5859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5860 tEdcaParams *pEdcaParams;
5861
5862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005863 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 if(NULL == pWdaParams)
5865 {
5866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005867 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 VOS_ASSERT(0) ;
5869 return ;
5870 }
5871 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5873 vos_mem_free(pWdaParams);
5874 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 return ;
5876}
Jeff Johnson295189b2012-06-20 16:38:30 -07005877/*
5878 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5879 * Request to WDI to Update the EDCA params.
5880 */
5881VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5882 tEdcaParams *pEdcaParams)
5883{
5884 WDI_Status status = WDI_STATUS_SUCCESS ;
5885 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5886 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5887 sizeof(WDI_UpdateEDCAParamsType)) ;
5888 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005890 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 if(NULL == wdiEdcaParam)
5892 {
5893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005894 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005895 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005896 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005897 return VOS_STATUS_E_NOMEM;
5898 }
5899 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5900 if(NULL == pWdaParams)
5901 {
5902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 VOS_ASSERT(0);
5905 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005906 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 return VOS_STATUS_E_NOMEM;
5908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005910 /*
5911 Since firmware is not using highperformance flag, we have removed
5912 this flag from wdiEDCAInfo structure to match sizeof the structure
5913 between host and firmware.In future if we are planning to use
5914 highperformance flag then Please define this flag in wdiEDCAInfo
5915 structure, update it here and send it to firmware. i.e.
5916 Following is the original line which we removed as part of the fix
5917 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5918 pEdcaParams->highPerformance;
5919 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5921 &pEdcaParams->acbe);
5922 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5923 &pEdcaParams->acbk);
5924 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5925 &pEdcaParams->acvi);
5926 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5927 &pEdcaParams->acvo);
5928 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 pWdaParams->pWdaContext = pWDA;
5930 /* Store remove key pointer, as this will be used for response */
5931 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 /* store Params pass it to WDI */
5933 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5935 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 if(IS_WDI_STATUS_FAILURE(status))
5937 {
5938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5939 "Failure in Update EDCA Params WDI API, free all the memory " );
5940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5941 vos_mem_free(pWdaParams);
5942 vos_mem_free(pEdcaParams);
5943 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005944 return CONVERT_WDI2VOS_STATUS(status) ;
5945}
Jeff Johnson295189b2012-06-20 16:38:30 -07005946/*
5947 * FUNCTION: WDA_AddBAReqCallback
5948 * send ADD BA RSP back to PE
5949 */
5950void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5951 void* pUserData)
5952{
5953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5954 tWDA_CbContext *pWDA;
5955 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005957 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 if(NULL == pWdaParams)
5959 {
5960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005961 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 VOS_ASSERT(0) ;
5963 return ;
5964 }
5965 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5966 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5968 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005969 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 return ;
5972}
5973
Jeff Johnson295189b2012-06-20 16:38:30 -07005974/*
5975 * FUNCTION: WDA_ProcessAddBAReq
5976 * Request to WDI to Update the ADDBA REQ params.
5977 */
5978VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5979 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5980{
Jeff Johnson43971f52012-07-17 12:26:56 -07005981 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005982 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5983 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5984 sizeof(WDI_AddBAReqParamsType)) ;
5985 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005987 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 if(NULL == wdiAddBAReqParam)
5989 {
5990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 VOS_ASSERT(0);
5993 return VOS_STATUS_E_NOMEM;
5994 }
5995 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5996 if(NULL == pWdaParams)
5997 {
5998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005999 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 VOS_ASSERT(0);
6001 vos_mem_free(wdiAddBAReqParam);
6002 return VOS_STATUS_E_NOMEM;
6003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006004 do
6005 {
6006 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 wdiAddBaInfo->ucSTAIdx = staIdx ;
6008 wdiAddBaInfo->ucBaSessionID = baSessionID ;
6009 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 } while(0) ;
6011 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 pWdaParams->pWdaContext = pWDA;
6013 /* store Params pass it to WDI */
6014 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6015 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006016 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6017 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006018
Jeff Johnson43971f52012-07-17 12:26:56 -07006019 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 {
6021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006022 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6023 status = CONVERT_WDI2VOS_STATUS(wstatus);
6024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 vos_mem_free(pWdaParams);
6026 pAddBAReqParams->status = eSIR_FAILURE;
6027 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6028 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006029 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006030}
Jeff Johnson295189b2012-06-20 16:38:30 -07006031/*
6032 * FUNCTION: WDA_AddBASessionReqCallback
6033 * send ADD BA SESSION RSP back to PE/(or TL)
6034 */
6035void WDA_AddBASessionReqCallback(
6036 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6037{
6038 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6040 tWDA_CbContext *pWDA;
6041 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006043 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 if(NULL == pWdaParams)
6045 {
6046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006047 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 VOS_ASSERT(0) ;
6049 return ;
6050 }
6051 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6052 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 if( NULL == pAddBAReqParams )
6054 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006056 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 return ;
6061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6063 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 /*
6065 * if WDA in update TL state, update TL with BA session parama and send
6066 * another request to HAL(/WDI) (ADD_BA_REQ)
6067 */
6068
6069 if((VOS_STATUS_SUCCESS ==
6070 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6071 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6072 {
6073 /* Update TL with BA info received from HAL/WDI */
6074 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6075 wdiAddBaSession->usBaSessionID,
6076 wdiAddBaSession->ucSTAIdx,
6077 wdiAddBaSession->ucBaTID,
6078 wdiAddBaSession->ucBaBufferSize,
6079 wdiAddBaSession->ucWinSize,
6080 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006081 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6082 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6083 }
6084 else
6085 {
6086 pAddBAReqParams->status =
6087 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6088
6089 /* Setting Flag to indicate that Set BA is success */
6090 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6091 {
6092 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6093 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6094 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 /*Reset the WDA state to READY */
6099 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 return ;
6101}
6102
Jeff Johnson295189b2012-06-20 16:38:30 -07006103/*
6104 * FUNCTION: WDA_ProcessAddBASessionReq
6105 * Request to WDI to Update the ADDBA REQ params.
6106 */
6107VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6108 tAddBAParams *pAddBAReqParams)
6109{
6110 WDI_Status status = WDI_STATUS_SUCCESS ;
6111 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6112 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6113 sizeof(WDI_AddBASessionReqParamsType)) ;
6114 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006115 WLANTL_STAStateType tlSTAState = 0;
6116
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006118 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 if(NULL == wdiAddBASessionReqParam)
6120 {
6121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 VOS_ASSERT(0);
6124 return VOS_STATUS_E_NOMEM;
6125 }
6126 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6127 if(NULL == pWdaParams)
6128 {
6129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006130 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 VOS_ASSERT(0);
6132 vos_mem_free(wdiAddBASessionReqParam);
6133 return VOS_STATUS_E_NOMEM;
6134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 /*
6136 * Populate ADD BA parameters and pass these paarmeters to WDI.
6137 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6138 * the state to track if these is BA recipient case or BA initiator
6139 * case.
6140 */
6141 do
6142 {
6143 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6144 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6145 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6146 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6147 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6148 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6149 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006150 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6152 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6153 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6154 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6155 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006156 /* check the BA direction and update state accordingly */
6157 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6158 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6159 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6160
6161 }while(0) ;
6162 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 pWdaParams->pWdaContext = pWDA;
6164 /* Store ADD BA pointer, as this will be used for response */
6165 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6166 /* store Params pass it to WDI */
6167 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006168
6169 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6170 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6171 */
6172 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6173 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6174 {
6175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006176 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006177 status = WDI_STATUS_E_NOT_ALLOWED;
6178 pAddBAReqParams->status =
6179 CONVERT_WDI2SIR_STATUS(status) ;
6180 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6181 /*Reset the WDA state to READY */
6182 pWDA->wdaState = WDA_READY_STATE;
6183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6184 vos_mem_free(pWdaParams);
6185
6186 return CONVERT_WDI2VOS_STATUS(status) ;
6187 }
6188
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6190 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 if(IS_WDI_STATUS_FAILURE(status))
6192 {
6193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006194 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006196 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006197 pAddBAReqParams->status =
6198 CONVERT_WDI2SIR_STATUS(status) ;
6199 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006200 /*Reset the WDA state to READY */
6201 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 vos_mem_free(pWdaParams);
6204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006206}
Jeff Johnson295189b2012-06-20 16:38:30 -07006207/*
6208 * FUNCTION: WDA_DelBANotifyTL
6209 * send DEL BA IND to TL
6210 */
6211void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6212 tDelBAParams *pDelBAReqParams)
6213{
6214 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6215 //tSirMsgQ msg;
6216 vos_msg_t vosMsg;
6217 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006218 if(NULL == pDelBAInd)
6219 {
6220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006222 VOS_ASSERT(0) ;
6223 return;
6224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006225 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6226 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6227 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6228 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006229
Jeff Johnson295189b2012-06-20 16:38:30 -07006230
6231 vosMsg.type = WDA_DELETEBA_IND;
6232 vosMsg.bodyptr = pDelBAInd;
6233 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6234 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6235 {
6236 vosStatus = VOS_STATUS_E_BADMSG;
6237 }
6238}
Jeff Johnson295189b2012-06-20 16:38:30 -07006239/*
6240 * FUNCTION: WDA_DelBAReqCallback
6241 * send DEL BA RSP back to PE
6242 */
6243void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6244{
6245 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6246 tWDA_CbContext *pWDA;
6247 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006249 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 if(NULL == pWdaParams)
6251 {
6252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006253 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 VOS_ASSERT(0) ;
6255 return ;
6256 }
6257 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6258 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 /* Notify TL about DEL BA in case of recipinet */
6260 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6261 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6262 {
6263 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006265 /*
6266 * No respone required for WDA_DELBA_IND so just free the request
6267 * param here
6268 */
6269 vos_mem_free(pDelBAReqParams);
6270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6271 vos_mem_free(pWdaParams);
6272 return ;
6273}
6274
Jeff Johnson295189b2012-06-20 16:38:30 -07006275/*
6276 * FUNCTION: WDA_ProcessDelBAReq
6277 * Request to WDI to Update the DELBA REQ params.
6278 */
6279VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6280 tDelBAParams *pDelBAReqParams)
6281{
6282 WDI_Status status = WDI_STATUS_SUCCESS ;
6283 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6284 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6285 sizeof(WDI_DelBAReqParamsType)) ;
6286 tWDA_ReqParams *pWdaParams ;
6287 tANI_U16 staIdx = 0;
6288 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006290 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 if(NULL == wdiDelBAReqParam)
6292 {
6293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006295 VOS_ASSERT(0);
6296 return VOS_STATUS_E_NOMEM;
6297 }
6298 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6299 if(NULL == pWdaParams)
6300 {
6301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 VOS_ASSERT(0);
6304 vos_mem_free(wdiDelBAReqParam);
6305 return VOS_STATUS_E_NOMEM;
6306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6308 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6309 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6310 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 pWdaParams->pWdaContext = pWDA;
6312 /* Store DEL BA pointer, as this will be used for response */
6313 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 /* store Params pass it to WDI */
6315 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6317 * maintained in WDA, so that WDA can retry for another BA session
6318 */
6319 staIdx = pDelBAReqParams->staIdx;
6320 tid = pDelBAReqParams->baTID;
6321 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 status = WDI_DelBAReq(wdiDelBAReqParam,
6323 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006324 if(IS_WDI_STATUS_FAILURE(status))
6325 {
6326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6327 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6329 vos_mem_free(pWdaParams->wdaMsgParam);
6330 vos_mem_free(pWdaParams);
6331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006333}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006334
6335/*
6336 * FUNCTION: WDA_UpdateChReqCallback
6337 *
6338 */
6339void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6340{
Siddharth Bhala006c122014-05-03 12:13:27 +05306341 tWDA_ReqParams *pWdaParams;
6342 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6343 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6344 WDI_UpdateChannelReqinfoType *pChanInfoType;
6345 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006346
6347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6348 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306349 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006350 {
6351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306352 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006353 VOS_ASSERT(0);
6354 return;
6355 }
6356
Siddharth Bhala006c122014-05-03 12:13:27 +05306357 pWdaParams = (tWDA_ReqParams *)pUserData;
6358 pwdiUpdateChReqParam =
6359 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6360 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6361 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6362 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006363 /*
6364 * currently there is no response message is expected between PE and
6365 * WDA, Failure return from WDI is a ASSERT condition
6366 */
6367 vos_mem_free(pChanInfoType);
6368 vos_mem_free(pChanList);
6369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6370 vos_mem_free(pWdaParams);
6371
6372 return;
6373}
6374
6375/*
6376 * FUNCTION: WDA_ProcessUpdateChannelList
6377 * Request to WDI to Update the ChannelList params.
6378 */
6379VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6380 tSirUpdateChanList *pChanList)
6381{
6382 WDI_Status status = WDI_STATUS_SUCCESS;
6383 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6384 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6385 WDI_UpdateChannelReqinfoType *pChanInfoType;
6386 tWDA_ReqParams *pWdaParams;
6387 wpt_uint8 i;
6388
6389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6390 "------> %s " ,__func__);
6391 if(NULL == pChanList)
6392 {
6393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6394 "%s: NULL pChanList", __func__);
6395 VOS_ASSERT(0);
6396 return VOS_STATUS_E_INVAL;
6397 }
6398
6399 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6400 {
6401 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6402 "Update channel list capability Not Supported");
6403 vos_mem_free(pChanList);
6404 return VOS_STATUS_E_INVAL;
6405 }
6406
6407 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6408 sizeof(WDI_UpdateChReqParamsType));
6409 if(NULL == pwdiUpdateChReqParam)
6410 {
6411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6412 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6413 __func__);
6414 VOS_ASSERT(0);
6415 vos_mem_free(pChanList);
6416 return VOS_STATUS_E_NOMEM;
6417 }
6418 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6419 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6420 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6421 pChanList->numChan);
6422 if(NULL == pChanInfoType)
6423 {
6424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6425 "%s: VOS MEM Alloc Failure", __func__);
6426 VOS_ASSERT(0);
6427 vos_mem_free(pChanList);
6428 vos_mem_free(pwdiUpdateChReqParam);
6429 return VOS_STATUS_E_NOMEM;
6430 }
6431 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6432 * pChanList->numChan);
6433 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6434
6435 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6436 if(NULL == pWdaParams)
6437 {
6438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6439 "%s: VOS MEM Alloc Failure", __func__);
6440 VOS_ASSERT(0);
6441 vos_mem_free(pChanList);
6442 vos_mem_free(pChanInfoType);
6443 vos_mem_free(pwdiUpdateChReqParam);
6444 return VOS_STATUS_E_NOMEM;
6445 }
6446 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6447
6448 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6449 {
6450 pChanInfoType->mhz =
6451 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6452
6453 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6454 pChanInfoType->band_center_freq2 = 0;
6455
6456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6457 "chan[%d] = %u", i, pChanInfoType->mhz);
6458 if (pChanList->chanParam[i].dfsSet)
6459 {
6460 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6462 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6463 pChanList->chanParam[i].dfsSet);
6464 }
6465
6466 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6467 {
6468 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6469 }
6470 else
6471 {
6472 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6473 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6474 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6475 }
6476
6477 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6478 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6479
6480 pChanInfoType++;
6481 }
6482
6483 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6484 pWdaParams->pWdaContext = pWDA;
6485 pWdaParams->wdaMsgParam = (void *)pChanList;
6486 /* store Params pass it to WDI */
6487 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6488 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6489 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6490 if(IS_WDI_STATUS_FAILURE(status))
6491 {
6492 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6493 "Failure in Update Channel REQ Params WDI API, free all the memory");
6494 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6495 vos_mem_free(pwdiUpdateChReqParam);
6496 vos_mem_free(pWdaParams->wdaMsgParam);
6497 vos_mem_free(pWdaParams);
6498 }
6499 return CONVERT_WDI2VOS_STATUS(status);
6500}
6501
Jeff Johnson295189b2012-06-20 16:38:30 -07006502/*
6503 * FUNCTION: WDA_AddTSReqCallback
6504 * send ADD TS RSP back to PE
6505 */
6506void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6507{
6508 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6509 tWDA_CbContext *pWDA;
6510 tAddTsParams *pAddTsReqParams;
6511
6512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006513 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 if(NULL == pWdaParams)
6515 {
6516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006517 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 VOS_ASSERT(0) ;
6519 return ;
6520 }
6521 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6522 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6524 vos_mem_free(pWdaParams);
6525
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006526 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006528 return ;
6529}
6530
Jeff Johnson295189b2012-06-20 16:38:30 -07006531/*
6532 * FUNCTION: WDA_ProcessAddTSReq
6533 * Request to WDI to Update the ADD TS REQ params.
6534 */
6535VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6536 tAddTsParams *pAddTsReqParams)
6537{
6538 WDI_Status status = WDI_STATUS_SUCCESS ;
6539 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6540 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6541 sizeof(WDI_AddTSReqParamsType)) ;
6542 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006544 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006545 if(NULL == wdiAddTSReqParam)
6546 {
6547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006548 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006549 VOS_ASSERT(0);
6550 return VOS_STATUS_E_NOMEM;
6551 }
6552 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6553 if(NULL == pWdaParams)
6554 {
6555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006556 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 VOS_ASSERT(0);
6558 vos_mem_free(wdiAddTSReqParam);
6559 return VOS_STATUS_E_NOMEM;
6560 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006561 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6562 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 //TS IE
6564 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6565 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6566 pAddTsReqParams->tspec.length;
6567
6568 //TS IE : TS INFO : TRAFFIC
6569 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6570 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6571 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6572 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6573 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6574 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6575 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6576 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6577 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6578 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6579 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6580 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6581 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6582 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6583 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6584 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6585
6586 //TS IE : TS INFO : SCHEDULE
6587 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6588 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6589 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6590 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 //TS IE
6592 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6593 pAddTsReqParams->tspec.nomMsduSz;
6594 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6595 pAddTsReqParams->tspec.maxMsduSz;
6596 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6597 pAddTsReqParams->tspec.minSvcInterval;
6598 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6599 pAddTsReqParams->tspec.maxSvcInterval;
6600 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6601 pAddTsReqParams->tspec.inactInterval;
6602 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6603 pAddTsReqParams->tspec.suspendInterval;
6604 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6605 pAddTsReqParams->tspec.svcStartTime;
6606 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6607 pAddTsReqParams->tspec.minDataRate;
6608 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6609 pAddTsReqParams->tspec.meanDataRate;
6610 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6611 pAddTsReqParams->tspec.peakDataRate;
6612 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6613 pAddTsReqParams->tspec.maxBurstSz;
6614 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6615 pAddTsReqParams->tspec.delayBound;
6616 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6617 pAddTsReqParams->tspec.minPhyRate;
6618 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6619 pAddTsReqParams->tspec.surplusBw;
6620 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6621 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006622 /* TODO: tAddTsParams doesn't have the following fields */
6623#if 0
6624 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6625 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6626 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6627 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6628#endif
6629 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6630
6631 pWdaParams->pWdaContext = pWDA;
6632 /* Store ADD TS pointer, as this will be used for response */
6633 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006634 /* store Params pass it to WDI */
6635 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 status = WDI_AddTSReq(wdiAddTSReqParam,
6637 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 if(IS_WDI_STATUS_FAILURE(status))
6639 {
6640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6641 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6643 vos_mem_free(pWdaParams);
6644 pAddTsReqParams->status = eSIR_FAILURE ;
6645 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006647 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006648}
6649
Jeff Johnson295189b2012-06-20 16:38:30 -07006650/*
6651 * FUNCTION: WDA_DelTSReqCallback
6652 * send DEL TS RSP back to PE
6653 */
6654void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6655{
6656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6660 vos_mem_free(pWdaParams->wdaMsgParam) ;
6661 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 /*
6663 * No respone required for WDA_DEL_TS_REQ so just free the request
6664 * param here
6665 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006666 return ;
6667}
6668
Jeff Johnson295189b2012-06-20 16:38:30 -07006669/*
6670 * FUNCTION: WDA_ProcessDelTSReq
6671 * Request to WDI to Update the DELTS REQ params.
6672 */
6673VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6674 tDelTsParams *pDelTSReqParams)
6675{
6676 WDI_Status status = WDI_STATUS_SUCCESS ;
6677 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6678 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6679 sizeof(WDI_DelTSReqParamsType)) ;
6680 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006682 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006683 if(NULL == wdiDelTSReqParam)
6684 {
6685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006687 VOS_ASSERT(0);
6688 return VOS_STATUS_E_NOMEM;
6689 }
6690 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6691 if(NULL == pWdaParams)
6692 {
6693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 VOS_ASSERT(0);
6696 vos_mem_free(wdiDelTSReqParam);
6697 return VOS_STATUS_E_NOMEM;
6698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6700 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6701 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6702 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6703 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 pWdaParams->pWdaContext = pWDA;
6705 /* Store DEL TS pointer, as this will be used for response */
6706 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 /* store Params pass it to WDI */
6708 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 status = WDI_DelTSReq(wdiDelTSReqParam,
6710 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 if(IS_WDI_STATUS_FAILURE(status))
6712 {
6713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6714 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6716 vos_mem_free(pWdaParams->wdaMsgParam);
6717 vos_mem_free(pWdaParams);
6718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006720}
Jeff Johnson295189b2012-06-20 16:38:30 -07006721/*
6722 * FUNCTION: WDA_UpdateBeaconParamsCallback
6723 * Free the memory. No need to send any response to PE in this case
6724 */
6725void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6726{
6727 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006729 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006730 if(NULL == pWdaParams)
6731 {
6732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006733 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006734 VOS_ASSERT(0) ;
6735 return ;
6736 }
6737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6738 vos_mem_free(pWdaParams->wdaMsgParam) ;
6739 vos_mem_free(pWdaParams);
6740 /*
6741 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6742 * param here
6743 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 return ;
6745}
Jeff Johnson295189b2012-06-20 16:38:30 -07006746/*
6747 * FUNCTION: WDA_ProcessUpdateBeaconParams
6748 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6749 */
6750VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6751 tUpdateBeaconParams *pUpdateBeaconParams)
6752{
6753 WDI_Status status = WDI_STATUS_SUCCESS ;
6754 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6755 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6756 sizeof(WDI_UpdateBeaconParamsType)) ;
6757 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006759 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 if(NULL == wdiUpdateBeaconParams)
6761 {
6762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006764 VOS_ASSERT(0);
6765 return VOS_STATUS_E_NOMEM;
6766 }
6767 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6768 if(NULL == pWdaParams)
6769 {
6770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 VOS_ASSERT(0);
6773 vos_mem_free(wdiUpdateBeaconParams);
6774 return VOS_STATUS_E_NOMEM;
6775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6777 pUpdateBeaconParams->bssIdx;
6778 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6779 pUpdateBeaconParams->fShortPreamble;
6780 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6781 pUpdateBeaconParams->fShortSlotTime;
6782 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6783 pUpdateBeaconParams->beaconInterval;
6784 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6785 pUpdateBeaconParams->llaCoexist;
6786 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6787 pUpdateBeaconParams->llbCoexist;
6788 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6789 pUpdateBeaconParams->llgCoexist;
6790 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6791 pUpdateBeaconParams->ht20MhzCoexist;
6792 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6793 pUpdateBeaconParams->llnNonGFCoexist;
6794 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6795 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6796 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6797 pUpdateBeaconParams->fRIFSMode;
6798 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6799 pUpdateBeaconParams->paramChangeBitmap;
6800 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6801
6802 pWdaParams->pWdaContext = pWDA;
6803 /* Store UpdateBeacon Req pointer, as this will be used for response */
6804 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006805 /* store Params pass it to WDI */
6806 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6808 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6809 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 if(IS_WDI_STATUS_FAILURE(status))
6811 {
6812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6813 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6815 vos_mem_free(pWdaParams->wdaMsgParam);
6816 vos_mem_free(pWdaParams);
6817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006819}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006820#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006821/*
6822 * FUNCTION: WDA_TSMStatsReqCallback
6823 * send TSM Stats RSP back to PE
6824 */
6825void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6826{
6827 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6828 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006829 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6830 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006831
6832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006833 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 if(NULL == pWdaParams)
6835 {
6836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006837 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 VOS_ASSERT(0) ;
6839 return ;
6840 }
6841 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006842 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6843
6844 if(NULL == pGetTsmStatsReqParams)
6845 {
6846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6847 "%s: pGetTsmStatsReqParams received NULL", __func__);
6848 VOS_ASSERT(0);
6849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6850 vos_mem_free(pWdaParams);
6851 return;
6852 }
6853
6854 pTsmRspParams =
6855 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 if( NULL == pTsmRspParams )
6857 {
6858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006859 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 VOS_ASSERT( 0 );
6861 return ;
6862 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006863 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6864 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6865 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6866
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6868 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6869 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6870 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6871 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6872 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6873 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6874 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6875 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6876 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006877
6878 /* Assign get tsm stats req req (backup) in to the response */
6879 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6880
6881 /* free WDI command buffer */
6882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6883 vos_mem_free(pWdaParams);
6884
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006886 return ;
6887}
6888
6889
Jeff Johnson295189b2012-06-20 16:38:30 -07006890/*
6891 * FUNCTION: WDA_ProcessTsmStatsReq
6892 * Request to WDI to get the TSM Stats params.
6893 */
6894VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006895 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006896{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006897 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006899 tWDA_ReqParams *pWdaParams = NULL;
6900 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6901
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006903 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6905 sizeof(WDI_TSMStatsReqParamsType));
6906 if(NULL == wdiTSMReqParam)
6907 {
6908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006910 VOS_ASSERT(0);
6911 return VOS_STATUS_E_NOMEM;
6912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6914 if(NULL == pWdaParams)
6915 {
6916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006917 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 VOS_ASSERT(0);
6919 vos_mem_free(wdiTSMReqParam);
6920 return VOS_STATUS_E_NOMEM;
6921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6923 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6924 pTsmStats->bssId,
6925 sizeof(wpt_macAddr));
6926 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6927
6928 pWdaParams->pWdaContext = pWDA;
6929 /* Store TSM Stats pointer, as this will be used for response */
6930 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006931 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 status = WDI_TSMStatsReq(wdiTSMReqParam,
6933 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006934 if(IS_WDI_STATUS_FAILURE(status))
6935 {
6936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6937 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006938 vos_mem_free(pWdaParams);
6939
6940 pGetTsmStatsRspParams =
6941 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6942 if(NULL == pGetTsmStatsRspParams)
6943 {
6944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6945 "%s: VOS MEM Alloc Failure", __func__);
6946 VOS_ASSERT(0);
6947 vos_mem_free(pTsmStats);
6948 return VOS_STATUS_E_NOMEM;
6949 }
6950 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6951 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6952 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6953
6954 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 return CONVERT_WDI2VOS_STATUS(status) ;
6957}
6958#endif
6959/*
6960 * FUNCTION: WDA_SendBeaconParamsCallback
6961 * No need to send any response to PE in this case
6962 */
6963void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6964{
6965
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006967 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006968 return ;
6969}
Jeff Johnson295189b2012-06-20 16:38:30 -07006970/*
6971 * FUNCTION: WDA_ProcessSendBeacon
6972 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6973 * start beacon trasmission
6974 */
6975VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6976 tSendbeaconParams *pSendbeaconParams)
6977{
6978 WDI_Status status = WDI_STATUS_SUCCESS ;
6979 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006981 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006982 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6983 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6984 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6985 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6987 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306988 /* p2pIeOffset should be atleast greater than timIeOffset */
6989 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6990 (pSendbeaconParams->p2pIeOffset <
6991 pSendbeaconParams->timIeOffset))
6992 {
6993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6994 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6995 VOS_ASSERT( 0 );
6996 return WDI_STATUS_E_FAILURE;
6997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6999 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 /* Copy the beacon template to local buffer */
7001 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7002 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7003 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7004
Jeff Johnson295189b2012-06-20 16:38:30 -07007005 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7006 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 if(IS_WDI_STATUS_FAILURE(status))
7008 {
7009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7010 "Failure in SEND BEACON REQ Params WDI API" );
7011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 vos_mem_free(pSendbeaconParams);
7013 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007014}
Jeff Johnson295189b2012-06-20 16:38:30 -07007015/*
7016 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7017 * No need to send any response to PE in this case
7018 */
7019void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7020{
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007022 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 return ;
7024}
7025
Jeff Johnson295189b2012-06-20 16:38:30 -07007026/*
7027 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7028 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7029 * send probe response
7030 */
7031VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7032 tSendProbeRespParams *pSendProbeRspParams)
7033{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007034 WDI_Status status = WDI_STATUS_SUCCESS;
7035 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7036 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007038 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007039
7040 if (!wdiSendProbeRspParam)
7041 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7042
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007044 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007046 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007048 /* Copy the Probe Response template to local buffer */
7049 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007050 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 pSendProbeRspParams->pProbeRespTemplate,
7052 pSendProbeRspParams->probeRespTemplateLen);
7053 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007054 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7056 WDI_PROBE_REQ_BITMAP_IE_LEN);
7057
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007058 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007059
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007060 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007062 if(IS_WDI_STATUS_FAILURE(status))
7063 {
7064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7065 "Failure in SEND Probe RSP Params WDI API" );
7066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007068 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007070}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007071#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007072/*
7073 * FUNCTION: WDA_SetMaxTxPowerCallBack
7074 * send the response to PE with power value received from WDI
7075 */
7076void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7077 void* pUserData)
7078{
7079 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7080 tWDA_CbContext *pWDA = NULL;
7081 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7082
7083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007084 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007085 if(NULL == pWdaParams)
7086 {
7087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007088 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007089 VOS_ASSERT(0) ;
7090 return ;
7091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7093 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 if( NULL == pMaxTxPowerParams )
7095 {
7096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007097 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007098 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7100 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 return ;
7102 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007103
Jeff Johnson295189b2012-06-20 16:38:30 -07007104
7105 /*need to free memory for the pointers used in the
7106 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7108 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007110
Jeff Johnson295189b2012-06-20 16:38:30 -07007111
7112 /* send response to UMAC*/
7113 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7114
7115 return;
7116}
Jeff Johnson295189b2012-06-20 16:38:30 -07007117/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007118 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007119 * Request to WDI to send set Max Tx Power Request
7120 */
7121 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7122 tMaxTxPowerParams *MaxTxPowerParams)
7123{
7124 WDI_Status status = WDI_STATUS_SUCCESS;
7125 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7126 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007127
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007129 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007130
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7132 sizeof(WDI_SetMaxTxPowerParamsType));
7133 if(NULL == wdiSetMaxTxPowerParams)
7134 {
7135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 VOS_ASSERT(0);
7138 return VOS_STATUS_E_NOMEM;
7139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7141 if(NULL == pWdaParams)
7142 {
7143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007145 vos_mem_free(wdiSetMaxTxPowerParams);
7146 VOS_ASSERT(0);
7147 return VOS_STATUS_E_NOMEM;
7148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 /* Copy.Max.Tx.Power Params to WDI structure */
7150 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7151 MaxTxPowerParams->bssId,
7152 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7154 MaxTxPowerParams->selfStaMacAddr,
7155 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7157 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 pWdaParams->pWdaContext = pWDA;
7160 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 /* store Params pass it to WDI */
7162 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7164 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 if(IS_WDI_STATUS_FAILURE(status))
7166 {
7167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7168 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7170 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007171 /* send response to UMAC*/
7172 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 }
7174 return CONVERT_WDI2VOS_STATUS(status);
7175
7176}
Jeff Johnson295189b2012-06-20 16:38:30 -07007177#endif
schang86c22c42013-03-13 18:41:24 -07007178
7179/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007180 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7181 * send the response to PE with power value received from WDI
7182 */
7183void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7184 *pwdiSetMaxTxPowerPerBandRsp,
7185 void* pUserData)
7186{
7187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7188 tWDA_CbContext *pWDA = NULL;
7189 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7190
7191 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7192 "<------ %s ", __func__);
7193 if (NULL == pWdaParams)
7194 {
7195 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7196 "%s: pWdaParams received NULL", __func__);
7197 VOS_ASSERT(0);
7198 return ;
7199 }
7200 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7201 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7202 if ( NULL == pMxTxPwrPerBandParams )
7203 {
7204 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7205 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7206 VOS_ASSERT(0);
7207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7208 vos_mem_free(pWdaParams);
7209 return;
7210 }
7211
7212 /*need to free memory for the pointers used in the
7213 WDA Process.Set Max Tx Power Req function*/
7214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7215 vos_mem_free(pWdaParams);
7216 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7217
7218 /* send response to UMAC*/
7219 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7220 pMxTxPwrPerBandParams, 0);
7221
7222 return;
7223}
7224
7225/*
7226 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7227 * Request to WDI to send set Max Tx Power Per band Request
7228 */
7229 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7230 tMaxTxPowerPerBandParams
7231 *MaxTxPowerPerBandParams)
7232{
7233 WDI_Status status = WDI_STATUS_SUCCESS;
7234 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7235 tWDA_ReqParams *pWdaParams = NULL;
7236
7237 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7238 "------> %s ", __func__);
7239
7240 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7241 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7242
7243 if (NULL == wdiSetMxTxPwrPerBandParams)
7244 {
7245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7246 "%s: VOS MEM Alloc Failure", __func__);
7247 VOS_ASSERT(0);
7248 return VOS_STATUS_E_NOMEM;
7249 }
7250 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7251 if (NULL == pWdaParams)
7252 {
7253 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7254 "%s: VOS MEM Alloc Failure", __func__);
7255 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7256 VOS_ASSERT(0);
7257 return VOS_STATUS_E_NOMEM;
7258 }
7259 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7260 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7261 MaxTxPowerPerBandParams->bandInfo;
7262 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7263 MaxTxPowerPerBandParams->power;
7264 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7265 pWdaParams->pWdaContext = pWDA;
7266 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7267 /* store Params pass it to WDI */
7268 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7269 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7270 WDA_SetMaxTxPowerPerBandCallBack,
7271 pWdaParams);
7272 if (IS_WDI_STATUS_FAILURE(status))
7273 {
7274 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7275 "Failure in SET MAX TX Power REQ Params WDI API,"
7276 " free all the memory");
7277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7278 vos_mem_free(pWdaParams);
7279 /* send response to UMAC*/
7280 WDA_SendMsg(pWDA,
7281 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7282 MaxTxPowerPerBandParams, 0);
7283 }
7284 return CONVERT_WDI2VOS_STATUS(status);
7285}
7286
7287/*
schang86c22c42013-03-13 18:41:24 -07007288 * FUNCTION: WDA_SetTxPowerCallBack
7289 * send the response to PE with power value received from WDI
7290 */
7291void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7292 void* pUserData)
7293{
7294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7295 tWDA_CbContext *pWDA = NULL;
7296 tSirSetTxPowerReq *pTxPowerParams = NULL;
7297
7298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7299 "<------ %s ", __func__);
7300 if(NULL == pWdaParams)
7301 {
7302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7303 "%s: pWdaParams received NULL", __func__);
7304 VOS_ASSERT(0) ;
7305 return ;
7306 }
7307 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7308 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7309 if(NULL == pTxPowerParams)
7310 {
7311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7312 "%s: pTxPowerParams received NULL " ,__func__);
7313 VOS_ASSERT(0);
7314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7315 vos_mem_free(pWdaParams);
7316 return ;
7317 }
7318
7319 /*need to free memory for the pointers used in the
7320 WDA Process.Set Max Tx Power Req function*/
7321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7322 vos_mem_free(pWdaParams);
7323
7324 /* send response to UMAC*/
7325 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7326 return;
7327}
7328
7329/*
7330 * FUNCTION: WDA_ProcessSetTxPowerReq
7331 * Request to WDI to send set Tx Power Request
7332 */
7333 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7334 tSirSetTxPowerReq *txPowerParams)
7335{
7336 WDI_Status status = WDI_STATUS_SUCCESS;
7337 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7338 tWDA_ReqParams *pWdaParams = NULL;
7339
7340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7341 "------> %s ", __func__);
7342
7343 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7344 sizeof(WDI_SetTxPowerParamsType));
7345 if(NULL == wdiSetTxPowerParams)
7346 {
7347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7348 "%s: VOS MEM Alloc Failure", __func__);
7349 VOS_ASSERT(0);
7350 return VOS_STATUS_E_NOMEM;
7351 }
7352 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7353 if(NULL == pWdaParams)
7354 {
7355 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7356 "%s: VOS MEM Alloc Failure", __func__);
7357 vos_mem_free(wdiSetTxPowerParams);
7358 VOS_ASSERT(0);
7359 return VOS_STATUS_E_NOMEM;
7360 }
7361 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7362 txPowerParams->bssIdx;
7363 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7364 txPowerParams->mwPower;
7365 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7366 pWdaParams->pWdaContext = pWDA;
7367 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7368 /* store Params pass it to WDI */
7369 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7370 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7371 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7372 if(IS_WDI_STATUS_FAILURE(status))
7373 {
7374 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7375 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7377 vos_mem_free(pWdaParams);
7378 /* send response to UMAC*/
7379 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7380 }
7381 return CONVERT_WDI2VOS_STATUS(status);
7382}
7383
Jeff Johnson295189b2012-06-20 16:38:30 -07007384/*
7385 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7386 * Free the memory. No need to send any response to PE in this case
7387 */
7388void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7389{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007390 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7391
Jeff Johnson295189b2012-06-20 16:38:30 -07007392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007393 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007394
7395 if(NULL == pWdaParams)
7396 {
7397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007398 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007399 VOS_ASSERT(0) ;
7400 return ;
7401 }
7402
7403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7404 vos_mem_free(pWdaParams->wdaMsgParam) ;
7405 vos_mem_free(pWdaParams);
7406
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 /*
7408 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7409 * so just free the request param here
7410 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 return ;
7412}
7413
Jeff Johnson295189b2012-06-20 16:38:30 -07007414/*
7415 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7416 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7417 */
7418VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7419 tP2pPsParams *pP2pPsConfigParams)
7420{
7421 WDI_Status status = WDI_STATUS_SUCCESS ;
7422 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7423 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7424 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007425 tWDA_ReqParams *pWdaParams = NULL;
7426
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007428 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 if(NULL == wdiSetP2PGONOAReqParam)
7430 {
7431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007432 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007433 VOS_ASSERT(0);
7434 return VOS_STATUS_E_NOMEM;
7435 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007436
7437 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7438 if(NULL == pWdaParams)
7439 {
7440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007441 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007442 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007443 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007444 VOS_ASSERT(0);
7445 return VOS_STATUS_E_NOMEM;
7446 }
7447
Jeff Johnson295189b2012-06-20 16:38:30 -07007448 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7449 pP2pPsConfigParams->opp_ps;
7450 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7451 pP2pPsConfigParams->ctWindow;
7452 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7453 pP2pPsConfigParams->count;
7454 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7455 pP2pPsConfigParams->duration;
7456 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7457 pP2pPsConfigParams->interval;
7458 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7459 pP2pPsConfigParams->single_noa_duration;
7460 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7461 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007462
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7464 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007465 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7466
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007468 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7469 pWdaParams->pWdaContext = pWDA;
7470
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007472 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7473
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 if(IS_WDI_STATUS_FAILURE(status))
7475 {
7476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7477 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7479 vos_mem_free(pWdaParams->wdaMsgParam);
7480 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 return CONVERT_WDI2VOS_STATUS(status);
7483
Jeff Johnson295189b2012-06-20 16:38:30 -07007484}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307485
7486#ifdef FEATURE_WLAN_TDLS
7487/*
7488 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7489 * Free the memory. No need to send any response to PE in this case
7490 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307491void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7492 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307493{
7494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7495 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307496 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307497
7498
7499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7500 "<------ %s " ,__func__);
7501 if(NULL == pWdaParams)
7502 {
7503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7504 "%s: pWdaParams received NULL", __func__);
7505 VOS_ASSERT(0) ;
7506 return ;
7507 }
7508 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7509
7510 if(NULL == pWdaParams)
7511 {
7512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7513 "%s: pWdaParams received NULL", __func__);
7514 VOS_ASSERT(0) ;
7515 return ;
7516 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307517 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7518 if( NULL == pTdlsLinkEstablishParams )
7519 {
7520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7521 "%s: pTdlsLinkEstablishParams "
7522 "received NULL " ,__func__);
7523 VOS_ASSERT(0);
7524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7525 vos_mem_free(pWdaParams);
7526 return ;
7527 }
7528 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7529 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307531 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307532 /* send response to UMAC*/
7533 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7534
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307535 return ;
7536}
7537
7538VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7539 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7540{
7541 WDI_Status status = WDI_STATUS_SUCCESS ;
7542 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7543 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7544 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7545 tWDA_ReqParams *pWdaParams = NULL;
7546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7547 "------> %s " ,__func__);
7548 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7549 {
7550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7551 "%s: VOS MEM Alloc Failure", __func__);
7552 VOS_ASSERT(0);
7553 return VOS_STATUS_E_NOMEM;
7554 }
7555 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7556 if(NULL == pWdaParams)
7557 {
7558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7559 "%s: VOS MEM Alloc Failure", __func__);
7560 vos_mem_free(pTdlsLinkEstablishParams);
7561 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7562 VOS_ASSERT(0);
7563 return VOS_STATUS_E_NOMEM;
7564 }
7565 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307566 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307567 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307568 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307569 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307570 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307571 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307572 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307573 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307574 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307575 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7576 pTdlsLinkEstablishParams->isOffChannelSupported;
7577
7578 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7579 pTdlsLinkEstablishParams->validChannels,
7580 pTdlsLinkEstablishParams->validChannelsLen);
7581
7582 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7583 pTdlsLinkEstablishParams->validChannelsLen;
7584
7585 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7586 pTdlsLinkEstablishParams->validOperClasses,
7587 pTdlsLinkEstablishParams->validOperClassesLen);
7588 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7589 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307590
7591 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7592 /* Store msg pointer from PE, as this will be used for response */
7593 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7594 /* store Params pass it to WDI */
7595 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7596 pWdaParams->pWdaContext = pWDA;
7597
7598 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7599 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7600 WDA_SetTDLSLinkEstablishReqParamsCallback,
7601 pWdaParams);
7602 if(IS_WDI_STATUS_FAILURE(status))
7603 {
7604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7605 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7607 vos_mem_free(pWdaParams->wdaMsgParam);
7608 vos_mem_free(pWdaParams);
7609 }
7610 return CONVERT_WDI2VOS_STATUS(status);
7611}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307612
7613// tdlsoffchan
7614void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7615 void* pUserData)
7616{
7617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7618 tWDA_CbContext *pWDA = NULL;
7619 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7620
7621
7622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7623 "<------ %s " ,__func__);
7624 if(NULL == pWdaParams)
7625 {
7626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7627 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307628 VOS_ASSERT(0) ;
7629 return ;
7630 }
7631 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7632
Atul Mittal60bd4292014-08-14 12:19:27 +05307633 if(NULL == pWdaParams)
7634 {
7635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7636 "%s: pWdaParams received NULL", __func__);
7637 VOS_ASSERT(0) ;
7638 return ;
7639 }
Atul Mittalc0f739f2014-07-31 13:47:47 +05307640 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307641 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307642 {
7643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7644 "%s: pTdlsChanSwitchParams "
7645 "received NULL " ,__func__);
7646 VOS_ASSERT(0);
7647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7648 vos_mem_free(pWdaParams);
7649 return ;
7650 }
7651 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7652 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7654 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307655 /* send response to UMAC*/
7656 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307657
7658 return ;
7659}
7660VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7661 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7662{
7663 WDI_Status status = WDI_STATUS_SUCCESS ;
7664 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7665 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7666 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7667 tWDA_ReqParams *pWdaParams = NULL;
7668
7669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7670 "Enter: %s ",__func__);
7671 if(NULL == wdiSetTDLSChanSwitchReqParam)
7672 {
7673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7674 "%s: VOS MEM Alloc Failure", __func__);
7675 VOS_ASSERT(0);
7676 return VOS_STATUS_E_NOMEM;
7677 }
7678
7679 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7680 if(NULL == pWdaParams)
7681 {
7682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7683 "%s: VOS MEM Alloc Failure", __func__);
7684 vos_mem_free(pTdlsChanSwitchParams);
7685 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7686 VOS_ASSERT(0);
7687 return VOS_STATUS_E_NOMEM;
7688 }
7689 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7690 pTdlsChanSwitchParams->staIdx;
7691 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7692 pTdlsChanSwitchParams->tdlsSwMode;
7693 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7694 pTdlsChanSwitchParams->operClass;
7695 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7696 pTdlsChanSwitchParams->tdlsOffCh;
7697 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7698 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7699
7700
7701 /* Store msg pointer from PE, as this will be used for response */
7702 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7703 /* store Params pass it to WDI */
7704 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7705 pWdaParams->pWdaContext = pWDA;
7706 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7707 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7708 WDA_SetTDLSChanSwitchReqParamsCallback,
7709 pWdaParams);
7710 if(IS_WDI_STATUS_FAILURE(status))
7711 {
7712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7713 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7715 vos_mem_free(pWdaParams->wdaMsgParam);
7716 vos_mem_free(pWdaParams);
7717 }
7718 return CONVERT_WDI2VOS_STATUS(status);
7719}
7720#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307721
7722
Jeff Johnson295189b2012-06-20 16:38:30 -07007723#ifdef WLAN_FEATURE_VOWIFI_11R
7724/*
7725 * FUNCTION: WDA_AggrAddTSReqCallback
7726 * send ADD AGGREGATED TS RSP back to PE
7727 */
7728void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7729{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7731 tWDA_CbContext *pWDA;
7732 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007733 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007735 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007736 if(NULL == pWdaParams)
7737 {
7738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007739 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007740 VOS_ASSERT(0) ;
7741 return ;
7742 }
7743
7744 pWDA = pWdaParams->pWdaContext;
7745 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007746
7747 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7748 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007749 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007752
7753 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7754 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007755 return ;
7756}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007757/*
7758 * FUNCTION: WDA_ProcessAddTSReq
7759 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7760 */
7761VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7762 tAggrAddTsParams *pAggrAddTsReqParams)
7763{
7764 WDI_Status status = WDI_STATUS_SUCCESS ;
7765 int i;
7766 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007767 tWDA_ReqParams *pWdaParams = NULL;
7768
7769
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007771 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7773 sizeof(WDI_AggrAddTSReqParamsType)) ;
7774 if(NULL == wdiAggrAddTSReqParam)
7775 {
7776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007777 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 VOS_ASSERT(0);
7779 return VOS_STATUS_E_NOMEM;
7780 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007781
7782
7783 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7784 if(NULL == pWdaParams)
7785 {
7786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007787 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007788 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007789 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007790 VOS_ASSERT(0);
7791 return VOS_STATUS_E_NOMEM;
7792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7794 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7795 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7797 {
7798 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7799 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7800 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7802 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7803 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7804 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7805 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7806 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7807 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7808 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7809 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7810 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7811 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7812 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7813 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7814 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7815 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7816 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7818 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7820 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7821 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7822 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7823 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7824 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7825 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7826 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7827 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7828 pAggrAddTsReqParams->tspec[i].inactInterval;
7829 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7830 pAggrAddTsReqParams->tspec[i].suspendInterval;
7831 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7832 pAggrAddTsReqParams->tspec[i].svcStartTime;
7833 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7834 pAggrAddTsReqParams->tspec[i].minDataRate;
7835 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7836 pAggrAddTsReqParams->tspec[i].meanDataRate;
7837 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7838 pAggrAddTsReqParams->tspec[i].peakDataRate;
7839 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7840 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7841 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7842 pAggrAddTsReqParams->tspec[i].delayBound;
7843 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7844 pAggrAddTsReqParams->tspec[i].minPhyRate;
7845 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7846 pAggrAddTsReqParams->tspec[i].surplusBw;
7847 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7848 pAggrAddTsReqParams->tspec[i].mediumTime;
7849 }
7850
7851 /* TODO: tAggrAddTsParams doesn't have the following fields */
7852#if 0
7853 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7854 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7855 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7856 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7857#endif
7858 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7859
7860 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007861 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007862 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007863 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7864
7865 pWdaParams->pWdaContext = pWDA;
7866
Jeff Johnson295189b2012-06-20 16:38:30 -07007867 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007868 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7869
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 if(IS_WDI_STATUS_FAILURE(status))
7871 {
7872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7873 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7875 vos_mem_free(pWdaParams);
7876
7877 /* send the failure response back to PE*/
7878 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7879 {
7880 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7881 }
7882
7883 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7884 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007886 return CONVERT_WDI2VOS_STATUS(status) ;
7887}
7888#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007889/*
Mihir Shetea4306052014-03-25 00:02:54 +05307890 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 * send Enter IMPS RSP back to PE
7892 */
Mihir Shetea4306052014-03-25 00:02:54 +05307893void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007894{
Mihir Shetea4306052014-03-25 00:02:54 +05307895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7896 tWDA_CbContext *pWDA;
7897
Jeff Johnson295189b2012-06-20 16:38:30 -07007898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307899 "<------ %s status=%d" ,__func__,status);
7900 if(NULL == pWdaParams)
7901 {
7902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7903 "%s: pWdaParams received NULL", __func__);
7904 VOS_ASSERT(0);
7905 return;
7906 }
7907
7908 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7909
7910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7911 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007912 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 return ;
7914}
Mihir Shetea4306052014-03-25 00:02:54 +05307915
7916
7917/*
7918 * FUNCTION: WDA_EnterImpsReqCallback
7919 * Free memory and send Enter IMPS RSP back to PE.
7920 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7921 */
7922void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7923{
7924 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7925 tWDA_CbContext *pWDA;
7926
7927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7928 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7929
7930 if(NULL == pWdaParams)
7931 {
7932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7933 "%s: pWdaParams received NULL", __func__);
7934 VOS_ASSERT(0);
7935 return;
7936 }
7937
7938 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7939
7940 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7941 {
7942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7943 vos_mem_free(pWdaParams);
7944 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7945 CONVERT_WDI2SIR_STATUS(wdiStatus));
7946 }
7947
7948 return;
7949}
Jeff Johnson295189b2012-06-20 16:38:30 -07007950/*
7951 * FUNCTION: WDA_ProcessEnterImpsReq
7952 * Request to WDI to Enter IMPS power state.
7953 */
7954VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7955{
7956 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307957 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7958 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007960 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307961
7962
7963 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7964 if (NULL == wdiEnterImpsReqParams)
7965 {
7966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7967 "%s: VOS MEM Alloc Failure", __func__);
7968 VOS_ASSERT(0);
7969 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7970 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7971 return VOS_STATUS_E_NOMEM;
7972 }
7973
7974 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7975 if (NULL == pWdaParams)
7976 {
7977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7978 "%s: VOS MEM Alloc Failure", __func__);
7979 VOS_ASSERT(0);
7980 vos_mem_free(wdiEnterImpsReqParams);
7981 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7982 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7983 return VOS_STATUS_E_NOMEM;
7984 }
7985
7986 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7987 wdiEnterImpsReqParams->pUserData = pWdaParams;
7988
7989 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7990 pWdaParams->wdaMsgParam = NULL;
7991 pWdaParams->pWdaContext = pWDA;
7992
7993 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7994 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7995 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 if(IS_WDI_STATUS_FAILURE(status))
7997 {
7998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7999 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308000 vos_mem_free(wdiEnterImpsReqParams);
8001 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008002 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008004 return CONVERT_WDI2VOS_STATUS(status) ;
8005}
Jeff Johnson295189b2012-06-20 16:38:30 -07008006/*
8007 * FUNCTION: WDA_ExitImpsReqCallback
8008 * send Exit IMPS RSP back to PE
8009 */
8010void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8011{
8012 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008014 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008015 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 return ;
8017}
Jeff Johnson295189b2012-06-20 16:38:30 -07008018/*
8019 * FUNCTION: WDA_ProcessExitImpsReq
8020 * Request to WDI to Exit IMPS power state.
8021 */
8022VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8023{
8024 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008026 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 if(IS_WDI_STATUS_FAILURE(status))
8029 {
c_hpothue80fad42014-11-10 16:53:39 +05308030 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8031 {
8032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8033 FL("reload wlan driver"));
8034 wpalWlanReload();
8035 }
8036 else
8037 {
8038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 "Failure in Exit IMPS REQ WDI API, free all the memory " );
c_hpothue80fad42014-11-10 16:53:39 +05308040 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
8041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008043 return CONVERT_WDI2VOS_STATUS(status) ;
8044}
Jeff Johnson295189b2012-06-20 16:38:30 -07008045/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008046 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008047 * send Enter BMPS RSP back to PE
8048 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008049void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008050{
8051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8052 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008053 tEnterBmpsParams *pEnterBmpsRspParams;
8054
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008056 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008057 if(NULL == pWdaParams)
8058 {
8059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008060 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 VOS_ASSERT(0) ;
8062 return ;
8063 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008064
8065 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8066 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8067
8068 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008069 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008070
8071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008072 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008073 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8074
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 return ;
8076}
Jeff Johnson295189b2012-06-20 16:38:30 -07008077/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008078 * FUNCTION: WDA_EnterBmpsReqCallback
8079 * Free memory and send Enter BMPS RSP back to PE.
8080 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8081 */
8082void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8083{
8084 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8085 tWDA_CbContext *pWDA;
8086 tEnterBmpsParams *pEnterBmpsRspParams;
8087
8088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8089 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8090
8091 if(NULL == pWdaParams)
8092 {
8093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8094 "%s: pWdaParams received NULL", __func__);
8095 VOS_ASSERT(0);
8096 return;
8097 }
8098
8099 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8100 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8101 pEnterBmpsRspParams->status = wdiStatus;
8102
8103 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8104 {
8105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8106 vos_mem_free(pWdaParams);
8107 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8108 }
8109
8110 return;
8111}
8112/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008113 * FUNCTION: WDA_ProcessEnterBmpsReq
8114 * Request to WDI to Enter BMPS power state.
8115 */
8116VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8117 tEnterBmpsParams *pEnterBmpsReqParams)
8118{
8119 WDI_Status status = WDI_STATUS_SUCCESS;
8120 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8121 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008123 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008124 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8125 {
8126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008127 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 VOS_ASSERT(0);
8129 return VOS_STATUS_E_FAILURE;
8130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008131 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8132 if (NULL == wdiEnterBmpsReqParams)
8133 {
8134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008136 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008137 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8138 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 return VOS_STATUS_E_NOMEM;
8140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8142 if (NULL == pWdaParams)
8143 {
8144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 VOS_ASSERT(0);
8147 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008148 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8149 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 return VOS_STATUS_E_NOMEM;
8151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008152 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8153 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8154 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8155 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008156 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008157 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8158 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8159 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008160 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8161 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008162
Jeff Johnson295189b2012-06-20 16:38:30 -07008163 /* Store param pointer as passed in by caller */
8164 /* store Params pass it to WDI */
8165 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008166 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008167 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008169 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 if (IS_WDI_STATUS_FAILURE(status))
8171 {
8172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8173 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008175 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008177 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008179 return CONVERT_WDI2VOS_STATUS(status);
8180}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008181
8182
8183static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8184 WDI_Status wdiStatus,
8185 tExitBmpsParams *pExitBmpsReqParams)
8186{
8187 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8188
8189 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8190}
8191
8192
Jeff Johnson295189b2012-06-20 16:38:30 -07008193/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008194 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008195 * send Exit BMPS RSP back to PE
8196 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008197void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008198{
8199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8200 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008201 tExitBmpsParams *pExitBmpsRspParams;
8202
Jeff Johnson295189b2012-06-20 16:38:30 -07008203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008204 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008205 if(NULL == pWdaParams)
8206 {
8207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008208 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 VOS_ASSERT(0) ;
8210 return ;
8211 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008212
8213 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8214 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8215
8216 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008217 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008218
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8220 vos_mem_free(pWdaParams) ;
8221
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008222 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008223 return ;
8224}
Jeff Johnson295189b2012-06-20 16:38:30 -07008225/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008226 * FUNCTION: WDA_ExitBmpsReqCallback
8227 * Free memory and send Exit BMPS RSP back to PE.
8228 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8229 */
8230void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8231{
8232 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8233 tWDA_CbContext *pWDA;
8234 tExitBmpsParams *pExitBmpsRspParams;
8235
8236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8237 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8238
8239 if(NULL == pWdaParams)
8240 {
8241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8242 "%s: pWdaParams received NULL", __func__);
8243 VOS_ASSERT(0);
8244 return;
8245 }
8246
8247 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8248 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8249 pExitBmpsRspParams->status = wdiStatus;
8250
8251 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8252 {
8253 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8254 vos_mem_free(pWdaParams);
8255 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8256 }
8257
8258 return;
8259}
8260/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 * FUNCTION: WDA_ProcessExitBmpsReq
8262 * Request to WDI to Exit BMPS power state.
8263 */
8264VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8265 tExitBmpsParams *pExitBmpsReqParams)
8266{
8267 WDI_Status status = WDI_STATUS_SUCCESS ;
8268 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8269 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8270 sizeof(WDI_ExitBmpsReqParamsType)) ;
8271 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008273 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008274 if(NULL == wdiExitBmpsReqParams)
8275 {
8276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008278 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008279 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 return VOS_STATUS_E_NOMEM;
8281 }
8282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8283 if(NULL == pWdaParams)
8284 {
8285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 VOS_ASSERT(0);
8288 vos_mem_free(wdiExitBmpsReqParams);
8289 return VOS_STATUS_E_NOMEM;
8290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008292
8293 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8294
Yue Ma7f44bbe2013-04-12 11:47:39 -07008295 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8296 wdiExitBmpsReqParams->pUserData = pWdaParams;
8297
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 /* Store param pointer as passed in by caller */
8299 /* store Params pass it to WDI */
8300 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8301 pWdaParams->pWdaContext = pWDA;
8302 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008304 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 if(IS_WDI_STATUS_FAILURE(status))
8306 {
8307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8308 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8310 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008311 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 return CONVERT_WDI2VOS_STATUS(status) ;
8314}
Jeff Johnson295189b2012-06-20 16:38:30 -07008315/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008316 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 * send Enter UAPSD RSP back to PE
8318 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008319void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008320{
8321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8322 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008323 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008325 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 if(NULL == pWdaParams)
8327 {
8328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008329 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 VOS_ASSERT(0) ;
8331 return ;
8332 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008333
8334 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8335 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8336
8337 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008338 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008339
Jeff Johnson295189b2012-06-20 16:38:30 -07008340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8341 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008342 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 return ;
8344}
Jeff Johnson295189b2012-06-20 16:38:30 -07008345/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008346 * FUNCTION: WDA_EnterUapsdReqCallback
8347 * Free memory and send Enter UAPSD RSP back to PE.
8348 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8349 */
8350void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8351{
8352 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8353 tWDA_CbContext *pWDA;
8354 tUapsdParams *pEnterUapsdRsqParams;
8355
8356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8357 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8358
8359 if(NULL == pWdaParams)
8360 {
8361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8362 "%s: pWdaParams received NULL", __func__);
8363 VOS_ASSERT(0);
8364 return;
8365 }
8366
8367 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8368 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8369 pEnterUapsdRsqParams->status = wdiStatus;
8370
8371 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8372 {
8373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8374 vos_mem_free(pWdaParams);
8375 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8376 }
8377
8378 return;
8379}
8380/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 * FUNCTION: WDA_ProcessEnterUapsdReq
8382 * Request to WDI to Enter UAPSD power state.
8383 */
8384VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8385 tUapsdParams *pEnterUapsdReqParams)
8386{
8387 WDI_Status status = WDI_STATUS_SUCCESS ;
8388 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8389 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8390 sizeof(WDI_EnterUapsdReqParamsType)) ;
8391 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008393 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 if(NULL == wdiEnterUapsdReqParams)
8395 {
8396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008397 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008398 VOS_ASSERT(0);
8399 return VOS_STATUS_E_NOMEM;
8400 }
8401 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8402 if(NULL == pWdaParams)
8403 {
8404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 VOS_ASSERT(0);
8407 vos_mem_free(wdiEnterUapsdReqParams);
8408 return VOS_STATUS_E_NOMEM;
8409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8411 pEnterUapsdReqParams->beDeliveryEnabled;
8412 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8413 pEnterUapsdReqParams->beTriggerEnabled;
8414 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8415 pEnterUapsdReqParams->bkDeliveryEnabled;
8416 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8417 pEnterUapsdReqParams->bkTriggerEnabled;
8418 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8419 pEnterUapsdReqParams->viDeliveryEnabled;
8420 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8421 pEnterUapsdReqParams->viTriggerEnabled;
8422 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8423 pEnterUapsdReqParams->voDeliveryEnabled;
8424 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8425 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008426 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008427
Yue Ma7f44bbe2013-04-12 11:47:39 -07008428 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8429 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008430
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 /* Store param pointer as passed in by caller */
8432 /* store Params pass it to WDI */
8433 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8434 pWdaParams->pWdaContext = pWDA;
8435 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008436 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008437 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 if(IS_WDI_STATUS_FAILURE(status))
8439 {
8440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8441 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8442 vos_mem_free(pWdaParams->wdaMsgParam) ;
8443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8444 vos_mem_free(pWdaParams) ;
8445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008446 return CONVERT_WDI2VOS_STATUS(status) ;
8447}
Jeff Johnson295189b2012-06-20 16:38:30 -07008448/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008449 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 * send Exit UAPSD RSP back to PE
8451 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008452void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008453{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008454
8455 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8456 tWDA_CbContext *pWDA;
8457 tExitUapsdParams *pExitUapsdRspParams;
8458
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008460 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008461 if(NULL == pWdaParams)
8462 {
8463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008464 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008465 VOS_ASSERT(0);
8466 return;
8467 }
8468
8469 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8470 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8471
8472 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008473 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008474
8475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8476 vos_mem_free(pWdaParams) ;
8477
8478 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008479 return ;
8480}
Jeff Johnson295189b2012-06-20 16:38:30 -07008481/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008482 * FUNCTION: WDA_ExitUapsdReqCallback
8483 * Free memory and send Exit UAPSD RSP back to PE.
8484 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8485 */
8486void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8487{
8488 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8489 tWDA_CbContext *pWDA;
8490 tExitUapsdParams *pExitUapsdRspParams;
8491
8492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8493 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8494
8495 if(NULL == pWdaParams)
8496 {
8497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8498 "%s: pWdaParams received NULL", __func__);
8499 VOS_ASSERT(0);
8500 return;
8501 }
8502
8503 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8504 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8505 pExitUapsdRspParams->status = wdiStatus;
8506
8507 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8508 {
8509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8510 vos_mem_free(pWdaParams);
8511 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8512 }
8513
8514 return;
8515}
8516/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008517 * FUNCTION: WDA_ProcessExitUapsdReq
8518 * Request to WDI to Exit UAPSD power state.
8519 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008520VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8521 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008522{
8523 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008524 tWDA_ReqParams *pWdaParams ;
8525 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8526 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8527 sizeof(WDI_ExitUapsdReqParamsType)) ;
8528
Jeff Johnson295189b2012-06-20 16:38:30 -07008529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008530 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008531
8532 if(NULL == wdiExitUapsdReqParams)
8533 {
8534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008535 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008536 VOS_ASSERT(0);
8537 return VOS_STATUS_E_NOMEM;
8538 }
8539 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8540 if(NULL == pWdaParams)
8541 {
8542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008543 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008544 VOS_ASSERT(0);
8545 vos_mem_free(wdiExitUapsdReqParams);
8546 return VOS_STATUS_E_NOMEM;
8547 }
8548
8549 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008550 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8551 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008552
8553 /* Store param pointer as passed in by caller */
8554 /* store Params pass it to WDI */
8555 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8556 pWdaParams->pWdaContext = pWDA;
8557 pWdaParams->wdaMsgParam = pExitUapsdParams;
8558
Yue Ma7f44bbe2013-04-12 11:47:39 -07008559 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008560 if(IS_WDI_STATUS_FAILURE(status))
8561 {
8562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8563 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008564 vos_mem_free(pWdaParams->wdaMsgParam) ;
8565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8566 vos_mem_free(pWdaParams) ;
8567
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008569 return CONVERT_WDI2VOS_STATUS(status) ;
8570}
8571
Jeff Johnson295189b2012-06-20 16:38:30 -07008572/*
8573 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8574 *
8575 */
8576void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8577{
8578 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008580 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008581 if(NULL == pWdaParams)
8582 {
8583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008584 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008585 VOS_ASSERT(0) ;
8586 return ;
8587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 if( pWdaParams != NULL )
8589 {
8590 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8591 {
8592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8593 }
8594 if( pWdaParams->wdaMsgParam != NULL )
8595 {
8596 vos_mem_free(pWdaParams->wdaMsgParam) ;
8597 }
8598 vos_mem_free(pWdaParams) ;
8599 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008600 return ;
8601}
Jeff Johnson295189b2012-06-20 16:38:30 -07008602/*
8603 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8604 * Request to WDI to set the power save params at start.
8605 */
8606VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8607 tSirPowerSaveCfg *pPowerSaveCfg)
8608{
8609 WDI_Status status = WDI_STATUS_SUCCESS ;
8610 tHalCfg *tlvStruct = NULL ;
8611 tANI_U8 *tlvStructStart = NULL ;
8612 v_PVOID_t *configParam;
8613 tANI_U32 configParamSize;
8614 tANI_U32 *configDataValue;
8615 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8616 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008618 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8620 {
8621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008622 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008623 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008624 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008625 return VOS_STATUS_E_FAILURE;
8626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008627 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8628 if (NULL == wdiPowerSaveCfg)
8629 {
8630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008633 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008634 return VOS_STATUS_E_NOMEM;
8635 }
8636 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8637 if(NULL == pWdaParams)
8638 {
8639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008641 VOS_ASSERT(0);
8642 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008643 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008644 return VOS_STATUS_E_NOMEM;
8645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8647 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 if(NULL == configParam)
8649 {
8650 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008651 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008652 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 vos_mem_free(pWdaParams);
8654 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008655 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 return VOS_STATUS_E_NOMEM;
8657 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 vos_mem_set(configParam, configParamSize, 0);
8659 wdiPowerSaveCfg->pConfigBuffer = configParam;
8660 tlvStruct = (tHalCfg *)configParam;
8661 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008662 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8663 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8664 tlvStruct->length = sizeof(tANI_U32);
8665 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8666 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008667 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8668 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008669 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8670 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8671 tlvStruct->length = sizeof(tANI_U32);
8672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8673 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008674 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8675 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008676 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8677 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8678 tlvStruct->length = sizeof(tANI_U32);
8679 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8680 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8682 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008683 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8684 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8685 tlvStruct->length = sizeof(tANI_U32);
8686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8687 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008688 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8689 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8691 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8692 tlvStruct->length = sizeof(tANI_U32);
8693 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8694 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008695 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8696 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8698 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8699 tlvStruct->length = sizeof(tANI_U32);
8700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8701 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8703 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8705 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8706 tlvStruct->length = sizeof(tANI_U32);
8707 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8708 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008709 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8710 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8712 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8713 tlvStruct->length = sizeof(tANI_U32);
8714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8715 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8716 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8717 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8719 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8720 tlvStruct->length = sizeof(tANI_U32);
8721 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8722 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8723 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8724 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008725 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8726 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8727 tlvStruct->length = sizeof(tANI_U32);
8728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8729 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8731 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008732 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8733 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8734 tlvStruct->length = sizeof(tANI_U32);
8735 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8736 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008737 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8738 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008739 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 /* store Params pass it to WDI */
8742 pWdaParams->wdaMsgParam = configParam;
8743 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8744 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008745 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8746 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008747 if(IS_WDI_STATUS_FAILURE(status))
8748 {
8749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8750 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8751 vos_mem_free(pWdaParams->wdaMsgParam);
8752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8753 vos_mem_free(pWdaParams);
8754 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008756 return CONVERT_WDI2VOS_STATUS(status);
8757}
Jeff Johnson295189b2012-06-20 16:38:30 -07008758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008759 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008760 *
8761 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008762void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008763{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008764 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8765
Jeff Johnson295189b2012-06-20 16:38:30 -07008766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008767 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008768
8769 if(NULL == pWdaParams)
8770 {
8771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8772 "%s: pWdaParams received NULL", __func__);
8773 VOS_ASSERT(0);
8774 return ;
8775 }
8776
8777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008778 vos_mem_free(pWdaParams);
8779
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 return ;
8781}
Jeff Johnson295189b2012-06-20 16:38:30 -07008782/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008783 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8784 * Free memory.
8785 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8786 */
8787void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8788{
8789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8790
8791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8792 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8793
8794 if(NULL == pWdaParams)
8795 {
8796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8797 "%s: pWdaParams received NULL", __func__);
8798 VOS_ASSERT(0);
8799 return;
8800 }
8801
8802 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8803 {
8804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8805 vos_mem_free(pWdaParams);
8806 }
8807
8808 return;
8809}
8810/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008811 * FUNCTION: WDA_SetUapsdAcParamsReq
8812 * Request to WDI to set the UAPSD params for an ac (sta mode).
8813 */
8814VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8815 tUapsdInfo *pUapsdInfo)
8816{
8817 WDI_Status status = WDI_STATUS_SUCCESS;
8818 tWDA_CbContext *pWDA = NULL ;
8819 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8820 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8821 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8822 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008824 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008825 if(NULL == wdiUapsdParams)
8826 {
8827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008829 VOS_ASSERT(0);
8830 return VOS_STATUS_E_NOMEM;
8831 }
8832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8833 if(NULL == pWdaParams)
8834 {
8835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 VOS_ASSERT(0);
8838 vos_mem_free(wdiUapsdParams);
8839 return VOS_STATUS_E_NOMEM;
8840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008841 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8842 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8843 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8844 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8845 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8846 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008847 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8848 wdiUapsdParams->pUserData = pWdaParams;
8849
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 pWdaParams->pWdaContext = pWDA;
8852 /* Store param pointer as passed in by caller */
8853 pWdaParams->wdaMsgParam = pUapsdInfo;
8854 /* store Params pass it to WDI */
8855 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008856 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008857 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008859 if(IS_WDI_STATUS_FAILURE(status))
8860 {
8861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8862 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8864 vos_mem_free(pWdaParams);
8865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008866 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8867 return VOS_STATUS_SUCCESS;
8868 else
8869 return VOS_STATUS_E_FAILURE;
8870
Jeff Johnson295189b2012-06-20 16:38:30 -07008871}
8872/*
8873 * FUNCTION: WDA_ClearUapsdAcParamsReq
8874 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8875 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8876 * and again enter the UPASD with the modified params. Hence the disable
8877 * function was kept empty.
8878 *
8879 */
8880VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8881{
8882 /* do nothing */
8883 return VOS_STATUS_SUCCESS;
8884}
Jeff Johnson295189b2012-06-20 16:38:30 -07008885/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008886 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008887 *
8888 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008889void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008890{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8892
Jeff Johnson295189b2012-06-20 16:38:30 -07008893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008894 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008895
8896 if(NULL == pWdaParams)
8897 {
8898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008899 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008900 VOS_ASSERT(0) ;
8901 return ;
8902 }
8903
8904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8905 vos_mem_free(pWdaParams->wdaMsgParam);
8906 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008907
Jeff Johnson295189b2012-06-20 16:38:30 -07008908 //print a msg, nothing else to do
8909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008910 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008911 return ;
8912}
Jeff Johnson295189b2012-06-20 16:38:30 -07008913/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008914 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8915 * Free memory.
8916 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8917 */
8918void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8919{
8920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8921
8922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8923 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8924
8925 if(NULL == pWdaParams)
8926 {
8927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8928 "%s: pWdaParams received NULL", __func__);
8929 VOS_ASSERT(0);
8930 return;
8931 }
8932
8933 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8934 {
8935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8936 vos_mem_free(pWdaParams->wdaMsgParam);
8937 vos_mem_free(pWdaParams);
8938 }
8939
8940 return;
8941}
8942/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008943 * FUNCTION: WDA_UpdateUapsdParamsReq
8944 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8945 */
8946VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8947 tUpdateUapsdParams* pUpdateUapsdInfo)
8948{
8949 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008950 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008951 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8952 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8953 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008954 tWDA_ReqParams *pWdaParams = NULL;
8955
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008957 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 if(NULL == wdiUpdateUapsdParams)
8959 {
8960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008961 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 VOS_ASSERT(0);
8963 return VOS_STATUS_E_NOMEM;
8964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8966 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8967 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008968 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8969 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008970
8971 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8972 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 {
8974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008976 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008977 vos_mem_free(pUpdateUapsdInfo);
8978 vos_mem_free(wdiUpdateUapsdParams);
8979 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008981 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008982 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008984 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8985 pWdaParams->pWdaContext = pWDA;
8986
Jeff Johnson43971f52012-07-17 12:26:56 -07008987 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008988 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008989 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008990
Jeff Johnson43971f52012-07-17 12:26:56 -07008991 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 {
8993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8994 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008995 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8997 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008998 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008999 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009000 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009001}
Jeff Johnson295189b2012-06-20 16:38:30 -07009002/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009003 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009004 *
9005 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009006void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009007{
9008 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009010 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 if(WDI_STATUS_SUCCESS != wdiStatus)
9012 {
9013 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009014 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009016 if(NULL == pWdaParams)
9017 {
9018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009019 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009020 VOS_ASSERT(0) ;
9021 return ;
9022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9024 vos_mem_free(pWdaParams->wdaMsgParam);
9025 vos_mem_free(pWdaParams);
9026 return ;
9027}
Jeff Johnson295189b2012-06-20 16:38:30 -07009028/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009029 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9030 * Free memory.
9031 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9032 */
9033void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9034{
9035 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9036
9037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9038 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9039
9040 if(NULL == pWdaParams)
9041 {
9042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9043 "%s: pWdaParams received NULL", __func__);
9044 VOS_ASSERT(0);
9045 return;
9046 }
9047
9048 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9049 {
9050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9051 vos_mem_free(pWdaParams->wdaMsgParam);
9052 vos_mem_free(pWdaParams);
9053 }
9054
9055 return;
9056}
9057/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009058 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9059 *
9060 */
9061VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9062 tSirWlanSetRxpFilters *pWlanSuspendParam)
9063{
Jeff Johnson295189b2012-06-20 16:38:30 -07009064 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009065 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309066 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009067 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309068 /* Sanity Check
9069 * This is very unlikely and add assert to collect more info next time */
9070 if(NULL == pWlanSuspendParam)
9071 {
9072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9073 "%s: pWlanSuspendParam received NULL", __func__);
9074 VOS_ASSERT(0) ;
9075 return VOS_STATUS_E_FAULT;
9076 }
9077 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9078 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009080 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009081 if(NULL == wdiRxpFilterParams)
9082 {
9083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009084 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009085 VOS_ASSERT(0);
9086 vos_mem_free(pWlanSuspendParam);
9087 return VOS_STATUS_E_NOMEM;
9088 }
9089 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9090 if(NULL == pWdaParams)
9091 {
9092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009093 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 VOS_ASSERT(0);
9095 vos_mem_free(wdiRxpFilterParams);
9096 vos_mem_free(pWlanSuspendParam);
9097 return VOS_STATUS_E_NOMEM;
9098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009099 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9100 pWlanSuspendParam->setMcstBcstFilter;
9101 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9102 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9103
Yue Ma7f44bbe2013-04-12 11:47:39 -07009104 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9105 wdiRxpFilterParams->pUserData = pWdaParams;
9106
Jeff Johnson295189b2012-06-20 16:38:30 -07009107 pWdaParams->pWdaContext = pWDA;
9108 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9109 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009110 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009111 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009113 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 {
9115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9116 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009117 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9119 vos_mem_free(pWdaParams->wdaMsgParam);
9120 vos_mem_free(pWdaParams);
9121 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009122 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009123}
Jeff Johnson295189b2012-06-20 16:38:30 -07009124/*
9125 * FUNCTION: WDA_WdiIndicationCallback
9126 *
9127 */
9128void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9129 void* pUserData)
9130{
9131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009132 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009133}
Jeff Johnson295189b2012-06-20 16:38:30 -07009134/*
9135 * FUNCTION: WDA_ProcessWlanSuspendInd
9136 *
9137 */
9138VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9139 tSirWlanSuspendParam *pWlanSuspendParam)
9140{
9141 WDI_Status wdiStatus;
9142 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009144 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009145 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9146 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9147 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9148 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9151 if(WDI_STATUS_PENDING == wdiStatus)
9152 {
9153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009154 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 }
9156 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9157 {
9158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009159 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 vos_mem_free(pWlanSuspendParam);
9162 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9163}
9164
Chet Lanctot186b5732013-03-18 10:26:30 -07009165#ifdef WLAN_FEATURE_11W
9166/*
9167 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9168 *
9169 */
9170VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9171 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9172{
9173 WDI_Status wdiStatus;
9174 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9176 "------> %s ", __func__);
9177
9178 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9179 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9180 sizeof(tSirMacAddr));
9181
9182 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9183 wdiExclUnencryptParams.pUserData = pWDA;
9184
9185 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9186 if(WDI_STATUS_PENDING == wdiStatus)
9187 {
9188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9189 "Pending received for %s:%d ", __func__, __LINE__ );
9190 }
9191 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9192 {
9193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9194 "Failure in %s:%d ", __func__, __LINE__ );
9195 }
9196 vos_mem_free(pExclUnencryptParam);
9197 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9198}
9199#endif
9200
Jeff Johnson295189b2012-06-20 16:38:30 -07009201/*
9202 * FUNCTION: WDA_ProcessWlanResumeCallback
9203 *
9204 */
9205void WDA_ProcessWlanResumeCallback(
9206 WDI_SuspendResumeRspParamsType *resumeRspParams,
9207 void* pUserData)
9208{
9209 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009211 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 if(NULL == pWdaParams)
9213 {
9214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009215 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009216 VOS_ASSERT(0) ;
9217 return ;
9218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009219 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9220 {
9221 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009222 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9225 vos_mem_free(pWdaParams->wdaMsgParam);
9226 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 return ;
9228}
Jeff Johnson295189b2012-06-20 16:38:30 -07009229/*
9230 * FUNCTION: WDA_ProcessWlanResumeReq
9231 *
9232 */
9233VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9234 tSirWlanResumeParam *pWlanResumeParam)
9235{
9236 WDI_Status wdiStatus;
9237 WDI_ResumeParamsType *wdiResumeParams =
9238 (WDI_ResumeParamsType *)vos_mem_malloc(
9239 sizeof(WDI_ResumeParamsType) ) ;
9240 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009242 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 if(NULL == wdiResumeParams)
9244 {
9245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009247 VOS_ASSERT(0);
9248 return VOS_STATUS_E_NOMEM;
9249 }
9250 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9251 if(NULL == pWdaParams)
9252 {
9253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009254 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 VOS_ASSERT(0);
9256 vos_mem_free(wdiResumeParams);
9257 return VOS_STATUS_E_NOMEM;
9258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9260 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 wdiResumeParams->wdiReqStatusCB = NULL;
9263 pWdaParams->wdaMsgParam = pWlanResumeParam;
9264 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9265 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009266 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9267 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9268 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9270 {
9271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9272 "Failure in Host Resume REQ WDI API, free all the memory " );
9273 VOS_ASSERT(0);
9274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9275 vos_mem_free(pWdaParams->wdaMsgParam);
9276 vos_mem_free(pWdaParams);
9277 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9279}
9280
Jeff Johnson295189b2012-06-20 16:38:30 -07009281/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009282 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 *
9284 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009285void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009286{
9287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009289 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009290 if(NULL == pWdaParams)
9291 {
9292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009293 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009294 VOS_ASSERT(0) ;
9295 return ;
9296 }
9297
9298 vos_mem_free(pWdaParams->wdaMsgParam) ;
9299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9300 vos_mem_free(pWdaParams) ;
9301 /*
9302 * No respone required for SetBeaconFilter req so just free the request
9303 * param here
9304 */
9305
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 return ;
9307}
Jeff Johnson295189b2012-06-20 16:38:30 -07009308/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009309 * FUNCTION: WDA_SetBeaconFilterReqCallback
9310 * Free memory.
9311 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9312 */
9313void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9314{
9315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9316
9317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9318 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9319
9320 if(NULL == pWdaParams)
9321 {
9322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9323 "%s: pWdaParams received NULL", __func__);
9324 VOS_ASSERT(0);
9325 return;
9326 }
9327
9328 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9329 {
9330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9331 vos_mem_free(pWdaParams->wdaMsgParam);
9332 vos_mem_free(pWdaParams);
9333 }
9334
9335 return;
9336}
9337/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009338 * FUNCTION: WDA_SetBeaconFilterReq
9339 * Request to WDI to send the beacon filtering related information.
9340 */
9341VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9342 tBeaconFilterMsg* pBeaconFilterInfo)
9343{
9344 WDI_Status status = WDI_STATUS_SUCCESS;
9345 tANI_U8 *dstPtr, *srcPtr;
9346 tANI_U8 filterLength;
9347 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9348 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9349 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9350 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009352 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009353 if(NULL == wdiBeaconFilterInfo)
9354 {
9355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 VOS_ASSERT(0);
9358 return VOS_STATUS_E_NOMEM;
9359 }
9360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9361 if(NULL == pWdaParams)
9362 {
9363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 VOS_ASSERT(0);
9366 vos_mem_free(wdiBeaconFilterInfo);
9367 return VOS_STATUS_E_NOMEM;
9368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9370 pBeaconFilterInfo->beaconInterval;
9371 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9372 pBeaconFilterInfo->capabilityInfo;
9373 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9374 pBeaconFilterInfo->capabilityMask;
9375 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009376
9377 //Fill the BssIdx
9378 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9379
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 //Fill structure with info contained in the beaconFilterTable
9381 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9382 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9383 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9384 if(WDI_BEACON_FILTER_LEN < filterLength)
9385 {
9386 filterLength = WDI_BEACON_FILTER_LEN;
9387 }
9388 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009389 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9390 wdiBeaconFilterInfo->pUserData = pWdaParams;
9391
Jeff Johnson295189b2012-06-20 16:38:30 -07009392 /* Store param pointer as passed in by caller */
9393 /* store Params pass it to WDI */
9394 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9395 pWdaParams->pWdaContext = pWDA;
9396 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9397
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009399 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009400 if(IS_WDI_STATUS_FAILURE(status))
9401 {
9402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9403 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9404 vos_mem_free(pWdaParams->wdaMsgParam) ;
9405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9406 vos_mem_free(pWdaParams) ;
9407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 return CONVERT_WDI2VOS_STATUS(status) ;
9409}
Jeff Johnson295189b2012-06-20 16:38:30 -07009410/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009411 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 *
9413 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009414void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009415{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009416 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9417
Jeff Johnson295189b2012-06-20 16:38:30 -07009418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009419 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009420
9421 if(NULL == pWdaParams)
9422 {
9423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009424 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009425 VOS_ASSERT(0) ;
9426 return ;
9427 }
9428
9429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9430 vos_mem_free(pWdaParams->wdaMsgParam);
9431 vos_mem_free(pWdaParams);
9432
Jeff Johnson295189b2012-06-20 16:38:30 -07009433 //print a msg, nothing else to do
9434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009435 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 return ;
9437}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009438/*
9439 * FUNCTION: WDA_RemBeaconFilterReqCallback
9440 * Free memory.
9441 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9442 */
9443void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9444{
9445 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9446
9447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9448 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9449
9450 if(NULL == pWdaParams)
9451 {
9452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9453 "%s: pWdaParams received NULL", __func__);
9454 VOS_ASSERT(0);
9455 return;
9456 }
9457
9458 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9459 {
9460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9461 vos_mem_free(pWdaParams->wdaMsgParam);
9462 vos_mem_free(pWdaParams);
9463 }
9464
9465 return;
9466}
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 // TODO: PE does not have this feature for now implemented,
9468 // but the support for removing beacon filter exists between
9469 // HAL and FW. This function can be called whenever PE defines
9470 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009471/*
9472 * FUNCTION: WDA_RemBeaconFilterReq
9473 * Request to WDI to send the removal of beacon filtering related information.
9474 */
9475VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9476 tRemBeaconFilterMsg* pBeaconFilterInfo)
9477{
9478 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009479 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009480 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9481 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9482 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009483 tWDA_ReqParams *pWdaParams ;
9484
Jeff Johnson295189b2012-06-20 16:38:30 -07009485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009486 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 if(NULL == wdiBeaconFilterInfo)
9488 {
9489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009490 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009491 VOS_ASSERT(0);
9492 return VOS_STATUS_E_NOMEM;
9493 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9495 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 {
9497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009499 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009500 vos_mem_free(wdiBeaconFilterInfo);
9501 vos_mem_free(pBeaconFilterInfo);
9502 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009504
9505 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9506 pBeaconFilterInfo->ucIeCount;
9507 //Fill structure with info contained in the ucRemIeId
9508 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9509 pBeaconFilterInfo->ucRemIeId,
9510 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9511 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9512 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009513
9514 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009515 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009516 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009517 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9518
9519 pWdaParams->pWdaContext = pWDA;
9520
Jeff Johnson43971f52012-07-17 12:26:56 -07009521 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009522 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009523 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 {
9525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9526 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009527 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9529 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009530 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009531 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009532 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009533}
Jeff Johnson295189b2012-06-20 16:38:30 -07009534/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009535 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 *
9537 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009538void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009539{
9540 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009542 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 if(NULL == pWdaParams)
9544 {
9545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009546 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009547 VOS_ASSERT(0) ;
9548 return ;
9549 }
9550
9551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9552 vos_mem_free(pWdaParams) ;
9553
Jeff Johnson295189b2012-06-20 16:38:30 -07009554 return ;
9555}
Jeff Johnson295189b2012-06-20 16:38:30 -07009556/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009557 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9558 * Free memory.
9559 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9560 */
9561void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9562{
9563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9564
9565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9566 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9567
9568 if(NULL == pWdaParams)
9569 {
9570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9571 "%s: pWdaParams received NULL", __func__);
9572 VOS_ASSERT(0);
9573 return;
9574 }
9575
9576 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9577 {
9578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9579 vos_mem_free(pWdaParams);
9580 }
9581
9582 return;
9583}
9584/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009585 * FUNCTION: WDA_SetRSSIThresholdsReq
9586 * Request to WDI to set the RSSI thresholds (sta mode).
9587 */
9588VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9589{
9590 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009591 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009592 tWDA_CbContext *pWDA = NULL ;
9593 v_PVOID_t pVosContext = NULL;
9594 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9595 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9596 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9597 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009599 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009600 if(NULL == wdiRSSIThresholdsInfo)
9601 {
9602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009603 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 VOS_ASSERT(0);
9605 return VOS_STATUS_E_NOMEM;
9606 }
9607 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9608 if(NULL == pWdaParams)
9609 {
9610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009612 VOS_ASSERT(0);
9613 vos_mem_free(wdiRSSIThresholdsInfo);
9614 return VOS_STATUS_E_NOMEM;
9615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009616 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009617 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9618 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9619 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9621 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9622 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009623 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9624 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9625 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009626 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9627 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009628 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9629 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9630
Jeff Johnson295189b2012-06-20 16:38:30 -07009631 /* Store param pointer as passed in by caller */
9632 /* store Params pass it to WDI */
9633 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9634 pWdaParams->pWdaContext = pWDA;
9635 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009636 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009637 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009638 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009639 {
9640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9641 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009642 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9644 vos_mem_free(pWdaParams) ;
9645 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009646 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009647
9648}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009649/*
Yue Madb90ac12013-04-04 13:39:13 -07009650 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009651 *
9652 */
Yue Madb90ac12013-04-04 13:39:13 -07009653void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009654{
9655 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9656
9657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009659 if(NULL == pWdaParams)
9660 {
9661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009662 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009663 VOS_ASSERT(0) ;
9664 return ;
9665 }
9666
9667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9668 vos_mem_free(pWdaParams->wdaMsgParam);
9669 vos_mem_free(pWdaParams) ;
9670
9671 //print a msg, nothing else to do
9672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009673 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009674 return ;
9675}
Jeff Johnson295189b2012-06-20 16:38:30 -07009676/*
Yue Madb90ac12013-04-04 13:39:13 -07009677 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009678 * Free memory.
9679 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009680 */
9681void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9682{
9683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9684
9685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9686 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9687
9688 if(NULL == pWdaParams)
9689 {
9690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9691 "%s: Invalid pWdaParams pointer", __func__);
9692 VOS_ASSERT(0);
9693 return;
9694 }
9695
9696 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9697 {
9698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9699 vos_mem_free(pWdaParams->wdaMsgParam);
9700 vos_mem_free(pWdaParams);
9701 }
9702
9703 return;
9704}
9705/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009706 * FUNCTION: WDA_ProcessHostOffloadReq
9707 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9708 * to broadcast traffic (sta mode).
9709 */
9710VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9711 tSirHostOffloadReq *pHostOffloadParams)
9712{
9713 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009714 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9716 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9717 sizeof(WDI_HostOffloadReqParamsType)) ;
9718 tWDA_ReqParams *pWdaParams ;
9719
9720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009721 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009722
9723 if(NULL == wdiHostOffloadInfo)
9724 {
9725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 VOS_ASSERT(0);
9728 return VOS_STATUS_E_NOMEM;
9729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009730 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9731 if(NULL == pWdaParams)
9732 {
9733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009735 VOS_ASSERT(0);
9736 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009737 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 return VOS_STATUS_E_NOMEM;
9739 }
9740
9741 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9742 pHostOffloadParams->offloadType;
9743 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9744 pHostOffloadParams->enableOrDisable;
9745
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009746 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9747 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9748
Jeff Johnson295189b2012-06-20 16:38:30 -07009749 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9750 {
9751 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9752 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9753 pHostOffloadParams->params.hostIpv4Addr,
9754 4);
9755 break;
9756 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9757 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9758 pHostOffloadParams->params.hostIpv6Addr,
9759 16);
9760 break;
9761 case SIR_IPV6_NS_OFFLOAD:
9762 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9763 pHostOffloadParams->params.hostIpv6Addr,
9764 16);
9765
9766#ifdef WLAN_NS_OFFLOAD
9767 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9768 {
9769 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9770 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9771 16);
9772 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9773 }
9774 else
9775 {
9776 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9777 }
9778
9779 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9780 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9781 16);
9782 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9783 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9784 6);
9785
9786 //Only two are supported so let's go through them without a loop
9787 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9788 {
9789 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9790 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9791 16);
9792 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9793 }
9794 else
9795 {
9796 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9797 }
9798
9799 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9800 {
9801 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9802 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9803 16);
9804 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9805 }
9806 else
9807 {
9808 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9809 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309810 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9811 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009812 break;
9813#endif //WLAN_NS_OFFLOAD
9814 default:
9815 {
9816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9817 "No Handling for Offload Type %x in WDA "
9818 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9819 //WDA_VOS_ASSERT(0) ;
9820 }
9821 }
Yue Madb90ac12013-04-04 13:39:13 -07009822 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9823 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009824
Jeff Johnson295189b2012-06-20 16:38:30 -07009825 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009826 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009827 /* store Params pass it to WDI */
9828 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9829 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009830
Jeff Johnson295189b2012-06-20 16:38:30 -07009831
Jeff Johnson43971f52012-07-17 12:26:56 -07009832 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009833 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009834
Jeff Johnson43971f52012-07-17 12:26:56 -07009835 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009836 {
9837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +05309838 "Failure in host offload REQ WDI API, free all the memory %d",
9839 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -07009840 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9842 vos_mem_free(pWdaParams->wdaMsgParam);
9843 vos_mem_free(pWdaParams) ;
9844 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009845 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009846
9847}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009848/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009849 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 *
9851 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009852void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009853{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009854 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9855
Jeff Johnson295189b2012-06-20 16:38:30 -07009856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009857 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009858
9859 if(NULL == pWdaParams)
9860 {
9861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009862 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009863 VOS_ASSERT(0) ;
9864 return ;
9865 }
9866
9867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9868 vos_mem_free(pWdaParams->wdaMsgParam);
9869 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009870
Jeff Johnson295189b2012-06-20 16:38:30 -07009871 //print a msg, nothing else to do
9872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009873 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009874 return ;
9875}
Jeff Johnson295189b2012-06-20 16:38:30 -07009876/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009877 * FUNCTION: WDA_KeepAliveReqCallback
9878 * Free memory.
9879 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9880 */
9881void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9882{
9883 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9884
9885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9886 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9887
9888 if(NULL == pWdaParams)
9889 {
9890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9891 "%s: pWdaParams received NULL", __func__);
9892 VOS_ASSERT(0);
9893 return;
9894 }
9895
9896 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9897 {
9898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9899 vos_mem_free(pWdaParams->wdaMsgParam);
9900 vos_mem_free(pWdaParams);
9901 }
9902
9903 return;
9904}
9905/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009906 * FUNCTION: WDA_ProcessKeepAliveReq
9907 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9908 * wakeup due to broadcast traffic (sta mode).
9909 */
9910VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9911 tSirKeepAliveReq *pKeepAliveParams)
9912{
9913 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009914 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9916 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9917 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009918 tWDA_ReqParams *pWdaParams;
9919
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009921 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 if(NULL == wdiKeepAliveInfo)
9923 {
9924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009927 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 return VOS_STATUS_E_NOMEM;
9929 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009930
9931 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9932 if(NULL == pWdaParams)
9933 {
9934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009935 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009936 VOS_ASSERT(0);
9937 vos_mem_free(wdiKeepAliveInfo);
9938 vos_mem_free(pKeepAliveParams);
9939 return VOS_STATUS_E_NOMEM;
9940 }
9941
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9943 pKeepAliveParams->packetType;
9944 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9945 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009946
9947 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9948 pKeepAliveParams->bssId,
9949 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009950
9951 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9952 {
9953 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9954 pKeepAliveParams->hostIpv4Addr,
9955 SIR_IPV4_ADDR_LEN);
9956 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9957 pKeepAliveParams->destIpv4Addr,
9958 SIR_IPV4_ADDR_LEN);
9959 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9960 pKeepAliveParams->destMacAddr,
9961 SIR_MAC_ADDR_LEN);
9962 }
9963 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9964 {
9965 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9966 SIR_IPV4_ADDR_LEN,
9967 0);
9968 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9969 SIR_IPV4_ADDR_LEN,
9970 0);
9971 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9972 SIR_MAC_ADDR_LEN,
9973 0);
9974 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009975 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9976 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009977
Jeff Johnson295189b2012-06-20 16:38:30 -07009978 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009979 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009981 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9982 pWdaParams->pWdaContext = pWDA;
9983
Jeff Johnson295189b2012-06-20 16:38:30 -07009984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9985 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9986 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9987 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9988 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9990 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9991 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9992 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9993 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9995 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9996 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9997 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9998 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9999 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10000 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10001 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10003 "TimePeriod %d PacketType %d",
10004 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10005 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010006 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010007 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010008
Jeff Johnson43971f52012-07-17 12:26:56 -070010009 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 {
10011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10012 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010013 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10015 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010016 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010018 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010019
10020}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010021/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010022 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 *
10024 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010025void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010026 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10027 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010028{
10029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010031 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 if(NULL == pWdaParams)
10033 {
10034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010035 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010036 VOS_ASSERT(0) ;
10037 return ;
10038 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10040 vos_mem_free(pWdaParams->wdaMsgParam);
10041 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 return ;
10043}
Jeff Johnson295189b2012-06-20 16:38:30 -070010044/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010045 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10046 * Free memory.
10047 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10048 */
10049void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10050{
10051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10052
10053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10054 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10055
10056 if(NULL == pWdaParams)
10057 {
10058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10059 "%s: pWdaParams received NULL", __func__);
10060 VOS_ASSERT(0);
10061 return;
10062 }
10063
10064 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10065 {
10066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10067 vos_mem_free(pWdaParams->wdaMsgParam);
10068 vos_mem_free(pWdaParams);
10069 }
10070
10071 return;
10072}
10073
10074/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010075 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10076 * Request to WDI to add WOWL Bcast pattern
10077 */
10078VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10079 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10080{
10081 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010082 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10084 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10085 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10086 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010088 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010089 if(NULL == wdiWowlAddBcPtrnInfo)
10090 {
10091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 VOS_ASSERT(0);
10094 return VOS_STATUS_E_NOMEM;
10095 }
10096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10097 if(NULL == pWdaParams)
10098 {
10099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 VOS_ASSERT(0);
10102 vos_mem_free(wdiWowlAddBcPtrnInfo);
10103 return VOS_STATUS_E_NOMEM;
10104 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10106 pWowlAddBcPtrnParams->ucPatternId;
10107 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10108 pWowlAddBcPtrnParams->ucPatternByteOffset;
10109 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10110 pWowlAddBcPtrnParams->ucPatternMaskSize;
10111 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10112 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010113 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10114 {
10115 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10116 pWowlAddBcPtrnParams->ucPattern,
10117 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10118 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10119 pWowlAddBcPtrnParams->ucPatternMask,
10120 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10121 }
10122 else
10123 {
10124 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10125 pWowlAddBcPtrnParams->ucPattern,
10126 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10127 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10128 pWowlAddBcPtrnParams->ucPatternMask,
10129 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10130
10131 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10132 pWowlAddBcPtrnParams->ucPatternExt,
10133 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10134 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10135 pWowlAddBcPtrnParams->ucPatternMaskExt,
10136 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10137 }
10138
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010139 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10140 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10141
Yue Ma7f44bbe2013-04-12 11:47:39 -070010142 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10143 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010144 /* Store param pointer as passed in by caller */
10145 /* store Params pass it to WDI */
10146 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10147 pWdaParams->pWdaContext = pWDA;
10148 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010149 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010150 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010151 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 {
10153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10154 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010155 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 vos_mem_free(pWdaParams->wdaMsgParam) ;
10157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10158 vos_mem_free(pWdaParams) ;
10159 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010160 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010161
10162}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010163/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010164 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010165 *
10166 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010167void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010168 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10169 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010170{
10171 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010173 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010174 if(NULL == pWdaParams)
10175 {
10176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010177 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 VOS_ASSERT(0) ;
10179 return ;
10180 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10182 vos_mem_free(pWdaParams->wdaMsgParam);
10183 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 return ;
10185}
Jeff Johnson295189b2012-06-20 16:38:30 -070010186/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010187 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10188 * Free memory.
10189 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10190 */
10191void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10192{
10193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10194
10195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10196 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10197
10198 if(NULL == pWdaParams)
10199 {
10200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10201 "%s: pWdaParams received NULL", __func__);
10202 VOS_ASSERT(0);
10203 return;
10204 }
10205
10206 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10207 {
10208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10209 vos_mem_free(pWdaParams->wdaMsgParam);
10210 vos_mem_free(pWdaParams);
10211 }
10212
10213 return;
10214}
10215/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10217 * Request to WDI to delete WOWL Bcast pattern
10218 */
10219VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10220 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10221{
10222 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010223 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10225 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10226 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10227 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010229 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010230 if(NULL == wdiWowlDelBcPtrnInfo)
10231 {
10232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010233 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 VOS_ASSERT(0);
10235 return VOS_STATUS_E_NOMEM;
10236 }
10237 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10238 if(NULL == pWdaParams)
10239 {
10240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010242 VOS_ASSERT(0);
10243 vos_mem_free(wdiWowlDelBcPtrnInfo);
10244 return VOS_STATUS_E_NOMEM;
10245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10247 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010248
10249 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10250 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10251
Yue Ma7f44bbe2013-04-12 11:47:39 -070010252 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10253 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 /* Store param pointer as passed in by caller */
10255 /* store Params pass it to WDI */
10256 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10257 pWdaParams->pWdaContext = pWDA;
10258 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010259 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010260 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010261 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 {
10263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10264 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010265 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 vos_mem_free(pWdaParams->wdaMsgParam) ;
10267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10268 vos_mem_free(pWdaParams) ;
10269 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010270 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010271
10272}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010273/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010274 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 *
10276 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010277void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010278{
10279 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10280 tWDA_CbContext *pWDA;
10281 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010283 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 if(NULL == pWdaParams)
10285 {
10286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010287 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 VOS_ASSERT(0) ;
10289 return ;
10290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10292 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10293
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010294 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10295
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10297 vos_mem_free(pWdaParams) ;
10298
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010299 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010300 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010301 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010302 return ;
10303}
Jeff Johnson295189b2012-06-20 16:38:30 -070010304/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010305 * FUNCTION: WDA_WowlEnterReqCallback
10306 * Free memory and send WOWL Enter RSP back to PE.
10307 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10308 */
10309void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10310{
10311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10312 tWDA_CbContext *pWDA;
10313 tSirHalWowlEnterParams *pWowlEnterParams;
10314
10315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10316 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10317
10318 if(NULL == pWdaParams)
10319 {
10320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10321 "%s: pWdaParams received NULL", __func__);
10322 VOS_ASSERT(0);
10323 return;
10324 }
10325
10326 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10327 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10328 pWowlEnterParams->status = wdiStatus;
10329
10330 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10331 {
10332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10333 vos_mem_free(pWdaParams);
10334 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10335 }
10336
10337 return;
10338}
10339/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 * FUNCTION: WDA_ProcessWowlEnterReq
10341 * Request to WDI to enter WOWL
10342 */
10343VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10344 tSirHalWowlEnterParams *pWowlEnterParams)
10345{
10346 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010347 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010348 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10349 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10350 sizeof(WDI_WowlEnterReqParamsType)) ;
10351 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010353 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010354 if(NULL == wdiWowlEnterInfo)
10355 {
10356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010358 VOS_ASSERT(0);
10359 return VOS_STATUS_E_NOMEM;
10360 }
10361 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10362 if(NULL == pWdaParams)
10363 {
10364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 VOS_ASSERT(0);
10367 vos_mem_free(wdiWowlEnterInfo);
10368 return VOS_STATUS_E_NOMEM;
10369 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010370
10371 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10372
Jeff Johnson295189b2012-06-20 16:38:30 -070010373 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10374 pWowlEnterParams->magicPtrn,
10375 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10377 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010378 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10379 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010380 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10381 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010382 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10383 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10385 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010386 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10387 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010388 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10389 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10391 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010392#ifdef WLAN_WAKEUP_EVENTS
10393 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10394 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10395
10396 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10397 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10398
10399 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10400 pWowlEnterParams->ucWowNetScanOffloadMatch;
10401
10402 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10403 pWowlEnterParams->ucWowGTKRekeyError;
10404
10405 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10406 pWowlEnterParams->ucWoWBSSConnLoss;
10407#endif // WLAN_WAKEUP_EVENTS
10408
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010409 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10410 pWowlEnterParams->bssIdx;
10411
Yue Ma7f44bbe2013-04-12 11:47:39 -070010412 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10413 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010414 /* Store param pointer as passed in by caller */
10415 /* store Params pass it to WDI */
10416 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10417 pWdaParams->pWdaContext = pWDA;
10418 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010419 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010420 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010421 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 {
10423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10424 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010425 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010426 vos_mem_free(pWdaParams->wdaMsgParam) ;
10427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10428 vos_mem_free(pWdaParams) ;
10429 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010430 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010431
10432}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010433/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010434 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010435 *
10436 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010437void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010438{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10440 tWDA_CbContext *pWDA;
10441 tSirHalWowlExitParams *pWowlExitParams;
10442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010443 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010444 if(NULL == pWdaParams)
10445 {
10446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010447 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010448 VOS_ASSERT(0) ;
10449 return ;
10450 }
10451 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10452 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10453
10454 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010455 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010456
10457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10458 vos_mem_free(pWdaParams) ;
10459
Jeff Johnson295189b2012-06-20 16:38:30 -070010460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010461 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010462 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010463 return ;
10464}
Jeff Johnson295189b2012-06-20 16:38:30 -070010465/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010466 * FUNCTION: WDA_WowlExitReqCallback
10467 * Free memory and send WOWL Exit RSP back to PE.
10468 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10469 */
10470void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10471{
10472 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10473 tWDA_CbContext *pWDA;
10474 tSirHalWowlExitParams *pWowlExitParams;
10475
10476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10477 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10478
10479 if(NULL == pWdaParams)
10480 {
10481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10482 "%s: pWdaParams received NULL", __func__);
10483 VOS_ASSERT(0);
10484 return;
10485 }
10486
10487 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10488 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10489 pWowlExitParams->status = wdiStatus;
10490
10491 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10492 {
10493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10494 vos_mem_free(pWdaParams);
10495 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10496 }
10497
10498 return;
10499}
10500/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010501 * FUNCTION: WDA_ProcessWowlExitReq
10502 * Request to WDI to add WOWL Bcast pattern
10503 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010504VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10505 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010506{
10507 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010508 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010509 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10510 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10511 sizeof(WDI_WowlExitReqParamsType)) ;
10512 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010514 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010515 if(NULL == wdiWowlExitInfo)
10516 {
10517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010518 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010519 VOS_ASSERT(0);
10520 return VOS_STATUS_E_NOMEM;
10521 }
10522 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10523 if(NULL == pWdaParams)
10524 {
10525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010526 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010527 VOS_ASSERT(0);
10528 vos_mem_free(wdiWowlExitInfo);
10529 return VOS_STATUS_E_NOMEM;
10530 }
10531
10532 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10533 pWowlExitParams->bssIdx;
10534
Yue Ma7f44bbe2013-04-12 11:47:39 -070010535 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10536 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010537
10538 /* Store param pointer as passed in by caller */
10539 /* store Params pass it to WDI */
10540 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10541 pWdaParams->pWdaContext = pWDA;
10542 pWdaParams->wdaMsgParam = pWowlExitParams;
10543
10544 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010545 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010546
Jeff Johnson43971f52012-07-17 12:26:56 -070010547 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010548 {
10549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10550 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010551 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10553 vos_mem_free(pWdaParams->wdaMsgParam);
10554 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010555 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010556 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010557}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010558/*
10559 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10560 * Request to WDI to determine whether a given station is capable of
10561 * using HW-based frame translation
10562 */
10563v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10564 tANI_U8 staIdx)
10565{
10566 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10567}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010568
10569/*
10570 * FUNCTION: WDA_IsSelfSTA
10571 * Request to WDI to determine whether a given STAID is self station
10572 * index.
10573 */
10574v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10575{
10576
10577 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10578
Girish Gowli05cf44e2014-06-12 21:53:37 +053010579 if (NULL != pWDA)
10580 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10581 else
10582 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010583}
Jeff Johnson295189b2012-06-20 16:38:30 -070010584/*
10585 * FUNCTION: WDA_NvDownloadReqCallback
10586 * send NV Download RSP back to PE
10587 */
10588void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10589 void* pUserData)
10590{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010591
10592 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10593 tWDA_CbContext *pWDA;
10594
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010596 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010597
10598 if(NULL == pWdaParams)
10599 {
10600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010601 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010602 VOS_ASSERT(0) ;
10603 return ;
10604 }
10605
10606 pWDA = pWdaParams->pWdaContext;
10607
Jeff Johnson295189b2012-06-20 16:38:30 -070010608 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10610 vos_mem_free(pWdaParams);
10611
Jeff Johnson295189b2012-06-20 16:38:30 -070010612 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010613 return ;
10614}
Jeff Johnson295189b2012-06-20 16:38:30 -070010615/*
10616 * FUNCTION: WDA_ProcessNvDownloadReq
10617 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10618 */
10619VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10620{
10621 /* Initialize the local Variables*/
10622 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10623 v_VOID_t *pNvBuffer=NULL;
10624 v_SIZE_t bufferSize = 0;
10625 WDI_Status status = WDI_STATUS_E_FAILURE;
10626 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010627 tWDA_ReqParams *pWdaParams ;
10628
Jeff Johnson295189b2012-06-20 16:38:30 -070010629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010631 if(NULL == pWDA)
10632 {
10633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010634 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010635 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010636 return VOS_STATUS_E_FAILURE;
10637 }
10638
10639 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010640 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10641
Jeff Johnson295189b2012-06-20 16:38:30 -070010642 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10643 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 if(NULL == wdiNvDownloadReqParam)
10645 {
10646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010648 VOS_ASSERT(0);
10649 return VOS_STATUS_E_NOMEM;
10650 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010651 /* Copy Params to wdiNvDownloadReqParam*/
10652 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10653 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010654
10655 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10656 if(NULL == pWdaParams)
10657 {
10658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010659 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010660 VOS_ASSERT(0);
10661 vos_mem_free(wdiNvDownloadReqParam);
10662 return VOS_STATUS_E_NOMEM;
10663 }
10664
Jeff Johnson295189b2012-06-20 16:38:30 -070010665 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010666 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10667 pWdaParams->wdaMsgParam = NULL;
10668 pWdaParams->pWdaContext = pWDA;
10669
10670
Jeff Johnson295189b2012-06-20 16:38:30 -070010671 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010672
Jeff Johnson295189b2012-06-20 16:38:30 -070010673 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010674 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10675
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 if(IS_WDI_STATUS_FAILURE(status))
10677 {
10678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10679 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10681 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010684}
10685/*
10686 * FUNCTION: WDA_FlushAcReqCallback
10687 * send Flush AC RSP back to TL
10688 */
10689void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10690{
10691 vos_msg_t wdaMsg = {0} ;
10692 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10693 tFlushACReq *pFlushACReqParams;
10694 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010696 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010697 if(NULL == pWdaParams)
10698 {
10699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010700 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010701 VOS_ASSERT(0) ;
10702 return ;
10703 }
10704
10705 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10706 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10707 if(NULL == pFlushACRspParams)
10708 {
10709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010710 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010711 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010712 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010713 return ;
10714 }
10715 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10716 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10717 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10718 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10719 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010720 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010721 vos_mem_free(pWdaParams->wdaMsgParam) ;
10722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10723 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010724 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10725 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10726 // POST message to TL
10727 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10728
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 return ;
10730}
Jeff Johnson295189b2012-06-20 16:38:30 -070010731/*
10732 * FUNCTION: WDA_ProcessFlushAcReq
10733 * Request to WDI to Update the DELBA REQ params.
10734 */
10735VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10736 tFlushACReq *pFlushAcReqParams)
10737{
10738 WDI_Status status = WDI_STATUS_SUCCESS ;
10739 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10740 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10741 sizeof(WDI_FlushAcReqParamsType)) ;
10742 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 if(NULL == wdiFlushAcReqParam)
10744 {
10745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010747 VOS_ASSERT(0);
10748 return VOS_STATUS_E_NOMEM;
10749 }
10750 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10751 if(NULL == pWdaParams)
10752 {
10753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010755 VOS_ASSERT(0);
10756 vos_mem_free(wdiFlushAcReqParam);
10757 return VOS_STATUS_E_NOMEM;
10758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010761 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10762 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10763 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10764 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010765 /* Store Flush AC pointer, as this will be used for response */
10766 /* store Params pass it to WDI */
10767 pWdaParams->pWdaContext = pWDA;
10768 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10769 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10771 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 if(IS_WDI_STATUS_FAILURE(status))
10773 {
10774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10775 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10776 vos_mem_free(pWdaParams->wdaMsgParam) ;
10777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10778 vos_mem_free(pWdaParams) ;
10779 //TODO: respond to TL with failure
10780 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010781 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010782}
Jeff Johnson295189b2012-06-20 16:38:30 -070010783/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010784 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010785 *
10786 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010787void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010788{
10789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10790 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010791 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010792
10793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010794 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010795 if(NULL == pWdaParams)
10796 {
10797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010798 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010799 VOS_ASSERT(0) ;
10800 return ;
10801 }
10802 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10803 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10804 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10805 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10806 {
10807 pWDA->wdaAmpSessionOn = VOS_FALSE;
10808 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 vos_mem_free(pWdaParams->wdaMsgParam) ;
10810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10811 vos_mem_free(pWdaParams) ;
10812 /*
10813 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10814 * param here
10815 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010816 return ;
10817}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010818/*
10819 * FUNCTION: WDA_BtAmpEventReqCallback
10820 * Free memory.
10821 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10822 */
10823void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10824{
10825 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10826 tWDA_CbContext *pWDA;
10827 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010828
Yue Ma7f44bbe2013-04-12 11:47:39 -070010829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10830 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10831
10832 if(NULL == pWdaParams)
10833 {
10834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10835 "%s: pWdaParams received NULL", __func__);
10836 VOS_ASSERT(0);
10837 return;
10838 }
10839
10840 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10841 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10842
10843 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10844 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10845 {
10846 pWDA->wdaAmpSessionOn = VOS_FALSE;
10847 }
10848
10849 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10850 {
10851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10852 vos_mem_free(pWdaParams->wdaMsgParam);
10853 vos_mem_free(pWdaParams);
10854 }
10855
10856 return;
10857}
Jeff Johnson295189b2012-06-20 16:38:30 -070010858/*
10859 * FUNCTION: WDA_ProcessBtAmpEventReq
10860 * Request to WDI to Update with BT AMP events.
10861 */
10862VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10863 tSmeBtAmpEvent *pBtAmpEventParams)
10864{
10865 WDI_Status status = WDI_STATUS_SUCCESS ;
10866 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10867 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10868 sizeof(WDI_BtAmpEventParamsType)) ;
10869 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010871 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010872 if(NULL == wdiBtAmpEventParam)
10873 {
10874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010875 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010876 VOS_ASSERT(0);
10877 return VOS_STATUS_E_NOMEM;
10878 }
10879 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10880 if(NULL == pWdaParams)
10881 {
10882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 VOS_ASSERT(0);
10885 vos_mem_free(wdiBtAmpEventParam);
10886 return VOS_STATUS_E_NOMEM;
10887 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10889 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010890 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10891 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010892 /* Store BT AMP event pointer, as this will be used for response */
10893 /* store Params pass it to WDI */
10894 pWdaParams->pWdaContext = pWDA;
10895 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10896 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010897 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010898 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010899 if(IS_WDI_STATUS_FAILURE(status))
10900 {
10901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10902 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10903 vos_mem_free(pWdaParams->wdaMsgParam) ;
10904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10905 vos_mem_free(pWdaParams) ;
10906 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010907 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10908 {
10909 pWDA->wdaAmpSessionOn = VOS_TRUE;
10910 }
10911 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010912}
10913
Jeff Johnson295189b2012-06-20 16:38:30 -070010914/*
10915 * FUNCTION: WDA_FTMCommandReqCallback
10916 * Handle FTM CMD response came from HAL
10917 * Route responce to HDD FTM
10918 */
10919void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10920 void *usrData)
10921{
10922 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010923 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10924 {
10925 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010926 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 return;
10928 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 /* Release Current FTM Command Request */
10930 vos_mem_free(pWDA->wdaFTMCmdReq);
10931 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 /* Post FTM Responce to HDD FTM */
10933 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010934 return;
10935}
Jeff Johnson295189b2012-06-20 16:38:30 -070010936/*
10937 * FUNCTION: WDA_ProcessFTMCommand
10938 * Send FTM command to WDI
10939 */
10940VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10941 tPttMsgbuffer *pPTTFtmCmd)
10942{
10943 WDI_Status status = WDI_STATUS_SUCCESS;
10944 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 ftmCMDReq = (WDI_FTMCommandReqType *)
10946 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10947 if(NULL == ftmCMDReq)
10948 {
10949 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10950 "WDA FTM Command buffer alloc fail");
10951 return VOS_STATUS_E_NOMEM;
10952 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010953 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10954 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010955 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010956 /* Send command to WDI */
10957 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 return status;
10959}
Jeff Johnsone7245742012-09-05 17:12:55 -070010960#ifdef FEATURE_OEM_DATA_SUPPORT
10961/*
10962 * FUNCTION: WDA_StartOemDataReqCallback
10963 *
10964 */
10965void WDA_StartOemDataReqCallback(
10966 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10967 void* pUserData)
10968{
10969 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010970 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10971 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010972 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010973
Jeff Johnsone7245742012-09-05 17:12:55 -070010974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010975 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010976
10977 if(NULL == pWdaParams)
10978 {
10979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010980 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010981 VOS_ASSERT(0) ;
10982 return ;
10983 }
10984 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10985
Jeff Johnsone7245742012-09-05 17:12:55 -070010986 if(NULL == pWDA)
10987 {
10988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010989 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010990 VOS_ASSERT(0);
10991 return ;
10992 }
10993
10994 /*
10995 * Allocate memory for response params sent to PE
10996 */
10997 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10998
10999 // Check if memory is allocated for OemdataMeasRsp Params.
11000 if(NULL == pOemDataRspParams)
11001 {
11002 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11003 "OEM DATA WDA callback alloc fail");
11004 VOS_ASSERT(0) ;
11005 return;
11006 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011007
Jeff Johnsone7245742012-09-05 17:12:55 -070011008 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11010 vos_mem_free(pWdaParams->wdaMsgParam);
11011 vos_mem_free(pWdaParams) ;
11012
Jeff Johnsone7245742012-09-05 17:12:55 -070011013 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011014 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011015 * Also, here success always means that we have atleast one BSSID.
11016 */
11017 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11018
11019 //enable Tx
11020 status = WDA_ResumeDataTx(pWDA);
11021 if(status != VOS_STATUS_SUCCESS)
11022 {
11023 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11024 }
11025 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11026 return ;
11027}
11028/*
11029 * FUNCTION: WDA_ProcessStartOemDataReq
11030 * Send Start Oem Data Req to WDI
11031 */
11032VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11033 tStartOemDataReq *pOemDataReqParams)
11034{
11035 WDI_Status status = WDI_STATUS_SUCCESS;
11036 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011037 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011038
11039 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11040
11041 if(NULL == wdiOemDataReqParams)
11042 {
11043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011045 VOS_ASSERT(0);
11046 return VOS_STATUS_E_NOMEM;
11047 }
11048
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011049 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11050 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11051 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11052 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011053
11054 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11055
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11057 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011058 {
11059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011061 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011062 vos_mem_free(pOemDataReqParams);
11063 VOS_ASSERT(0);
11064 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011065 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011066
Bernald44a1ae2013-01-09 08:30:39 -080011067 pWdaParams->pWdaContext = (void*)pWDA;
11068 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11069 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011070
11071 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11072 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011073
11074 if(IS_WDI_STATUS_FAILURE(status))
11075 {
11076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11077 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11079 vos_mem_free(pWdaParams->wdaMsgParam);
11080 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011081 }
11082 return CONVERT_WDI2VOS_STATUS(status) ;
11083}
11084#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011085/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011086 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011087 *
11088 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011089void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011090{
11091 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011093 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011094 if(NULL == pWdaParams)
11095 {
11096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011097 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 VOS_ASSERT(0) ;
11099 return ;
11100 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011101
11102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11103 vos_mem_free(pWdaParams->wdaMsgParam);
11104 vos_mem_free(pWdaParams);
11105
11106 return ;
11107}
11108/*
11109 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11110 * Free memory.
11111 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11112 */
11113void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11114{
11115 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11116
11117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11118 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11119
11120 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011121 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11123 "%s: pWdaParams received NULL", __func__);
11124 VOS_ASSERT(0);
11125 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011126 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011127
11128 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 {
11130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011131 vos_mem_free(pWdaParams->wdaMsgParam);
11132 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011134
11135 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011136}
Jeff Johnson295189b2012-06-20 16:38:30 -070011137#ifdef WLAN_FEATURE_GTK_OFFLOAD
11138/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011139 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011140 *
11141 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011142void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011143 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011144{
11145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11146
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011148 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011149 if(NULL == pWdaParams)
11150 {
11151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11152 "%s: pWdaParams received NULL", __func__);
11153 VOS_ASSERT(0);
11154 return;
11155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011156
Jeff Johnson295189b2012-06-20 16:38:30 -070011157 vos_mem_free(pWdaParams->wdaMsgParam) ;
11158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11159 vos_mem_free(pWdaParams) ;
11160
11161 //print a msg, nothing else to do
11162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011163 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011164
11165 return ;
11166}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011167/*
11168 * FUNCTION: WDA_GTKOffloadReqCallback
11169 * Free memory.
11170 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11171 */
11172void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11173{
11174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011175
Yue Ma7f44bbe2013-04-12 11:47:39 -070011176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11177 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11178
11179 if(NULL == pWdaParams)
11180 {
11181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11182 "%s: pWdaParams received NULL", __func__);
11183 VOS_ASSERT(0);
11184 return;
11185 }
11186
11187 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11188 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011189 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11190 sizeof(WDI_GtkOffloadReqMsg));
11191 vos_mem_zero(pWdaParams->wdaMsgParam,
11192 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11194 vos_mem_free(pWdaParams->wdaMsgParam);
11195 vos_mem_free(pWdaParams);
11196 }
11197
11198 return;
11199}
Jeff Johnson295189b2012-06-20 16:38:30 -070011200/*
11201 * FUNCTION: WDA_ProcessGTKOffloadReq
11202 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11203 * to broadcast traffic (sta mode).
11204 */
11205VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11206 tpSirGtkOffloadParams pGtkOffloadParams)
11207{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011208 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011209 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11210 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11211 sizeof(WDI_GtkOffloadReqMsg)) ;
11212 tWDA_ReqParams *pWdaParams ;
11213
11214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011215 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011216
11217 if(NULL == wdiGtkOffloadReqMsg)
11218 {
11219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011221 VOS_ASSERT(0);
11222 return VOS_STATUS_E_NOMEM;
11223 }
11224
11225 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11226 if(NULL == pWdaParams)
11227 {
11228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011229 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011230 VOS_ASSERT(0);
11231 vos_mem_free(wdiGtkOffloadReqMsg);
11232 return VOS_STATUS_E_NOMEM;
11233 }
11234
11235 //
11236 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11237 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011238
11239 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011240 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011241
Jeff Johnson295189b2012-06-20 16:38:30 -070011242 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11243 // Copy KCK
11244 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11245 // Copy KEK
11246 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11247 // Copy KeyReplayCounter
11248 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11249 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11250
Yue Ma7f44bbe2013-04-12 11:47:39 -070011251 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11252 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011253
Jeff Johnson295189b2012-06-20 16:38:30 -070011254
11255 /* Store Params pass it to WDI */
11256 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11257 pWdaParams->pWdaContext = pWDA;
11258 /* Store param pointer as passed in by caller */
11259 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11260
Yue Ma7f44bbe2013-04-12 11:47:39 -070011261 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011262
11263 if(IS_WDI_STATUS_FAILURE(status))
11264 {
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11266 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011267 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11268 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11270 vos_mem_free(pWdaParams->wdaMsgParam);
11271 vos_mem_free(pWdaParams);
11272 }
11273
11274 return CONVERT_WDI2VOS_STATUS(status) ;
11275}
11276
11277/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011278 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011279 *
11280 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011281void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011282 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011283{
11284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11285 tWDA_CbContext *pWDA;
11286 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011287 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011288 vos_msg_t vosMsg;
11289
11290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011291 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011292
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011293 if(NULL == pWdaParams)
11294 {
11295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11296 "%s: pWdaParams received NULL", __func__);
11297 VOS_ASSERT(0);
11298 return;
11299 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011300
Nirav Shah374de6e2014-02-13 16:40:01 +053011301 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11302 if(NULL == pGtkOffloadGetInfoRsp)
11303 {
11304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11305 "%s: vos_mem_malloc failed ", __func__);
11306 VOS_ASSERT(0);
11307 return;
11308 }
11309
Jeff Johnson295189b2012-06-20 16:38:30 -070011310 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11311 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11312
11313 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11314 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11315
11316 /* Message Header */
11317 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011318 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011319
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011320 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11321 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11322 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11323 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11324 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011325
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011326 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11327 pwdiGtkOffloadGetInfoRsparams->bssId,
11328 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011329 /* VOS message wrapper */
11330 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11331 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11332 vosMsg.bodyval = 0;
11333
11334 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11335 {
11336 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011337 vos_mem_zero(pGtkOffloadGetInfoRsp,
11338 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011339 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11340 }
11341
11342 vos_mem_free(pWdaParams->wdaMsgParam) ;
11343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11344 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011345
11346 return;
11347}
11348/*
11349 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11350 * Free memory and send RSP back to SME.
11351 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11352 */
11353void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11354{
11355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11356 vos_msg_t vosMsg;
11357
11358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11359 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11360
11361 if(NULL == pWdaParams)
11362 {
11363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11364 "%s: pWdaParams received NULL", __func__);
11365 VOS_ASSERT(0);
11366 return;
11367 }
11368
11369 /* VOS message wrapper */
11370 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11371 vosMsg.bodyptr = NULL;
11372 vosMsg.bodyval = 0;
11373
11374 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11375 {
11376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11377 vos_mem_free(pWdaParams->wdaMsgParam);
11378 vos_mem_free(pWdaParams);
11379 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11380 }
11381
11382 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011383}
11384#endif
11385
11386/*
11387 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11388 * Request to WDI to set Tx Per Tracking configurations
11389 */
11390VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11391{
11392 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011393 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011394 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11395 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11396 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11397 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011399 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011400 if(NULL == pwdiSetTxPerTrackingReqParams)
11401 {
11402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 vos_mem_free(pTxPerTrackingParams);
11405 VOS_ASSERT(0);
11406 return VOS_STATUS_E_NOMEM;
11407 }
11408 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11409 if(NULL == pWdaParams)
11410 {
11411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11414 vos_mem_free(pTxPerTrackingParams);
11415 VOS_ASSERT(0);
11416 return VOS_STATUS_E_NOMEM;
11417 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11419 pTxPerTrackingParams->ucTxPerTrackingEnable;
11420 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11421 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11422 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11423 pTxPerTrackingParams->ucTxPerTrackingRatio;
11424 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11425 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011426 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11427 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 /* Store param pointer as passed in by caller */
11429 /* store Params pass it to WDI
11430 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11431 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11432 pWdaParams->pWdaContext = pWDA;
11433 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011434 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011435 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011436 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011437 {
11438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11439 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011440 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011441 vos_mem_free(pWdaParams->wdaMsgParam) ;
11442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11443 vos_mem_free(pWdaParams) ;
11444 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011445 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011446
11447}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011448/*
11449 * FUNCTION: WDA_HALDumpCmdCallback
11450 * Send the VOS complete .
11451 */
11452void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11453 void* pUserData)
11454{
11455 tANI_U8 *buffer = NULL;
11456 tWDA_CbContext *pWDA = NULL;
11457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 if(NULL == pWdaParams)
11459 {
11460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011461 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011462 VOS_ASSERT(0) ;
11463 return ;
11464 }
11465
11466 pWDA = pWdaParams->pWdaContext;
11467 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011468 if(wdiRspParams->usBufferLen > 0)
11469 {
11470 /*Copy the Resp data to UMAC supplied buffer*/
11471 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11472 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11474 vos_mem_free(pWdaParams);
11475
11476 /* Indicate VOSS about the start complete */
11477 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011478 return ;
11479}
11480
Jeff Johnson295189b2012-06-20 16:38:30 -070011481/*
11482 * FUNCTION: WDA_ProcessHALDumpCmdReq
11483 * Send Dump command to WDI
11484 */
11485VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11486 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11487 tANI_U32 arg4, tANI_U8 *pBuffer)
11488{
11489 WDI_Status status = WDI_STATUS_SUCCESS;
11490 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11491 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11492 tWDA_ReqParams *pWdaParams ;
11493 pVosContextType pVosContext = NULL;
11494 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11496 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011497 if(pVosContext)
11498 {
11499 if (pVosContext->isLogpInProgress)
11500 {
11501 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11502 "%s:LOGP in Progress. Ignore!!!", __func__);
11503 return VOS_STATUS_E_BUSY;
11504 }
11505 }
11506 else
11507 {
11508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11509 "%s: VOS Context Null", __func__);
11510 return VOS_STATUS_E_RESOURCES;
11511 }
11512
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11514 if(NULL == pWdaParams)
11515 {
11516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011518 return VOS_STATUS_E_NOMEM;
11519 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011520 /* Allocate memory WDI request structure*/
11521 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11522 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11523 if(NULL == wdiHALDumpCmdReqParam)
11524 {
11525 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11526 "WDA HAL DUMP Command buffer alloc fail");
11527 vos_mem_free(pWdaParams);
11528 return WDI_STATUS_E_FAILURE;
11529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011530 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011531 /* Extract the arguments */
11532 wdiHalDumpCmdInfo->command = cmd;
11533 wdiHalDumpCmdInfo->argument1 = arg1;
11534 wdiHalDumpCmdInfo->argument2 = arg2;
11535 wdiHalDumpCmdInfo->argument3 = arg3;
11536 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011537 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011538 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11539
11540 /* Response message will be passed through the buffer */
11541 pWdaParams->wdaMsgParam = (void *)pBuffer;
11542
11543 /* store Params pass it to WDI */
11544 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 /* Send command to WDI */
11546 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011547 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 if ( vStatus != VOS_STATUS_SUCCESS )
11549 {
11550 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11551 {
11552 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011553 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011554 }
11555 else
11556 {
11557 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011558 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011559 }
11560 VOS_ASSERT(0);
11561 }
11562 return status;
11563}
Jeff Johnson295189b2012-06-20 16:38:30 -070011564#ifdef WLAN_FEATURE_GTK_OFFLOAD
11565/*
11566 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11567 * Request to WDI to get GTK Offload Information
11568 */
11569VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11570 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11571{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011572 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011573 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11574 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11575 tWDA_ReqParams *pWdaParams ;
11576
11577 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11578 {
11579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011581 VOS_ASSERT(0);
11582 return VOS_STATUS_E_NOMEM;
11583 }
11584
11585 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11586 if(NULL == pWdaParams)
11587 {
11588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011590 VOS_ASSERT(0);
11591 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11592 return VOS_STATUS_E_NOMEM;
11593 }
11594
Yue Ma7f44bbe2013-04-12 11:47:39 -070011595 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11596 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011597
Jeff Johnson295189b2012-06-20 16:38:30 -070011598 /* Store Params pass it to WDI */
11599 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11600 pWdaParams->pWdaContext = pWDA;
11601 /* Store param pointer as passed in by caller */
11602 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11603
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011604 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011605 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011606
Yue Ma7f44bbe2013-04-12 11:47:39 -070011607 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011608
11609 if(IS_WDI_STATUS_FAILURE(status))
11610 {
11611 /* failure returned by WDI API */
11612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11613 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11615 vos_mem_free(pWdaParams) ;
11616 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11617 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11618 }
11619
11620 return CONVERT_WDI2VOS_STATUS(status) ;
11621}
11622#endif // WLAN_FEATURE_GTK_OFFLOAD
11623
11624/*
Yue Mab9c86f42013-08-14 15:59:08 -070011625 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11626 *
11627 */
11628VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11629 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11630{
11631 WDI_Status wdiStatus;
11632 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11633
11634 addPeriodicTxPtrnParams =
11635 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11636
11637 if (NULL == addPeriodicTxPtrnParams)
11638 {
11639 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11640 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11641 __func__);
11642
11643 return VOS_STATUS_E_NOMEM;
11644 }
11645
11646 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11647 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11648
11649 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11650 addPeriodicTxPtrnParams->pUserData = pWDA;
11651
11652 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11653
11654 if (WDI_STATUS_PENDING == wdiStatus)
11655 {
11656 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11657 "Pending received for %s:%d", __func__, __LINE__ );
11658 }
11659 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11660 {
11661 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11662 "Failure in %s:%d", __func__, __LINE__ );
11663 }
11664
11665 vos_mem_free(addPeriodicTxPtrnParams);
11666
11667 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11668}
11669
11670/*
11671 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11672 *
11673 */
11674VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11675 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11676{
11677 WDI_Status wdiStatus;
11678 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11679
11680 delPeriodicTxPtrnParams =
11681 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11682
11683 if (NULL == delPeriodicTxPtrnParams)
11684 {
11685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11686 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11687 __func__);
11688
11689 return VOS_STATUS_E_NOMEM;
11690 }
11691
11692 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11693 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11694
11695 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11696 delPeriodicTxPtrnParams->pUserData = pWDA;
11697
11698 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11699
11700 if (WDI_STATUS_PENDING == wdiStatus)
11701 {
11702 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11703 "Pending received for %s:%d", __func__, __LINE__ );
11704 }
11705 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11706 {
11707 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11708 "Failure in %s:%d", __func__, __LINE__ );
11709 }
11710
11711 vos_mem_free(delPeriodicTxPtrnParams);
11712
11713 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11714}
11715
Rajeev79dbe4c2013-10-05 11:03:42 +053011716#ifdef FEATURE_WLAN_BATCH_SCAN
11717/*
11718 * FUNCTION: WDA_ProcessStopBatchScanInd
11719 *
11720 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11721 *
11722 * PARAM:
11723 * pWDA: pointer to WDA context
11724 * pReq: pointer to stop batch scan request
11725 */
11726VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11727 tSirStopBatchScanInd *pReq)
11728{
11729 WDI_Status wdiStatus;
11730 WDI_StopBatchScanIndType wdiReq;
11731
11732 wdiReq.param = pReq->param;
11733
11734 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11735
11736 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11737 {
11738 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11739 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11740 }
11741
11742 vos_mem_free(pReq);
11743
11744 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11745}
11746/*==========================================================================
11747 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11748
11749 DESCRIPTION
11750 API to pull batch scan result from FW
11751
11752 PARAMETERS
11753 pWDA: Pointer to WDA context
11754 pGetBatchScanReq: Pointer to get batch scan result indication
11755
11756 RETURN VALUE
11757 NONE
11758
11759===========================================================================*/
11760VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11761 tSirTriggerBatchScanResultInd *pReq)
11762{
11763 WDI_Status wdiStatus;
11764 WDI_TriggerBatchScanResultIndType wdiReq;
11765
11766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11767 "------> %s " ,__func__);
11768
11769 wdiReq.param = pReq->param;
11770
11771 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11772
11773 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11774 {
11775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11776 "Trigger batch scan result ind failed %s:%d",
11777 __func__, wdiStatus);
11778 }
11779
11780 vos_mem_free(pReq);
11781
11782 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11783}
11784
11785/*==========================================================================
11786 FUNCTION WDA_SetBatchScanRespCallback
11787
11788 DESCRIPTION
11789 API to process set batch scan response from FW
11790
11791 PARAMETERS
11792 pRsp: Pointer to set batch scan response
11793 pUserData: Pointer to user data
11794
11795 RETURN VALUE
11796 NONE
11797
11798===========================================================================*/
11799void WDA_SetBatchScanRespCallback
11800(
11801 WDI_SetBatchScanRspType *pRsp,
11802 void* pUserData
11803)
11804{
11805 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11806 tpAniSirGlobal pMac;
11807 void *pCallbackContext;
11808 tWDA_CbContext *pWDA = NULL ;
11809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11810
11811
11812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11813 "<------ %s " ,__func__);
11814 if (NULL == pWdaParams)
11815 {
11816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11817 "%s: pWdaParams received NULL", __func__);
11818 VOS_ASSERT(0) ;
11819 return ;
11820 }
11821
11822 /*extract WDA context*/
11823 pWDA = pWdaParams->pWdaContext;
11824 if (NULL == pWDA)
11825 {
11826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11827 "%s:pWDA is NULL can't invole HDD callback",
11828 __func__);
11829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11830 vos_mem_free(pWdaParams->wdaMsgParam);
11831 vos_mem_free(pWdaParams);
11832 VOS_ASSERT(0);
11833 return;
11834 }
11835
11836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11837 vos_mem_free(pWdaParams->wdaMsgParam);
11838 vos_mem_free(pWdaParams);
11839
11840 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11841 if (NULL == pMac)
11842 {
11843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11844 "%s:pMac is NULL", __func__);
11845 VOS_ASSERT(0);
11846 return;
11847 }
11848
11849 pHddSetBatchScanRsp =
11850 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11851 if (NULL == pHddSetBatchScanRsp)
11852 {
11853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11854 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11855 VOS_ASSERT(0);
11856 return;
11857 }
11858
11859 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11860
11861 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11862 /*call hdd callback with set batch scan response data*/
11863 if(pMac->pmc.setBatchScanReqCallback)
11864 {
11865 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11866 }
11867 else
11868 {
11869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11870 "%s:HDD callback is null", __func__);
11871 VOS_ASSERT(0);
11872 }
11873
11874 vos_mem_free(pHddSetBatchScanRsp);
11875 return ;
11876}
11877
11878/*==========================================================================
11879 FUNCTION WDA_ProcessSetBatchScanReq
11880
11881 DESCRIPTION
11882 API to send set batch scan request to WDI
11883
11884 PARAMETERS
11885 pWDA: Pointer to WDA context
11886 pSetBatchScanReq: Pointer to set batch scan req
11887
11888 RETURN VALUE
11889 NONE
11890
11891===========================================================================*/
11892VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11893 tSirSetBatchScanReq *pSetBatchScanReq)
11894{
11895 WDI_Status status;
11896 tWDA_ReqParams *pWdaParams ;
11897 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11898
11899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11900 "------> %s " ,__func__);
11901
11902 pWdiSetBatchScanReq =
11903 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11904 if (NULL == pWdiSetBatchScanReq)
11905 {
11906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11907 "%s: VOS MEM Alloc Failure", __func__);
11908 vos_mem_free(pSetBatchScanReq);
11909 VOS_ASSERT(0);
11910 return VOS_STATUS_E_NOMEM;
11911 }
11912
11913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11914 if (NULL == pWdaParams)
11915 {
11916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11917 "%s: VOS MEM Alloc Failure", __func__);
11918 VOS_ASSERT(0);
11919 vos_mem_free(pSetBatchScanReq);
11920 vos_mem_free(pWdiSetBatchScanReq);
11921 return VOS_STATUS_E_NOMEM;
11922 }
11923
11924 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11925 pWdiSetBatchScanReq->numberOfScansToBatch =
11926 pSetBatchScanReq->numberOfScansToBatch;
11927 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11928 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11929 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11930
11931 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11932 pWdaParams->pWdaContext = pWDA;
11933 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11934
11935 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11936 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11937 if (IS_WDI_STATUS_FAILURE(status))
11938 {
11939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11940 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11942 vos_mem_free(pWdaParams->wdaMsgParam);
11943 vos_mem_free(pWdaParams);
11944 }
11945 return CONVERT_WDI2VOS_STATUS(status);
11946}
11947
11948#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011949/*
11950 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11951 *
11952 * DESCRIPTION: This function sends start/update OBSS scan
11953 * inidcation message to WDI
11954 *
11955 * PARAM:
11956 * pWDA: pointer to WDA context
11957 * pReq: pointer to start OBSS scan request
11958 */
11959VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11960 tSirHT40OBSSScanInd *pReq)
11961{
11962 WDI_Status status;
11963 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11964 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011965
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11967 "------> %s " ,__func__);
11968 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11969 wdiOBSSScanParams.pUserData = pWDA;
11970
11971 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11972 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11973 pWdiOBSSScanInd->scanType = pReq->scanType;
11974 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11975 pReq->OBSSScanActiveDwellTime;
11976 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11977 pReq->OBSSScanPassiveDwellTime;
11978 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11979 pReq->BSSChannelWidthTriggerScanInterval;
11980 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11981 pReq->BSSWidthChannelTransitionDelayFactor;
11982 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11983 pReq->OBSSScanActiveTotalPerChannel;
11984 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11985 pReq->OBSSScanPassiveTotalPerChannel;
11986 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11987 pReq->OBSSScanActivityThreshold;
11988 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11989 vos_mem_copy(pWdiOBSSScanInd->channels,
11990 pReq->channels,
11991 pReq->channelCount);
11992 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11993 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11994 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11995 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11996 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11997
11998 vos_mem_copy(pWdiOBSSScanInd->ieField,
11999 pReq->ieField,
12000 pReq->ieFieldLen);
12001
12002 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12003 if (WDI_STATUS_PENDING == status)
12004 {
12005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12006 "Pending received for %s:%d ",__func__,__LINE__ );
12007 }
12008 else if (WDI_STATUS_SUCCESS_SYNC != status)
12009 {
12010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12011 "Failure in %s:%d ",__func__,__LINE__ );
12012 }
12013 return CONVERT_WDI2VOS_STATUS(status) ;
12014}
12015/*
12016 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12017 *
12018 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12019 *
12020 * PARAM:
12021 * pWDA: pointer to WDA context
12022 * pReq: pointer to stop batch scan request
12023 */
12024VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12025 tANI_U8 *bssIdx)
12026{
12027 WDI_Status status;
12028
12029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12030 "------> %s " ,__func__);
12031
12032 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12033 if (WDI_STATUS_PENDING == status)
12034 {
12035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12036 "Pending received for %s:%d ",__func__,__LINE__ );
12037 }
12038 else if (WDI_STATUS_SUCCESS_SYNC != status)
12039 {
12040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12041 "Failure in %s:%d ",__func__,__LINE__ );
12042 }
12043 return CONVERT_WDI2VOS_STATUS(status) ;
12044}
Yue Mab9c86f42013-08-14 15:59:08 -070012045/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012046 * FUNCTION: WDA_ProcessRateUpdateInd
12047 *
12048 */
12049VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12050 tSirRateUpdateInd *pRateUpdateParams)
12051{
12052 WDI_Status wdiStatus;
12053 WDI_RateUpdateIndParams rateUpdateParams;
12054
12055 vos_mem_copy(rateUpdateParams.bssid,
12056 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12057
12058 rateUpdateParams.ucastDataRateTxFlag =
12059 pRateUpdateParams->ucastDataRateTxFlag;
12060 rateUpdateParams.reliableMcastDataRateTxFlag =
12061 pRateUpdateParams->reliableMcastDataRateTxFlag;
12062 rateUpdateParams.mcastDataRate24GHzTxFlag =
12063 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12064 rateUpdateParams.mcastDataRate5GHzTxFlag =
12065 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12066
12067 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12068 rateUpdateParams.reliableMcastDataRate =
12069 pRateUpdateParams->reliableMcastDataRate;
12070 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12071 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12072
12073 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12074 rateUpdateParams.pUserData = pWDA;
12075
12076 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12077
12078 if (WDI_STATUS_PENDING == wdiStatus)
12079 {
12080 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12081 "Pending received for %s:%d", __func__, __LINE__ );
12082 }
12083 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12084 {
12085 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12086 "Failure in %s:%d", __func__, __LINE__ );
12087 }
12088
12089 vos_mem_free(pRateUpdateParams);
12090
12091 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12092}
12093
12094/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012095 * -------------------------------------------------------------------------
12096 * DATA interface with WDI for Mgmt Frames
12097 * -------------------------------------------------------------------------
12098 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012099/*
12100 * FUNCTION: WDA_TxComplete
12101 * Callback function for the WDA_TxPacket
12102 */
12103VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12104 VOS_STATUS status )
12105{
12106
12107 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12108 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012109 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012110
12111 if(NULL == wdaContext)
12112 {
12113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12114 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012115 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012116 VOS_ASSERT(0);
12117 return VOS_STATUS_E_FAILURE;
12118 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012119
12120 /*Check if frame was timed out or not*/
12121 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12122 (v_PVOID_t)&uUserData);
12123
12124 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12125 {
12126 /*Discard frame - no further processing is needed*/
12127 vos_pkt_return_packet(pData);
12128 return VOS_STATUS_SUCCESS;
12129 }
12130
Jeff Johnson295189b2012-06-20 16:38:30 -070012131 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12132 if( NULL!=wdaContext->pTxCbFunc)
12133 {
12134 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012135 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012136 {
12137 wdaContext->pTxCbFunc(pMac, pData);
12138 }
12139 else
12140 {
12141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012142 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012143 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 //Return from here since we reaching here because the packet already timeout
12145 return status;
12146 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012147 }
12148
12149 /*
12150 * Trigger the event to bring the HAL TL Tx complete function to come
12151 * out of wait
12152 * Let the coe above to complete the packet first. When this event is set,
12153 * the thread waiting for the event may run and set Vospacket_freed causing the original
12154 * packet not being freed.
12155 */
12156 status = vos_event_set(&wdaContext->txFrameEvent);
12157 if(!VOS_IS_STATUS_SUCCESS(status))
12158 {
12159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012160 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012161 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012162 return status;
12163}
Jeff Johnson295189b2012-06-20 16:38:30 -070012164/*
12165 * FUNCTION: WDA_TxPacket
12166 * Forward TX management frame to WDI
12167 */
12168VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12169 void *pFrmBuf,
12170 tANI_U16 frmLen,
12171 eFrameType frmType,
12172 eFrameTxDir txDir,
12173 tANI_U8 tid,
12174 pWDATxRxCompFunc pCompFunc,
12175 void *pData,
12176 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012177 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012178{
12179 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12180 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12181 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12182 tANI_U8 eventIdx = 0;
12183 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12184 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012185 if((NULL == pWDA)||(NULL == pFrmBuf))
12186 {
12187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012188 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012189 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012190 VOS_ASSERT(0);
12191 return VOS_STATUS_E_FAILURE;
12192 }
12193
12194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012195 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012196 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12197 if(NULL == pMac)
12198 {
12199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012200 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012201 VOS_ASSERT(0);
12202 return VOS_STATUS_E_FAILURE;
12203 }
12204
12205
12206
12207 /* store the call back function in WDA context */
12208 pWDA->pTxCbFunc = pCompFunc;
12209 /* store the call back for the function of ackTxComplete */
12210 if( pAckTxComp )
12211 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012212 if( NULL != pWDA->pAckTxCbFunc )
12213 {
12214 /* Already TxComp is active no need to active again */
12215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012216 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012217 pWDA->pAckTxCbFunc( pMac, 0);
12218 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012219
Jeff Johnsone7245742012-09-05 17:12:55 -070012220 if( VOS_STATUS_SUCCESS !=
12221 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12222 {
12223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12224 "Tx Complete timeout Timer Stop Failed ");
12225 }
12226 else
12227 {
12228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012229 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012230 }
12231 }
12232
12233 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12234 pWDA->pAckTxCbFunc = pAckTxComp;
12235 if( VOS_STATUS_SUCCESS !=
12236 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12237 {
12238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12239 "Tx Complete Timer Start Failed ");
12240 pWDA->pAckTxCbFunc = NULL;
12241 return eHAL_STATUS_FAILURE;
12242 }
12243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012244 /* Reset the event to be not signalled */
12245 status = vos_event_reset(&pWDA->txFrameEvent);
12246 if(!VOS_IS_STATUS_SUCCESS(status))
12247 {
12248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012249 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012250 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12251 if( pAckTxComp )
12252 {
12253 pWDA->pAckTxCbFunc = NULL;
12254 if( VOS_STATUS_SUCCESS !=
12255 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12256 {
12257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12258 "Tx Complete timeout Timer Stop Failed ");
12259 }
12260 }
12261 return VOS_STATUS_E_FAILURE;
12262 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012263
12264 /* If Peer Sta mask is set don't overwrite to self sta */
12265 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012266 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012267 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012268 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012269 else
12270 {
Ganesh K08bce952012-12-13 15:04:41 -080012271 /* Get system role, use the self station if in unknown role or STA role */
12272 systemRole = wdaGetGlobalSystemRole(pMac);
12273 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12274 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012275#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012276 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012277#endif
Ganesh K08bce952012-12-13 15:04:41 -080012278 ))
12279 {
12280 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12281 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012282 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012283
Jeff Johnsone7245742012-09-05 17:12:55 -070012284 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12285 disassoc frame reaches the HW, HAL has already deleted the peer station */
12286 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012287 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012288 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012289 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012291 /*Send Probe request frames on self sta idx*/
12292 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012294 /* Since we donot want probe responses to be retried, send probe responses
12295 through the NO_ACK queues */
12296 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12297 {
12298 //probe response is sent out using self station and no retries options.
12299 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12300 }
12301 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12302 {
12303 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12304 }
12305 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012306 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012307
12308 /*Set frame tag to 0
12309 We will use the WDA user data in order to tag a frame as expired*/
12310 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12311 (v_PVOID_t)0);
12312
12313
12314 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12315 frmLen, ucTypeSubType, tid,
12316 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12317 {
12318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012319 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012320 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012321 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 -070012322 if( pAckTxComp )
12323 {
12324 pWDA->pAckTxCbFunc = NULL;
12325 if( VOS_STATUS_SUCCESS !=
12326 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12327 {
12328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12329 "Tx Complete timeout Timer Stop Failed ");
12330 }
12331 }
12332 return VOS_STATUS_E_FAILURE;
12333 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012334 /*
12335 * Wait for the event to be set by the TL, to get the response of TX
12336 * complete, this event should be set by the Callback function called by TL
12337 */
12338 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12339 &eventIdx);
12340 if(!VOS_IS_STATUS_SUCCESS(status))
12341 {
12342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12343 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012344 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012345 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12346 after the packet gets completed(packet freed once)*/
12347
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012348 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012349 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012350
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012351 /*Tag Frame as timed out for later deletion*/
12352 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12353 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
12354
Jeff Johnson295189b2012-06-20 16:38:30 -070012355 /* check whether the packet was freed already,so need not free again when
12356 * TL calls the WDA_Txcomplete routine
12357 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012358 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12359 /*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 -070012360 {
12361 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012362 } */
12363
Jeff Johnson295189b2012-06-20 16:38:30 -070012364 if( pAckTxComp )
12365 {
12366 pWDA->pAckTxCbFunc = NULL;
12367 if( VOS_STATUS_SUCCESS !=
12368 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12369 {
12370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12371 "Tx Complete timeout Timer Stop Failed ");
12372 }
12373 }
12374 status = VOS_STATUS_E_FAILURE;
12375 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012376#ifdef WLAN_DUMP_MGMTFRAMES
12377 if (VOS_IS_STATUS_SUCCESS(status))
12378 {
12379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12380 "%s() TX packet : SubType %d", __func__,pFc->subType);
12381 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12382 pData, frmLen);
12383 }
12384#endif
12385
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012386 if (VOS_IS_STATUS_SUCCESS(status))
12387 {
12388 if (pMac->fEnableDebugLog & 0x1)
12389 {
12390 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12391 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12392 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12393 {
12394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12395 pFc->type, pFc->subType);
12396 }
12397 }
12398 }
12399
12400
Jeff Johnson295189b2012-06-20 16:38:30 -070012401 return status;
12402}
Jeff Johnson295189b2012-06-20 16:38:30 -070012403/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012404 * FUNCTION: WDA_ProcessDHCPStartInd
12405 * Forward DHCP Start to WDI
12406 */
12407static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12408 tAniDHCPInd *dhcpStartInd)
12409{
12410 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012411 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012412
c_hpothu0b0cab72014-02-13 21:52:40 +053012413 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12414 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012415 sizeof(tSirMacAddr));
12416
c_hpothu0b0cab72014-02-13 21:52:40 +053012417 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012418
c_hpothu0b0cab72014-02-13 21:52:40 +053012419 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012420 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12422 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012423 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012424 else if (WDI_STATUS_SUCCESS_SYNC != status)
12425 {
12426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12427 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12428 }
12429
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012430 vos_mem_free(dhcpStartInd);
12431 return CONVERT_WDI2VOS_STATUS(status) ;
12432}
12433
12434 /*
12435 * FUNCTION: WDA_ProcessDHCPStopInd
12436 * Forward DHCP Stop to WDI
12437 */
12438 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12439 tAniDHCPInd *dhcpStopInd)
12440 {
12441 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012442 WDI_DHCPInd wdiDHCPInd;
12443
12444 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12445 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12446
12447 status = WDI_dhcpStopInd(&wdiDHCPInd);
12448
12449 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012450 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12452 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012453 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012454 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012455 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12457 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012458 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012459
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012460 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012461
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012462 return CONVERT_WDI2VOS_STATUS(status) ;
12463 }
12464
12465/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012466 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12467 *
12468 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12469 *
12470 * PARAM:
12471 * pWDA: pointer to WDA context
12472 * pReq: pointer to stop batch scan request
12473 */
12474VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12475 tpSpoofMacAddrReqParams pReq)
12476{
12477 WDI_Status wdiStatus;
12478 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12479 tWDA_ReqParams *pWdaParams;
12480
12481 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12482 sizeof(WDI_SpoofMacAddrInfoType));
12483 if(NULL == WDI_SpoofMacAddrInfoParams) {
12484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12485 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12486 VOS_ASSERT(0);
12487 return VOS_STATUS_E_NOMEM;
12488 }
12489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12490 if(NULL == pWdaParams) {
12491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12492 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012493 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012494 VOS_ASSERT(0);
12495 return VOS_STATUS_E_NOMEM;
12496 }
12497
12498 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12499 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12500
12501 pWdaParams->pWdaContext = pWDA;
12502 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012503 pWdaParams->wdaMsgParam = (void *)pReq;
12504
12505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12506 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12507
Siddharth Bhal171788a2014-09-29 21:02:40 +053012508 /* store Params pass it to WDI */
12509 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12510
12511 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012512 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12513 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012514
12515 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12516 {
12517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12518 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12520 vos_mem_free(pWdaParams->wdaMsgParam);
12521 vos_mem_free(pWdaParams);
12522 }
12523
12524 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12525}
12526
12527/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012528 * FUNCTION: WDA_McProcessMsg
12529 * Trigger DAL-AL to start CFG download
12530 */
12531VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12532{
12533 VOS_STATUS status = VOS_STATUS_SUCCESS;
12534 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012535 if(NULL == pMsg)
12536 {
12537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012538 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012539 VOS_ASSERT(0);
12540 return VOS_STATUS_E_FAILURE;
12541 }
12542
12543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012544 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012545
12546 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12547 if(NULL == pWDA )
12548 {
12549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012550 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012551 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012552 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012553 return VOS_STATUS_E_FAILURE;
12554 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012555 /* Process all the WDA messages.. */
12556 switch( pMsg->type )
12557 {
12558 case WNI_CFG_DNLD_REQ:
12559 {
12560 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012561 /* call WDA complete event if config download success */
12562 if( VOS_IS_STATUS_SUCCESS(status) )
12563 {
12564 vos_WDAComplete_cback(pVosContext);
12565 }
12566 else
12567 {
12568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12569 "WDA Config Download failure" );
12570 }
12571 break ;
12572 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012573 /*
12574 * Init SCAN request from PE, convert it into DAL format
12575 * and send it to DAL
12576 */
12577 case WDA_INIT_SCAN_REQ:
12578 {
12579 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12580 break ;
12581 }
12582 /* start SCAN request from PE */
12583 case WDA_START_SCAN_REQ:
12584 {
12585 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12586 break ;
12587 }
12588 /* end SCAN request from PE */
12589 case WDA_END_SCAN_REQ:
12590 {
12591 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12592 break ;
12593 }
12594 /* end SCAN request from PE */
12595 case WDA_FINISH_SCAN_REQ:
12596 {
12597 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12598 break ;
12599 }
12600 /* join request from PE */
12601 case WDA_CHNL_SWITCH_REQ:
12602 {
12603 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12604 {
12605 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12606 }
12607 else
12608 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012609 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12610 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12611 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12612 {
12613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12614 "call ProcessChannelSwitchReq_V1" );
12615 WDA_ProcessChannelSwitchReq_V1(pWDA,
12616 (tSwitchChannelParams*)pMsg->bodyptr) ;
12617 }
12618 else
12619 {
12620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12621 "call ProcessChannelSwitchReq" );
12622 WDA_ProcessChannelSwitchReq(pWDA,
12623 (tSwitchChannelParams*)pMsg->bodyptr) ;
12624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012625 }
12626 break ;
12627 }
12628 /* ADD BSS request from PE */
12629 case WDA_ADD_BSS_REQ:
12630 {
12631 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12632 break ;
12633 }
12634 case WDA_ADD_STA_REQ:
12635 {
12636 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12637 break ;
12638 }
12639 case WDA_DELETE_BSS_REQ:
12640 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012641 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12642 break ;
12643 }
12644 case WDA_DELETE_STA_REQ:
12645 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012646 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12647 break ;
12648 }
12649 case WDA_CONFIG_PARAM_UPDATE_REQ:
12650 {
12651 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12652 break ;
12653 }
12654 case WDA_SET_BSSKEY_REQ:
12655 {
12656 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12657 break ;
12658 }
12659 case WDA_SET_STAKEY_REQ:
12660 {
12661 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12662 break ;
12663 }
12664 case WDA_SET_STA_BCASTKEY_REQ:
12665 {
12666 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12667 break ;
12668 }
12669 case WDA_REMOVE_BSSKEY_REQ:
12670 {
12671 WDA_ProcessRemoveBssKeyReq(pWDA,
12672 (tRemoveBssKeyParams *)pMsg->bodyptr);
12673 break ;
12674 }
12675 case WDA_REMOVE_STAKEY_REQ:
12676 {
12677 WDA_ProcessRemoveStaKeyReq(pWDA,
12678 (tRemoveStaKeyParams *)pMsg->bodyptr);
12679 break ;
12680 }
12681 case WDA_REMOVE_STA_BCASTKEY_REQ:
12682 {
12683 /* TODO: currently UMAC is not sending this request, Add the code for
12684 handling this request when UMAC supports */
12685 break;
12686 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012687#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012688 case WDA_TSM_STATS_REQ:
12689 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012690 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012691 break;
12692 }
12693#endif
12694 case WDA_UPDATE_EDCA_PROFILE_IND:
12695 {
12696 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12697 break;
12698 }
12699 case WDA_ADD_TS_REQ:
12700 {
12701 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12702 break;
12703 }
12704 case WDA_DEL_TS_REQ:
12705 {
12706 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12707 break;
12708 }
12709 case WDA_ADDBA_REQ:
12710 {
12711 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12712 break;
12713 }
12714 case WDA_DELBA_IND:
12715 {
12716 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12717 break;
12718 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012719 case WDA_UPDATE_CHAN_LIST_REQ:
12720 {
12721 WDA_ProcessUpdateChannelList(pWDA,
12722 (tSirUpdateChanList *)pMsg->bodyptr);
12723 break;
12724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012725 case WDA_SET_LINK_STATE:
12726 {
12727 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12728 break;
12729 }
12730 case WDA_GET_STATISTICS_REQ:
12731 {
12732 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12733 break;
12734 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012735#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012736 case WDA_GET_ROAM_RSSI_REQ:
12737 {
12738 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12739 break;
12740 }
12741#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012742 case WDA_PWR_SAVE_CFG:
12743 {
12744 if(pWDA->wdaState == WDA_READY_STATE)
12745 {
12746 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12747 }
12748 else
12749 {
12750 if(NULL != pMsg->bodyptr)
12751 {
12752 vos_mem_free(pMsg->bodyptr);
12753 }
12754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12755 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12756 }
12757 break;
12758 }
12759 case WDA_ENTER_IMPS_REQ:
12760 {
12761 if(pWDA->wdaState == WDA_READY_STATE)
12762 {
12763 WDA_ProcessEnterImpsReq(pWDA);
12764 }
12765 else
12766 {
12767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12768 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12769 }
12770 break;
12771 }
12772 case WDA_EXIT_IMPS_REQ:
12773 {
12774 if(pWDA->wdaState == WDA_READY_STATE)
12775 {
12776 WDA_ProcessExitImpsReq(pWDA);
12777 }
12778 else
12779 {
12780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12781 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12782 }
12783 break;
12784 }
12785 case WDA_ENTER_BMPS_REQ:
12786 {
12787 if(pWDA->wdaState == WDA_READY_STATE)
12788 {
12789 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12790 }
12791 else
12792 {
12793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12794 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12795 }
12796 break;
12797 }
12798 case WDA_EXIT_BMPS_REQ:
12799 {
12800 if(pWDA->wdaState == WDA_READY_STATE)
12801 {
12802 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12803 }
12804 else
12805 {
12806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12807 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12808 }
12809 break;
12810 }
12811 case WDA_ENTER_UAPSD_REQ:
12812 {
12813 if(pWDA->wdaState == WDA_READY_STATE)
12814 {
12815 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12816 }
12817 else
12818 {
12819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12820 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12821 }
12822 break;
12823 }
12824 case WDA_EXIT_UAPSD_REQ:
12825 {
12826 if(pWDA->wdaState == WDA_READY_STATE)
12827 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012828 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012829 }
12830 else
12831 {
12832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12833 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12834 }
12835 break;
12836 }
12837 case WDA_UPDATE_UAPSD_IND:
12838 {
12839 if(pWDA->wdaState == WDA_READY_STATE)
12840 {
12841 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12842 }
12843 else
12844 {
12845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12846 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12847 }
12848 break;
12849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012850 case WDA_REGISTER_PE_CALLBACK :
12851 {
12852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12853 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12854 /*TODO: store the PE callback */
12855 /* Do Nothing? MSG Body should be freed at here */
12856 if(NULL != pMsg->bodyptr)
12857 {
12858 vos_mem_free(pMsg->bodyptr);
12859 }
12860 break;
12861 }
12862 case WDA_SYS_READY_IND :
12863 {
12864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12865 "Handling msg type WDA_SYS_READY_IND " );
12866 pWDA->wdaState = WDA_READY_STATE;
12867 if(NULL != pMsg->bodyptr)
12868 {
12869 vos_mem_free(pMsg->bodyptr);
12870 }
12871 break;
12872 }
12873 case WDA_BEACON_FILTER_IND :
12874 {
12875 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12876 break;
12877 }
12878 case WDA_BTC_SET_CFG:
12879 {
12880 /*TODO: handle this while dealing with BTC */
12881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12882 "Handling msg type WDA_BTC_SET_CFG " );
12883 /* Do Nothing? MSG Body should be freed at here */
12884 if(NULL != pMsg->bodyptr)
12885 {
12886 vos_mem_free(pMsg->bodyptr);
12887 }
12888 break;
12889 }
12890 case WDA_SIGNAL_BT_EVENT:
12891 {
12892 /*TODO: handle this while dealing with BTC */
12893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12894 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12895 /* Do Nothing? MSG Body should be freed at here */
12896 if(NULL != pMsg->bodyptr)
12897 {
12898 vos_mem_free(pMsg->bodyptr);
12899 }
12900 break;
12901 }
12902 case WDA_CFG_RXP_FILTER_REQ:
12903 {
12904 WDA_ProcessConfigureRxpFilterReq(pWDA,
12905 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12906 break;
12907 }
12908 case WDA_SET_HOST_OFFLOAD:
12909 {
12910 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12911 break;
12912 }
12913 case WDA_SET_KEEP_ALIVE:
12914 {
12915 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12916 break;
12917 }
12918#ifdef WLAN_NS_OFFLOAD
12919 case WDA_SET_NS_OFFLOAD:
12920 {
12921 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12922 break;
12923 }
12924#endif //WLAN_NS_OFFLOAD
12925 case WDA_ADD_STA_SELF_REQ:
12926 {
12927 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12928 break;
12929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 case WDA_DEL_STA_SELF_REQ:
12931 {
12932 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12933 break;
12934 }
12935 case WDA_WOWL_ADD_BCAST_PTRN:
12936 {
12937 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12938 break;
12939 }
12940 case WDA_WOWL_DEL_BCAST_PTRN:
12941 {
12942 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12943 break;
12944 }
12945 case WDA_WOWL_ENTER_REQ:
12946 {
12947 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12948 break;
12949 }
12950 case WDA_WOWL_EXIT_REQ:
12951 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012952 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012953 break;
12954 }
12955 case WDA_TL_FLUSH_AC_REQ:
12956 {
12957 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12958 break;
12959 }
12960 case WDA_SIGNAL_BTAMP_EVENT:
12961 {
12962 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12963 break;
12964 }
Abhishek Singh85b74712014-10-08 11:38:19 +053012965 case WDA_FW_STATS_GET_REQ:
12966 {
12967 WDA_ProcessFWStatsGetReq(pWDA,
12968 (tSirFWStatsGetReq *)pMsg->bodyptr);
12969 break;
12970 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053012971#ifdef WLAN_FEATURE_LINK_LAYER_STATS
12972 case WDA_LINK_LAYER_STATS_SET_REQ:
12973 {
12974 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
12975 break;
12976 }
12977 case WDA_LINK_LAYER_STATS_GET_REQ:
12978 {
12979 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
12980 break;
12981 }
12982 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
12983 {
12984 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
12985 break;
12986 }
12987#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053012988#ifdef WLAN_FEATURE_EXTSCAN
12989 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
12990 {
12991 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
12992 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
12993 break;
12994 }
12995 case WDA_EXTSCAN_START_REQ:
12996 {
12997 WDA_ProcessEXTScanStartReq(pWDA,
12998 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
12999 break;
13000 }
13001 case WDA_EXTSCAN_STOP_REQ:
13002 {
13003 WDA_ProcessEXTScanStopReq(pWDA,
13004 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13005 break;
13006 }
13007 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13008 {
13009 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13010 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13011 break;
13012 }
13013 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13014 {
13015 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13016 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13017 break;
13018 }
13019 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13020 {
13021 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13022 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13023 break;
13024 }
13025 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13026 {
13027 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13028 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13029 break;
13030 }
13031 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13032 {
13033 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13034 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13035 break;
13036 }
13037#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013038#ifdef WDA_UT
13039 case WDA_WDI_EVENT_MSG:
13040 {
13041 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13042 break ;
13043 }
13044#endif
13045 case WDA_UPDATE_BEACON_IND:
13046 {
13047 WDA_ProcessUpdateBeaconParams(pWDA,
13048 (tUpdateBeaconParams *)pMsg->bodyptr);
13049 break;
13050 }
13051 case WDA_SEND_BEACON_REQ:
13052 {
13053 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13054 break;
13055 }
13056 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13057 {
13058 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13059 (tSendProbeRespParams *)pMsg->bodyptr);
13060 break;
13061 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013062#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013063 case WDA_SET_MAX_TX_POWER_REQ:
13064 {
13065 WDA_ProcessSetMaxTxPowerReq(pWDA,
13066 (tMaxTxPowerParams *)pMsg->bodyptr);
13067 break;
13068 }
13069#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013070 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13071 {
13072 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13073 pMsg->bodyptr);
13074 break;
13075 }
schang86c22c42013-03-13 18:41:24 -070013076 case WDA_SET_TX_POWER_REQ:
13077 {
13078 WDA_ProcessSetTxPowerReq(pWDA,
13079 (tSirSetTxPowerReq *)pMsg->bodyptr);
13080 break;
13081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013082 case WDA_SET_P2P_GO_NOA_REQ:
13083 {
13084 WDA_ProcessSetP2PGONOAReq(pWDA,
13085 (tP2pPsParams *)pMsg->bodyptr);
13086 break;
13087 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013088 /* timer related messages */
13089 case WDA_TIMER_BA_ACTIVITY_REQ:
13090 {
13091 WDA_BaCheckActivity(pWDA) ;
13092 break ;
13093 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013094
13095 /* timer related messages */
13096 case WDA_TIMER_TRAFFIC_STATS_IND:
13097 {
13098 WDA_TimerTrafficStatsInd(pWDA);
13099 break;
13100 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013101#ifdef WLAN_FEATURE_VOWIFI_11R
13102 case WDA_AGGR_QOS_REQ:
13103 {
13104 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13105 break;
13106 }
13107#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 case WDA_FTM_CMD_REQ:
13109 {
13110 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13111 break ;
13112 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013113#ifdef FEATURE_OEM_DATA_SUPPORT
13114 case WDA_START_OEM_DATA_REQ:
13115 {
13116 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13117 break;
13118 }
13119#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013120 /* Tx Complete Time out Indication */
13121 case WDA_TX_COMPLETE_TIMEOUT_IND:
13122 {
13123 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13124 break;
13125 }
13126 case WDA_WLAN_SUSPEND_IND:
13127 {
13128 WDA_ProcessWlanSuspendInd(pWDA,
13129 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13130 break;
13131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013132 case WDA_WLAN_RESUME_REQ:
13133 {
13134 WDA_ProcessWlanResumeReq(pWDA,
13135 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13136 break;
13137 }
13138
13139 case WDA_UPDATE_CF_IND:
13140 {
13141 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13142 pMsg->bodyptr = NULL;
13143 break;
13144 }
13145#ifdef FEATURE_WLAN_SCAN_PNO
13146 case WDA_SET_PNO_REQ:
13147 {
13148 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13149 break;
13150 }
13151 case WDA_UPDATE_SCAN_PARAMS_REQ:
13152 {
13153 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13154 break;
13155 }
13156 case WDA_SET_RSSI_FILTER_REQ:
13157 {
13158 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13159 break;
13160 }
13161#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013162#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013163 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013164 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013165 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013166 break;
13167 }
13168#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 case WDA_SET_TX_PER_TRACKING_REQ:
13170 {
13171 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13172 break;
13173 }
13174
13175#ifdef WLAN_FEATURE_PACKET_FILTERING
13176 case WDA_8023_MULTICAST_LIST_REQ:
13177 {
13178 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13179 break;
13180 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013181 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13182 {
13183 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13184 break;
13185 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013186 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13187 {
13188 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13189 break;
13190 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013191 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13192 {
13193 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13194 break;
13195 }
13196#endif // WLAN_FEATURE_PACKET_FILTERING
13197
13198
13199 case WDA_TRANSMISSION_CONTROL_IND:
13200 {
13201 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13202 break;
13203 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 case WDA_SET_POWER_PARAMS_REQ:
13205 {
13206 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13207 break;
13208 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013209#ifdef WLAN_FEATURE_GTK_OFFLOAD
13210 case WDA_GTK_OFFLOAD_REQ:
13211 {
13212 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13213 break;
13214 }
13215
13216 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13217 {
13218 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13219 break;
13220 }
13221#endif //WLAN_FEATURE_GTK_OFFLOAD
13222
13223 case WDA_SET_TM_LEVEL_REQ:
13224 {
13225 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13226 break;
13227 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013228
Mohit Khanna4a70d262012-09-11 16:30:12 -070013229 case WDA_UPDATE_OP_MODE:
13230 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013231 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13232 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13233 {
13234 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13235 }
13236 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013237 {
13238 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13239 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13240 else
13241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013242 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013243 }
13244 else
13245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013246 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013247 break;
13248 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013249#ifdef WLAN_FEATURE_11W
13250 case WDA_EXCLUDE_UNENCRYPTED_IND:
13251 {
13252 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13253 break;
13254 }
13255#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013256#ifdef FEATURE_WLAN_TDLS
13257 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13258 {
13259 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13260 break;
13261 }
13262#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013263 case WDA_DHCP_START_IND:
13264 {
13265 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13266 break;
13267 }
13268 case WDA_DHCP_STOP_IND:
13269 {
13270 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13271 break;
13272 }
Leo Chang9056f462013-08-01 19:21:11 -070013273#ifdef FEATURE_WLAN_LPHB
13274 case WDA_LPHB_CONF_REQ:
13275 {
13276 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13277 break;
13278 }
13279#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013280 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13281 {
13282 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13283 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13284 break;
13285 }
13286 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13287 {
13288 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13289 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13290 break;
13291 }
13292
Rajeev79dbe4c2013-10-05 11:03:42 +053013293#ifdef FEATURE_WLAN_BATCH_SCAN
13294 case WDA_SET_BATCH_SCAN_REQ:
13295 {
13296 WDA_ProcessSetBatchScanReq(pWDA,
13297 (tSirSetBatchScanReq *)pMsg->bodyptr);
13298 break;
13299 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013300 case WDA_RATE_UPDATE_IND:
13301 {
13302 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13303 break;
13304 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013305 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13306 {
13307 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13308 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13309 break;
13310 }
13311 case WDA_STOP_BATCH_SCAN_IND:
13312 {
13313 WDA_ProcessStopBatchScanInd(pWDA,
13314 (tSirStopBatchScanInd *)pMsg->bodyptr);
13315 break;
13316 }
c_hpothu92367912014-05-01 15:18:17 +053013317 case WDA_GET_BCN_MISS_RATE_REQ:
13318 WDA_ProcessGetBcnMissRateReq(pWDA,
13319 (tSirBcnMissRateReq *)pMsg->bodyptr);
13320 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013321#endif
13322
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013323 case WDA_HT40_OBSS_SCAN_IND:
13324 {
13325 WDA_ProcessHT40OBSSScanInd(pWDA,
13326 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13327 break;
13328 }
13329 case WDA_HT40_OBSS_STOP_SCAN_IND:
13330 {
13331 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13332 (tANI_U8*)pMsg->bodyptr);
13333 break;
13334 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013335// tdlsoffchan
13336#ifdef FEATURE_WLAN_TDLS
13337 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13338 {
13339 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13340 break;
13341 }
13342#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013343 case WDA_SPOOF_MAC_ADDR_REQ:
13344 {
13345 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13346 break;
13347 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 default:
13349 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013351 "No Handling for msg type %x in WDA "
13352 ,pMsg->type);
13353 /* Do Nothing? MSG Body should be freed at here */
13354 if(NULL != pMsg->bodyptr)
13355 {
13356 vos_mem_free(pMsg->bodyptr);
13357 }
13358 //WDA_VOS_ASSERT(0) ;
13359 }
13360 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013361 return status ;
13362}
13363
Jeff Johnson295189b2012-06-20 16:38:30 -070013364/*
13365 * FUNCTION: WDA_LowLevelIndCallback
13366 * IND API callback from WDI, send Ind to PE
13367 */
13368void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13369 void* pUserData )
13370{
13371 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13372#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13373 tSirRSSINotification rssiNotification;
13374#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013375 if(NULL == pWDA)
13376 {
13377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013378 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013379 VOS_ASSERT(0);
13380 return ;
13381 }
13382
13383 switch(wdiLowLevelInd->wdiIndicationType)
13384 {
13385 case WDI_RSSI_NOTIFICATION_IND:
13386 {
13387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13388 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013389#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13390 rssiNotification.bReserved =
13391 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13392 rssiNotification.bRssiThres1NegCross =
13393 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13394 rssiNotification.bRssiThres1PosCross =
13395 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13396 rssiNotification.bRssiThres2NegCross =
13397 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13398 rssiNotification.bRssiThres2PosCross =
13399 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13400 rssiNotification.bRssiThres3NegCross =
13401 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13402 rssiNotification.bRssiThres3PosCross =
13403 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013404 rssiNotification.avgRssi = (v_S7_t)
13405 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013406 WLANTL_BMPSRSSIRegionChangedNotification(
13407 pWDA->pVosContext,
13408 &rssiNotification);
13409#endif
13410 break ;
13411 }
13412 case WDI_MISSED_BEACON_IND:
13413 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013414 tpSirSmeMissedBeaconInd pMissBeacInd =
13415 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13417 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013418 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013419 if(NULL == pMissBeacInd)
13420 {
13421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13422 "%s: VOS MEM Alloc Failure", __func__);
13423 break;
13424 }
13425 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13426 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13427 pMissBeacInd->bssIdx =
13428 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13429 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013430 break ;
13431 }
13432 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13433 {
13434 /* TODO: Decode Ind and send Ind to PE */
13435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13436 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13437 break ;
13438 }
13439
13440 case WDI_MIC_FAILURE_IND:
13441 {
13442 tpSirSmeMicFailureInd pMicInd =
13443 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13444
13445 if(NULL == pMicInd)
13446 {
13447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013449 break;
13450 }
13451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13452 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13454 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13455 vos_mem_copy(pMicInd->bssId,
13456 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13457 sizeof(tSirMacAddr));
13458 vos_mem_copy(pMicInd->info.srcMacAddr,
13459 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13460 sizeof(tSirMacAddr));
13461 vos_mem_copy(pMicInd->info.taMacAddr,
13462 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13463 sizeof(tSirMacAddr));
13464 vos_mem_copy(pMicInd->info.dstMacAddr,
13465 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13466 sizeof(tSirMacAddr));
13467 vos_mem_copy(pMicInd->info.rxMacAddr,
13468 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13469 sizeof(tSirMacAddr));
13470 pMicInd->info.multicast =
13471 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13472 pMicInd->info.keyId=
13473 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13474 pMicInd->info.IV1=
13475 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13476 vos_mem_copy(pMicInd->info.TSC,
13477 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013478 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13479 (void *)pMicInd , 0) ;
13480 break ;
13481 }
13482 case WDI_FATAL_ERROR_IND:
13483 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013484 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013485 /* TODO: Decode Ind and send Ind to PE */
13486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13487 "Received WDI_FATAL_ERROR_IND from WDI ");
13488 break ;
13489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013490 case WDI_DEL_STA_IND:
13491 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 tpDeleteStaContext pDelSTACtx =
13493 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13494
13495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13496 "Received WDI_DEL_STA_IND from WDI ");
13497 if(NULL == pDelSTACtx)
13498 {
13499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013501 break;
13502 }
13503 vos_mem_copy(pDelSTACtx->addr2,
13504 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13505 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013506 vos_mem_copy(pDelSTACtx->bssId,
13507 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13508 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 pDelSTACtx->assocId =
13510 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13511 pDelSTACtx->reasonCode =
13512 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13513 pDelSTACtx->staId =
13514 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013515 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13516 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013517 break ;
13518 }
13519 case WDI_COEX_IND:
13520 {
13521 tANI_U32 index;
13522 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053013523 tSirSmeCoexInd *pSmeCoexInd;
13524
13525 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
13526 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
13527 {
13528 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
13529 {
13530 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13531 FL("Coex state: 0x%x coex feature: 0x%x"),
13532 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
13533 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
13534
13535 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
13536 {
13537 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
13538 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
13539 }
13540 }
13541 break;
13542 }
13543
13544 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013545 if(NULL == pSmeCoexInd)
13546 {
13547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013548 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013549 break;
13550 }
13551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13552 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013553 /* Message Header */
13554 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13555 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013556 /* Info from WDI Indication */
13557 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13558 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13559 {
13560 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13561 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013562 /* VOS message wrapper */
13563 vosMsg.type = eWNI_SME_COEX_IND;
13564 vosMsg.bodyptr = (void *)pSmeCoexInd;
13565 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013566 /* Send message to SME */
13567 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13568 {
13569 /* free the mem and return */
13570 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13571 }
13572 else
13573 {
13574 /* DEBUG */
13575 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13576 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13577 pSmeCoexInd->coexIndType,
13578 pSmeCoexInd->coexIndData[0],
13579 pSmeCoexInd->coexIndData[1],
13580 pSmeCoexInd->coexIndData[2],
13581 pSmeCoexInd->coexIndData[3]);
13582 }
13583 break;
13584 }
13585 case WDI_TX_COMPLETE_IND:
13586 {
13587 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13588 /* Calling TxCompleteAck Indication from wda context*/
13589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13590 "Complete Indication received from HAL");
13591 if( pWDA->pAckTxCbFunc )
13592 {
13593 if( VOS_STATUS_SUCCESS !=
13594 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13595 {
13596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13597 "Tx Complete timeout Timer Stop Failed ");
13598 }
13599 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13600 pWDA->pAckTxCbFunc = NULL;
13601 }
13602 else
13603 {
13604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13605 "Tx Complete Indication is received after timeout ");
13606 }
13607 break;
13608 }
Viral Modid86bde22012-12-10 13:09:21 -080013609 case WDI_P2P_NOA_START_IND :
13610 {
13611 tSirP2PNoaStart *pP2pNoaStart =
13612 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13613
13614 if (NULL == pP2pNoaStart)
13615 {
13616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13617 "Memory allocation failure, "
13618 "WDI_P2P_NOA_START_IND not forwarded");
13619 break;
13620 }
13621 pP2pNoaStart->status =
13622 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13623 pP2pNoaStart->bssIdx =
13624 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13625 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13626 (void *)pP2pNoaStart , 0) ;
13627 break;
13628 }
13629
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013630#ifdef FEATURE_WLAN_TDLS
13631 case WDI_TDLS_IND :
13632 {
13633 tSirTdlsInd *pTdlsInd =
13634 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13635
13636 if (NULL == pTdlsInd)
13637 {
13638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13639 "Memory allocation failure, "
13640 "WDI_TDLS_IND not forwarded");
13641 break;
13642 }
13643 pTdlsInd->status =
13644 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13645 pTdlsInd->assocId =
13646 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13647 pTdlsInd->staIdx =
13648 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13649 pTdlsInd->reasonCode =
13650 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13651 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13652 (void *)pTdlsInd , 0) ;
13653 break;
13654 }
13655#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013656 case WDI_P2P_NOA_ATTR_IND :
13657 {
13658 tSirP2PNoaAttr *pP2pNoaAttr =
13659 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13661 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013662 if (NULL == pP2pNoaAttr)
13663 {
13664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13665 "Memory allocation failure, "
13666 "WDI_P2P_NOA_ATTR_IND not forwarded");
13667 break;
13668 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013669 pP2pNoaAttr->index =
13670 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13671 pP2pNoaAttr->oppPsFlag =
13672 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13673 pP2pNoaAttr->ctWin =
13674 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13675
13676 pP2pNoaAttr->uNoa1IntervalCnt =
13677 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13678 pP2pNoaAttr->uNoa1Duration =
13679 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13680 pP2pNoaAttr->uNoa1Interval =
13681 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13682 pP2pNoaAttr->uNoa1StartTime =
13683 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013684 pP2pNoaAttr->uNoa2IntervalCnt =
13685 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13686 pP2pNoaAttr->uNoa2Duration =
13687 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13688 pP2pNoaAttr->uNoa2Interval =
13689 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13690 pP2pNoaAttr->uNoa2StartTime =
13691 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013692 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13693 (void *)pP2pNoaAttr , 0) ;
13694 break;
13695 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013696#ifdef FEATURE_WLAN_SCAN_PNO
13697 case WDI_PREF_NETWORK_FOUND_IND:
13698 {
13699 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013700 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13701 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13702 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13703 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13704
Jeff Johnson295189b2012-06-20 16:38:30 -070013705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13706 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013707 if (NULL == pPrefNetworkFoundInd)
13708 {
13709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13710 "Memory allocation failure, "
13711 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013712 if (NULL !=
13713 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13714 {
13715 wpalMemoryFree(
13716 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13717 );
13718 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13719 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013720 break;
13721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013722 /* Message Header */
13723 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013724 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013725
13726 /* Info from WDI Indication */
13727 pPrefNetworkFoundInd->ssId.length =
13728 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013730 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13731 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13732 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013733 if (NULL !=
13734 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13735 {
13736 pPrefNetworkFoundInd->frameLength =
13737 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13738 vos_mem_copy( pPrefNetworkFoundInd->data,
13739 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13740 pPrefNetworkFoundInd->frameLength);
13741 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13742 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13743 }
13744 else
13745 {
13746 pPrefNetworkFoundInd->frameLength = 0;
13747 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013748 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013749 /* VOS message wrapper */
13750 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13751 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13752 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013753 /* Send message to SME */
13754 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13755 {
13756 /* free the mem and return */
13757 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013759 break;
13760 }
13761#endif // FEATURE_WLAN_SCAN_PNO
13762
13763#ifdef WLAN_WAKEUP_EVENTS
13764 case WDI_WAKE_REASON_IND:
13765 {
13766 vos_msg_t vosMsg;
13767 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13768 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13769 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13770
13771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053013772 "[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 -070013773 wdiLowLevelInd->wdiIndicationType,
13774 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13775 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13776 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13777
13778 if (NULL == pWakeReasonInd)
13779 {
13780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13781 "Memory allocation failure, "
13782 "WDI_WAKE_REASON_IND not forwarded");
13783 break;
13784 }
13785
13786 vos_mem_zero(pWakeReasonInd, allocSize);
13787
13788 /* Message Header */
13789 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13790 pWakeReasonInd->mesgLen = allocSize;
13791
13792 /* Info from WDI Indication */
13793 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13794 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13795 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13796 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13797 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13798 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13799 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13800 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13801
13802 /* VOS message wrapper */
13803 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13804 vosMsg.bodyptr = (void *) pWakeReasonInd;
13805 vosMsg.bodyval = 0;
13806
13807 /* Send message to SME */
13808 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13809 {
13810 /* free the mem and return */
13811 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13812 }
13813
13814 break;
13815 }
13816#endif // WLAN_WAKEUP_EVENTS
13817
13818 case WDI_TX_PER_HIT_IND:
13819 {
13820 vos_msg_t vosMsg;
13821 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13822 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13823 /* VOS message wrapper */
13824 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13825 vosMsg.bodyptr = NULL;
13826 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013827 /* Send message to SME */
13828 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13829 {
13830 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13831 }
13832 break;
13833 }
13834
Leo Chang9056f462013-08-01 19:21:11 -070013835#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013836 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013837 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013838 vos_msg_t vosMsg;
13839 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013840
Leo Changd9df8aa2013-09-26 13:32:26 -070013841 lphbInd =
13842 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13843 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013844 {
13845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13846 "%s: LPHB IND buffer alloc Fail", __func__);
13847 return ;
13848 }
13849
Leo Changd9df8aa2013-09-26 13:32:26 -070013850 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013851 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013852 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013853 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013854 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013855 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13856
13857 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013858 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013859 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13860
Leo Changd9df8aa2013-09-26 13:32:26 -070013861 vosMsg.type = eWNI_SME_LPHB_IND;
13862 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013863 vosMsg.bodyval = 0;
13864 /* Send message to SME */
13865 if (VOS_STATUS_SUCCESS !=
13866 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13867 {
13868 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13869 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013870 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013871 }
13872 break;
13873 }
13874#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013875 case WDI_PERIODIC_TX_PTRN_FW_IND:
13876 {
13877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13878 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13879 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13880 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13881 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13882 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13883 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13884
13885 break;
13886 }
Leo Chang9056f462013-08-01 19:21:11 -070013887
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013888 case WDI_IBSS_PEER_INACTIVITY_IND:
13889 {
13890 tSirIbssPeerInactivityInd *pIbssInd =
13891 (tSirIbssPeerInactivityInd *)
13892 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13893
13894 if (NULL == pIbssInd)
13895 {
13896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13897 "Memory allocation failure, "
13898 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13899 break;
13900 }
13901
13902 pIbssInd->bssIdx =
13903 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13904 pIbssInd->staIdx =
13905 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13906 vos_mem_copy(pIbssInd->peerAddr,
13907 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13908 sizeof(tSirMacAddr));
13909 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13910 break;
13911 }
13912
Rajeev79dbe4c2013-10-05 11:03:42 +053013913#ifdef FEATURE_WLAN_BATCH_SCAN
13914 case WDI_BATCH_SCAN_RESULT_IND:
13915 {
13916 void *pBatchScanResult;
13917 void *pCallbackContext;
13918 tpAniSirGlobal pMac;
13919
13920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13921 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13922
13923 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053013924 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053013925 {
13926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13927 "%s:pWDA is NULL", __func__);
13928 VOS_ASSERT(0);
13929 return;
13930 }
13931
13932 pBatchScanResult =
13933 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13934 if (NULL == pBatchScanResult)
13935 {
13936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13937 "%s:Batch scan result from FW is null can't invoke HDD callback",
13938 __func__);
13939 VOS_ASSERT(0);
13940 return;
13941 }
13942
13943 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13944 if (NULL == pMac)
13945 {
13946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13947 "%s:pMac is NULL", __func__);
13948 VOS_ASSERT(0);
13949 return;
13950 }
13951
13952 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13953 /*call hdd callback with set batch scan response data*/
13954 if(pMac->pmc.batchScanResultCallback)
13955 {
13956 pMac->pmc.batchScanResultCallback(pCallbackContext,
13957 pBatchScanResult);
13958 }
13959 else
13960 {
13961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13962 "%s:HDD callback is null", __func__);
13963 VOS_ASSERT(0);
13964 }
13965 break;
13966 }
13967#endif
13968
Leo Chang0b0e45a2013-12-15 15:18:55 -080013969#ifdef FEATURE_WLAN_CH_AVOID
13970 case WDI_CH_AVOID_IND:
13971 {
13972 vos_msg_t vosMsg;
13973 tSirChAvoidIndType *chAvoidInd;
13974
13975 chAvoidInd =
13976 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13977 if (NULL == chAvoidInd)
13978 {
13979 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13980 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13981 return ;
13982 }
13983
13984 chAvoidInd->avoidRangeCount =
13985 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13986 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13987 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13988 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13989
13990 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13991 "%s : WDA CH avoid notification", __func__);
13992
13993 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13994 vosMsg.bodyptr = chAvoidInd;
13995 vosMsg.bodyval = 0;
13996 /* Send message to SME */
13997 if (VOS_STATUS_SUCCESS !=
13998 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13999 {
14000 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14001 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14002 vos_mem_free(chAvoidInd);
14003 }
14004 break;
14005 }
14006#endif /* FEATURE_WLAN_CH_AVOID */
14007
Sunil Duttbd736ed2014-05-26 21:19:41 +053014008#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14009 case WDI_LL_STATS_RESULTS_IND:
14010 {
14011 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014012 tpAniSirGlobal pMac;
14013
14014 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14015 "Received WDI_LL_STATS_RESULTS_IND from FW");
14016
14017 /*sanity check*/
14018 if (NULL == pWDA)
14019 {
14020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14021 "%s:pWDA is NULL", __func__);
14022 VOS_ASSERT(0);
14023 return;
14024 }
14025
14026 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014027 (void *)wdiLowLevelInd->
14028 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014029 if (NULL == pLinkLayerStatsInd)
14030 {
14031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14032 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14033 __func__);
14034 VOS_ASSERT(0);
14035 return;
14036 }
14037
14038 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14039 if (NULL == pMac)
14040 {
14041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14042 "%s:pMac is NULL", __func__);
14043 VOS_ASSERT(0);
14044 return;
14045 }
14046
Dino Mycled3d50022014-07-07 12:58:25 +053014047 /* call hdd callback with Link Layer Statistics.
14048 * vdev_id/ifacId in link_stats_results will be
14049 * used to retrieve the correct HDD context
14050 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014051 if (pMac->sme.pLinkLayerStatsIndCallback)
14052 {
Dino Mycled3d50022014-07-07 12:58:25 +053014053 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014054 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014055 pLinkLayerStatsInd,
14056 wdiLowLevelInd->
14057 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014058 }
14059 else
14060 {
14061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14062 "%s:HDD callback is null", __func__);
14063 }
14064 break;
14065 }
14066#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14067
Dino Mycle41bdc942014-06-10 11:30:24 +053014068#ifdef WLAN_FEATURE_EXTSCAN
14069 case WDI_EXTSCAN_PROGRESS_IND:
14070 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14071 case WDI_EXTSCAN_SCAN_RESULT_IND:
14072 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14073 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14074 {
14075 void *pEXTScanData;
14076 void *pCallbackContext;
14077 tpAniSirGlobal pMac;
14078 tANI_U16 indType;
14079
14080 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14081 "Received WDI_EXTSCAN Indications from FW");
14082 /*sanity check*/
14083 if (NULL == pWDA)
14084 {
14085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14086 "%s:pWDA is NULL", __func__);
14087 VOS_ASSERT(0);
14088 return;
14089 }
14090 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14091 {
14092 indType = WDA_EXTSCAN_PROGRESS_IND;
14093
14094 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14095 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14096 }
14097 if (wdiLowLevelInd->wdiIndicationType ==
14098 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14099 {
14100 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14101
14102 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14103 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14104 }
14105 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14106 {
14107 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14108
14109 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14110 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14111 }
14112 if (wdiLowLevelInd->wdiIndicationType ==
14113 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14114 {
14115 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14116
14117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14118 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14119 }
14120 if (wdiLowLevelInd->wdiIndicationType ==
14121 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14122 {
14123 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14124
14125 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14126 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14127 }
14128
14129 pEXTScanData =
14130 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14131 if (NULL == pEXTScanData)
14132 {
14133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14134 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14135 __func__);
14136 VOS_ASSERT(0);
14137 return;
14138 }
14139
14140 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14141 if (NULL == pMac)
14142 {
14143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14144 "%s:pMac is NULL", __func__);
14145 VOS_ASSERT(0);
14146 return;
14147 }
14148
14149 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14150
14151 if(pMac->sme.pEXTScanIndCb)
14152 {
14153 pMac->sme.pEXTScanIndCb(pCallbackContext,
14154 indType,
14155 pEXTScanData);
14156 }
14157 else
14158 {
14159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14160 "%s:HDD callback is null", __func__);
14161 }
14162 break;
14163 }
14164#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014165 case WDI_DEL_BA_IND:
14166 {
14167 tpBADeleteParams pDelBAInd =
14168 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14169
14170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14171 "Received WDI_DEL_BA_IND from WDI ");
14172 if(NULL == pDelBAInd)
14173 {
14174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14175 "%s: VOS MEM Alloc Failure", __func__);
14176 break;
14177 }
14178 vos_mem_copy(pDelBAInd->peerMacAddr,
14179 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14180 sizeof(tSirMacAddr));
14181 vos_mem_copy(pDelBAInd->bssId,
14182 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14183 sizeof(tSirMacAddr));
14184 pDelBAInd->staIdx =
14185 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14186 pDelBAInd->baTID =
14187 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14188 pDelBAInd->baDirection =
14189 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14190 pDelBAInd->reasonCode =
14191 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14192
14193 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14194 (void *)pDelBAInd , 0) ;
14195 break;
14196 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014197
Jeff Johnson295189b2012-06-20 16:38:30 -070014198 default:
14199 {
14200 /* TODO error */
14201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14202 "Received UNKNOWN Indication from WDI ");
14203 }
14204 }
14205 return ;
14206}
14207
Jeff Johnson295189b2012-06-20 16:38:30 -070014208/*
14209 * BA related processing in WDA.
14210 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014211void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14212 void* pUserData)
14213{
14214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14215 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014216 if(NULL == pWdaParams)
14217 {
14218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014219 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014220 VOS_ASSERT(0) ;
14221 return ;
14222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014223 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014224 vos_mem_free(pWdaParams->wdaMsgParam) ;
14225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14226 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014228 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014229 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14230 {
14231 tANI_U8 i = 0 ;
14232 tBaActivityInd *baActivityInd = NULL ;
14233 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14234 tANI_U8 allocSize = sizeof(tBaActivityInd)
14235 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14236 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14237 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014238 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014239 if(NULL == baActivityInd)
14240 {
14241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014243 VOS_ASSERT(0) ;
14244 return;
14245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014246 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14247 sizeof(tSirMacAddr)) ;
14248 baActivityInd->baCandidateCnt = baCandidateCount ;
14249
14250 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14251 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14252
14253 for(i = 0 ; i < baCandidateCount ; i++)
14254 {
14255 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014256 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14257 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014258 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14259 {
14260 baCandidate->baInfo[tid].fBaEnable =
14261 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14262 baCandidate->baInfo[tid].startingSeqNum =
14263 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14264 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014265 wdiBaCandidate++ ;
14266 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014267 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014268 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14269 }
14270 else
14271 {
14272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14273 "BA Trigger RSP with Failure received ");
14274 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014275 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014276}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014277
14278
14279/*
14280 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14281 * during MCC
14282 */
14283void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14284{
14285 wpt_uint32 enabled;
14286 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14287 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14288 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14289
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014290 if (NULL == pMac )
14291 {
14292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14293 "%s: Invoked with invalid MAC context ", __func__ );
14294 VOS_ASSERT(0);
14295 return;
14296 }
14297
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014298 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14299 != eSIR_SUCCESS)
14300 {
14301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14302 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14303 return;
14304 }
14305
14306 if(!enabled)
14307 {
14308 return;
14309 }
14310
14311 if(NULL == pWDA)
14312 {
14313 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14314 "%s:WDA context is NULL", __func__);
14315 VOS_ASSERT(0);
14316 return;
14317 }
14318
14319 if(activate)
14320 {
14321 if( VOS_STATUS_SUCCESS !=
14322 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14323 {
14324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14325 "Traffic Stats Timer Start Failed ");
14326 return;
14327 }
14328 WDI_DS_ActivateTrafficStats();
14329 }
14330 else
14331 {
14332 WDI_DS_DeactivateTrafficStats();
14333 WDI_DS_ClearTrafficStats();
14334
14335 if( VOS_STATUS_SUCCESS !=
14336 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14337 {
14338 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14339 "Traffic Stats Timer Stop Failed ");
14340 return;
14341 }
14342 }
14343}
14344
14345/*
14346 * Traffic Stats Timer handler
14347 */
14348void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14349{
14350 WDI_Status wdiStatus;
14351 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14352 WDI_TrafficStatsIndType trafficStatsIndParams;
14353 wpt_uint32 length, enabled;
14354 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14355
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014356 if (NULL == pMac )
14357 {
14358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14359 "%s: Invoked with invalid MAC context ", __func__ );
14360 VOS_ASSERT(0);
14361 return;
14362 }
14363
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014364 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14365 != eSIR_SUCCESS)
14366 {
14367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14368 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14369 return;
14370 }
14371
14372 if(!enabled)
14373 {
14374 WDI_DS_DeactivateTrafficStats();
14375 return;
14376 }
14377
14378 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14379
14380 if(pWdiTrafficStats != NULL)
14381 {
14382 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14383 trafficStatsIndParams.length = length;
14384 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014385 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014386 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14387 trafficStatsIndParams.pUserData = pWDA;
14388
14389 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14390
14391 if(WDI_STATUS_PENDING == wdiStatus)
14392 {
14393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14394 "Pending received for %s:%d ",__func__,__LINE__ );
14395 }
14396 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14397 {
14398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14399 "Failure in %s:%d ",__func__,__LINE__ );
14400 }
14401
14402 WDI_DS_ClearTrafficStats();
14403 }
14404 else
14405 {
14406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14407 "pWdiTrafficStats is Null");
14408 }
14409
14410 if( VOS_STATUS_SUCCESS !=
14411 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14412 {
14413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14414 "Traffic Stats Timer Start Failed ");
14415 return;
14416 }
14417}
14418
Jeff Johnson295189b2012-06-20 16:38:30 -070014419/*
14420 * BA Activity check timer handler
14421 */
14422void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14423{
14424 tANI_U8 curSta = 0 ;
14425 tANI_U8 tid = 0 ;
14426 tANI_U8 size = 0 ;
14427 tANI_U8 baCandidateCount = 0 ;
14428 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014429 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014430 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014431 tpAniSirGlobal pMac;
14432
Jeff Johnson295189b2012-06-20 16:38:30 -070014433 if(NULL == pWDA)
14434 {
14435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014436 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014437 VOS_ASSERT(0);
14438 return ;
14439 }
14440 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14441 {
14442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14443 "Inconsistent STA entries in WDA");
14444 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014445 }
14446 if(NULL == pWDA->pVosContext)
14447 {
14448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14449 "%s: pVosContext is NULL",__func__);
14450 VOS_ASSERT(0);
14451 return ;
14452 }
14453 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014454 if(NULL == pMac)
14455 {
14456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14457 "%s: pMac is NULL",__func__);
14458 VOS_ASSERT(0);
14459 return ;
14460 }
14461
Abhishek Singh0644e482014-10-06 18:38:23 +053014462 if (wlan_cfgGetInt(pMac,
14463 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14464 eSIR_SUCCESS)
14465 {
14466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14467 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14468 val = 0;
14469 }
14470
Jeff Johnson295189b2012-06-20 16:38:30 -070014471 /* walk through all STA entries and find out TX packet count */
14472 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14473 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014474 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014475#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014476 // We can only do BA on "hard" STAs.
14477 if (!(IS_HWSTA_IDX(curSta)))
14478 {
14479 continue;
14480 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014481#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014482 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14483 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014484 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014485 tANI_U32 txPktCount = 0 ;
14486 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014487 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014488 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14489 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014490 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14491 curSta, tid, &txPktCount)))
14492 {
14493#if 0
14494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14495 "************* %d:%d, %d ",curSta, txPktCount,
14496 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14497#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014498 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14499 (currentOperChan <= SIR_11B_CHANNEL_END)))
14500 {
14501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14502 "%s: BTC disabled aggregation - dont start "
14503 "TX ADDBA req",__func__);
14504 }
14505 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014506 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070014507 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14508 curSta, tid)))
14509 {
14510 /* get prepare for sending message to HAL */
14511 //baCandidate[baCandidateCount].staIdx = curSta ;
14512 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14513 newBaCandidate = WDA_ENABLE_BA ;
14514 }
14515 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14516 }
14517 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014518 /* fill the entry for all the sta with given TID's */
14519 if(WDA_ENABLE_BA == newBaCandidate)
14520 {
14521 /* move to next BA candidate */
14522 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14523 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14524 baCandidateCount++ ;
14525 newBaCandidate = WDA_DISABLE_BA ;
14526 }
14527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014528 /* prepare and send message to hal */
14529 if( 0 < baCandidateCount)
14530 {
14531 WDI_Status status = WDI_STATUS_SUCCESS ;
14532 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14533 tWDA_ReqParams *pWdaParams =
14534 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014535 if(NULL == pWdaParams)
14536 {
14537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014538 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014539 VOS_ASSERT(0) ;
14540 return;
14541 }
14542 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14543 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14544 if(NULL == wdiTriggerBaReq)
14545 {
14546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 VOS_ASSERT(0) ;
14549 vos_mem_free(pWdaParams);
14550 return;
14551 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014552 do
14553 {
14554 WDI_TriggerBAReqinfoType *triggerBaInfo =
14555 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14556 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14557 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14558 * for each request */
14559 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14560 triggerBaInfo->ucBASessionID = 0;
14561 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14562 } while(0) ;
14563 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014565 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014566 pWdaParams->pWdaContext = pWDA;
14567 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14568 pWdaParams->wdaMsgParam = NULL;
14569 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14570 WDA_TriggerBaReqCallback, pWdaParams) ;
14571 if(IS_WDI_STATUS_FAILURE(status))
14572 {
14573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14574 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14575 vos_mem_free(pWdaParams->wdaMsgParam) ;
14576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14577 vos_mem_free(pWdaParams) ;
14578 }
14579 }
14580 else
14581 {
14582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14583 "There is no TID for initiating BA");
14584 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014585 if( VOS_STATUS_SUCCESS !=
14586 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14587 {
14588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14589 "BA Activity Timer Stop Failed ");
14590 return ;
14591 }
14592 if( VOS_STATUS_SUCCESS !=
14593 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14594 {
14595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14596 "BA Activity Timer Start Failed ");
14597 return;
14598 }
14599 return ;
14600}
Jeff Johnson295189b2012-06-20 16:38:30 -070014601/*
14602 * WDA common routine to create timer used by WDA.
14603 */
14604static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14605{
Jeff Johnson295189b2012-06-20 16:38:30 -070014606 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14607 tANI_U32 val = 0 ;
14608 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14609
14610 if(NULL == pMac)
14611 {
14612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014613 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014614 VOS_ASSERT(0);
14615 return VOS_STATUS_E_FAILURE;
14616 }
14617 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14618 != eSIR_SUCCESS)
14619 {
14620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14621 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14622 return VOS_STATUS_E_FAILURE;
14623 }
14624 val = SYS_MS_TO_TICKS(val) ;
14625
14626 /* BA activity check timer */
14627 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14628 "BA Activity Check timer", WDA_TimerHandler,
14629 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14630 if(status != TX_SUCCESS)
14631 {
14632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14633 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014634 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014635 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014636 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014637 /* Tx Complete Timeout timer */
14638 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14639 "Tx Complete Check timer", WDA_TimerHandler,
14640 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014641 if(status != TX_SUCCESS)
14642 {
14643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14644 "Unable to create Tx Complete Timeout timer");
14645 /* Destroy timer of BA activity check timer */
14646 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14647 if(status != TX_SUCCESS)
14648 {
14649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14650 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014651 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014652 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014653 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014654 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014655
14656 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14657
14658 /* Traffic Stats timer */
14659 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14660 "Traffic Stats timer", WDA_TimerHandler,
14661 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14662 if(status != TX_SUCCESS)
14663 {
14664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14665 "Unable to create traffic stats timer");
14666 /* Destroy timer of BA activity check timer */
14667 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14668 if(status != TX_SUCCESS)
14669 {
14670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14671 "Unable to Destroy BA activity timer");
14672 }
14673 /* Destroy timer of tx complete timer */
14674 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14675 if(status != TX_SUCCESS)
14676 {
14677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14678 "Unable to Tx complete timer");
14679 }
14680 return VOS_STATUS_E_FAILURE ;
14681 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014682 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014683}
Jeff Johnson295189b2012-06-20 16:38:30 -070014684/*
14685 * WDA common routine to destroy timer used by WDA.
14686 */
14687static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
14688{
14689 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014690 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14691 if(status != TX_SUCCESS)
14692 {
14693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14694 "Unable to Destroy Tx Complete Timeout timer");
14695 return eSIR_FAILURE ;
14696 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014697 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14698 if(status != TX_SUCCESS)
14699 {
14700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14701 "Unable to Destroy BA activity timer");
14702 return eSIR_FAILURE ;
14703 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014704 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
14705 if(status != TX_SUCCESS)
14706 {
14707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14708 "Unable to Destroy traffic stats timer");
14709 return eSIR_FAILURE ;
14710 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014711 return eSIR_SUCCESS ;
14712}
Jeff Johnson295189b2012-06-20 16:38:30 -070014713/*
14714 * WDA timer handler.
14715 */
14716void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
14717{
14718 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
14719 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014720 /*
14721 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
14722 */
14723 wdaMsg.type = timerInfo ;
14724 wdaMsg.bodyptr = NULL;
14725 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014726 /* post the message.. */
14727 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
14728 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
14729 {
14730 vosStatus = VOS_STATUS_E_BADMSG;
14731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014732}
Jeff Johnson295189b2012-06-20 16:38:30 -070014733/*
14734 * WDA Tx Complete timeout Indication.
14735 */
14736void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
14737{
14738 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014739 if( pWDA->pAckTxCbFunc )
14740 {
14741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014742 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014743 pWDA->pAckTxCbFunc( pMac, 0);
14744 pWDA->pAckTxCbFunc = NULL;
14745 }
14746 else
14747 {
14748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014749 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014750 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014751}
Jeff Johnson295189b2012-06-20 16:38:30 -070014752/*
14753 * WDA Set REG Domain to VOS NV
14754 */
Abhishek Singha306a442013-11-07 18:39:01 +053014755eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
14756 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070014757{
Abhishek Singha306a442013-11-07 18:39:01 +053014758 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070014759 {
14760 return eHAL_STATUS_INVALID_PARAMETER;
14761 }
14762 return eHAL_STATUS_SUCCESS;
14763}
Jeff Johnson295189b2012-06-20 16:38:30 -070014764
Jeff Johnson295189b2012-06-20 16:38:30 -070014765#ifdef FEATURE_WLAN_SCAN_PNO
14766/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014767 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014768 *
14769 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014770void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014771{
14772 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014773 tSirPNOScanReq *pPNOScanReqParams;
14774
Jeff Johnson295189b2012-06-20 16:38:30 -070014775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014776 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014777 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014778 {
14779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014780 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014781 VOS_ASSERT(0) ;
14782 return ;
14783 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014784
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014785 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14786 if(pPNOScanReqParams->statusCallback)
14787 {
14788 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14789 (status == WDI_STATUS_SUCCESS) ?
14790 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14791 }
14792
Yue Ma7f44bbe2013-04-12 11:47:39 -070014793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14794 vos_mem_free(pWdaParams->wdaMsgParam);
14795 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014796
14797 return ;
14798}
Jeff Johnson295189b2012-06-20 16:38:30 -070014799/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014800 * FUNCTION: WDA_PNOScanReqCallback
14801 * Free memory.
14802 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14803 */
14804void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014805{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014806 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014807 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014808
14809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14810 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14811
14812 if(NULL == pWdaParams)
14813 {
14814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14815 "%s: pWdaParams received NULL", __func__);
14816 VOS_ASSERT(0);
14817 return;
14818 }
14819
14820 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14821 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014822 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14823 if(pPNOScanReqParams->statusCallback)
14824 {
14825 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14826 VOS_STATUS_E_FAILURE);
14827 }
14828
Yue Ma7f44bbe2013-04-12 11:47:39 -070014829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14830 vos_mem_free(pWdaParams->wdaMsgParam);
14831 vos_mem_free(pWdaParams);
14832 }
14833
14834 return;
14835}
14836/*
14837 * FUNCTION: WDA_UpdateScanParamsRespCallback
14838 *
14839 */
14840void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14841{
14842 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014844 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014845 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014846 {
14847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014848 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014849 VOS_ASSERT(0) ;
14850 return ;
14851 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014852
14853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14854 vos_mem_free(pWdaParams->wdaMsgParam);
14855 vos_mem_free(pWdaParams);
14856
Jeff Johnson295189b2012-06-20 16:38:30 -070014857 return ;
14858}
Jeff Johnson295189b2012-06-20 16:38:30 -070014859/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014860 * FUNCTION: WDA_UpdateScanParamsReqCallback
14861 * Free memory.
14862 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14863 */
14864void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14865{
14866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14867
14868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14869 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14870
14871 if(NULL == pWdaParams)
14872 {
14873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14874 "%s: pWdaParams received NULL", __func__);
14875 VOS_ASSERT(0);
14876 return;
14877 }
14878
14879 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14880 {
14881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14882 vos_mem_free(pWdaParams->wdaMsgParam);
14883 vos_mem_free(pWdaParams);
14884 }
14885
14886 return;
14887}
14888/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014889 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14890 * Request to WDI to set Preferred Network List.Offload
14891 */
14892VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14893 tSirPNOScanReq *pPNOScanReqParams)
14894{
Jeff Johnson43971f52012-07-17 12:26:56 -070014895 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014896 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14897 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14898 tWDA_ReqParams *pWdaParams ;
14899 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014901 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014902 if(NULL == pwdiPNOScanReqInfo)
14903 {
14904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014905 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014906 VOS_ASSERT(0);
14907 return VOS_STATUS_E_NOMEM;
14908 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014909 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14910 if(NULL == pWdaParams)
14911 {
14912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014914 VOS_ASSERT(0);
14915 vos_mem_free(pwdiPNOScanReqInfo);
14916 return VOS_STATUS_E_NOMEM;
14917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014918 //
14919 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14920 //
14921 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14922 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014923 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14924 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14925 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014926 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14927 {
14928 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14929 &pPNOScanReqParams->aNetworks[i],
14930 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14931 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014932 /*Scan timer intervals*/
14933 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14934 &pPNOScanReqParams->scanTimers,
14935 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014936 /*Probe template for 2.4GHz band*/
14937 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14938 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14939 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014940 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14941 pPNOScanReqParams->p24GProbeTemplate,
14942 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014943 /*Probe template for 5GHz band*/
14944 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14945 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14946 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014947 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14948 pPNOScanReqParams->p5GProbeTemplate,
14949 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014950 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14951 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014952
Jeff Johnson295189b2012-06-20 16:38:30 -070014953 /* Store Params pass it to WDI */
14954 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14955 pWdaParams->pWdaContext = pWDA;
14956 /* Store param pointer as passed in by caller */
14957 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014958 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014959 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014960 if(IS_WDI_STATUS_FAILURE(status))
14961 {
14962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14963 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014964 if(pPNOScanReqParams->statusCallback)
14965 {
14966 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14967 VOS_STATUS_E_FAILURE);
14968 }
14969
Jeff Johnson295189b2012-06-20 16:38:30 -070014970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14971 vos_mem_free(pWdaParams->wdaMsgParam);
14972 pWdaParams->wdaWdiApiMsgParam = NULL;
14973 pWdaParams->wdaMsgParam = NULL;
14974 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014975 return CONVERT_WDI2VOS_STATUS(status) ;
14976}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014977
14978#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14979
14980void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14981{
14982 /*Convert the CSR Auth types to WDI Auth types */
14983 switch (csrAuthType)
14984 {
14985 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14986 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14987 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014988#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014989 case eCSR_AUTH_TYPE_CCKM_WPA:
14990 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14991 break;
14992#endif
14993 case eCSR_AUTH_TYPE_WPA:
14994 *AuthType = eWDA_AUTH_TYPE_WPA;
14995 break;
14996 case eCSR_AUTH_TYPE_WPA_PSK:
14997 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14998 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014999#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015000 case eCSR_AUTH_TYPE_CCKM_RSN:
15001 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15002 break;
15003#endif
15004 case eCSR_AUTH_TYPE_RSN:
15005 *AuthType = eWDA_AUTH_TYPE_RSN;
15006 break;
15007 case eCSR_AUTH_TYPE_RSN_PSK:
15008 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15009 break;
15010#if defined WLAN_FEATURE_VOWIFI_11R
15011 case eCSR_AUTH_TYPE_FT_RSN:
15012 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15013 break;
15014 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15015 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15016 break;
15017#endif
15018#ifdef FEATURE_WLAN_WAPI
15019 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15020 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15021 break;
15022 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15023 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15024 break;
15025#endif /* FEATURE_WLAN_WAPI */
15026 case eCSR_AUTH_TYPE_SHARED_KEY:
15027 case eCSR_AUTH_TYPE_AUTOSWITCH:
15028 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15029 break;
15030#if 0
15031 case eCSR_AUTH_TYPE_SHARED_KEY:
15032 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15033 break;
15034 case eCSR_AUTH_TYPE_AUTOSWITCH:
15035 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15036#endif
15037 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015039 "%s: Unknown Auth Type", __func__);
15040 break;
15041 }
15042}
15043void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15044{
15045 switch (csrEncrType)
15046 {
15047 case eCSR_ENCRYPT_TYPE_NONE:
15048 *EncrType = WDI_ED_NONE;
15049 break;
15050 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15051 case eCSR_ENCRYPT_TYPE_WEP40:
15052 *EncrType = WDI_ED_WEP40;
15053 break;
15054 case eCSR_ENCRYPT_TYPE_WEP104:
15055 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15056 *EncrType = WDI_ED_WEP104;
15057 break;
15058 case eCSR_ENCRYPT_TYPE_TKIP:
15059 *EncrType = WDI_ED_TKIP;
15060 break;
15061 case eCSR_ENCRYPT_TYPE_AES:
15062 *EncrType = WDI_ED_CCMP;
15063 break;
15064#ifdef WLAN_FEATURE_11W
15065 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15066 *EncrType = WDI_ED_AES_128_CMAC;
15067 break;
15068#endif
15069#ifdef FEATURE_WLAN_WAPI
15070 case eCSR_ENCRYPT_TYPE_WPI:
15071 *EncrType = WDI_ED_WPI;
15072 break;
15073#endif
15074 case eCSR_ENCRYPT_TYPE_ANY:
15075 *EncrType = WDI_ED_ANY;
15076 break;
15077
15078 default:
15079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15080 "%s: Unknown Encryption Type", __func__);
15081 break;
15082 }
15083}
15084
15085/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015086 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015087 * Request to WDI to set Roam Offload Scan
15088 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015089VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015090 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15091{
15092 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015093 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15094 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015095 tWDA_ReqParams *pWdaParams ;
15096 v_U8_t csrAuthType;
15097 WDI_RoamNetworkType *pwdiRoamNetworkType;
15098 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15100 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015101 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015102 {
15103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15104 "%s: VOS MEM Alloc Failure", __func__);
15105 VOS_ASSERT(0);
15106 return VOS_STATUS_E_NOMEM;
15107 }
15108 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15109 if (NULL == pWdaParams)
15110 {
15111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15112 "%s: VOS MEM Alloc Failure", __func__);
15113 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015114 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015115 return VOS_STATUS_E_NOMEM;
15116 }
15117
15118 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015119 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015120 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015121 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15122 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015123 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15124 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15125 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15126 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15127 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15128 sizeof(pwdiRoamNetworkType->currAPbssid));
15129 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15130 csrAuthType);
15131 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15132 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15133 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15134 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15135 pwdiRoamOffloadScanInfo->LookupThreshold =
15136 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015137 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15138 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015139 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15140 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015141 pwdiRoamOffloadScanInfo->MAWCEnabled =
15142 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015143 pwdiRoamOffloadScanInfo->Command =
15144 pRoamOffloadScanReqParams->Command ;
15145 pwdiRoamOffloadScanInfo->StartScanReason =
15146 pRoamOffloadScanReqParams->StartScanReason ;
15147 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15148 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15149 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15150 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15151 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15152 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15153 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15154 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15155 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15156 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015157 pwdiRoamOffloadScanInfo->IsESEEnabled =
15158 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015159 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15160 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15161 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15162 pwdiRoamNetworkType->ssId.ucLength =
15163 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15164 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15165 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15166 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15167 pwdiRoamNetworkType->ChannelCount =
15168 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15169 pwdiRoamOffloadScanInfo->ChannelCacheType =
15170 pRoamOffloadScanReqParams->ChannelCacheType;
15171 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15172 pRoamOffloadScanReqParams->ValidChannelList,
15173 pRoamOffloadScanReqParams->ValidChannelCount);
15174 pwdiRoamOffloadScanInfo->ValidChannelCount =
15175 pRoamOffloadScanReqParams->ValidChannelCount;
15176 pwdiRoamOffloadScanInfo->us24GProbeSize =
15177 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15178 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15179 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15180 pRoamOffloadScanReqParams->p24GProbeTemplate,
15181 pwdiRoamOffloadScanInfo->us24GProbeSize);
15182 pwdiRoamOffloadScanInfo->us5GProbeSize =
15183 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15184 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15185 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15186 pRoamOffloadScanReqParams->p5GProbeTemplate,
15187 pwdiRoamOffloadScanInfo->us5GProbeSize);
15188 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15189 pRoamOffloadScanReqParams->MDID.mdiePresent;
15190 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15191 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015192 pwdiRoamOffloadScanInfo->nProbes =
15193 pRoamOffloadScanReqParams->nProbes;
15194 pwdiRoamOffloadScanInfo->HomeAwayTime =
15195 pRoamOffloadScanReqParams->HomeAwayTime;
15196 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015197 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015198 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015199 pWdaParams->pWdaContext = pWDA;
15200 /* Store param pointer as passed in by caller */
15201 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015202 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015203 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15204 if(IS_WDI_STATUS_FAILURE(status))
15205 {
15206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15207 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15209 vos_mem_free(pWdaParams->wdaMsgParam);
15210 pWdaParams->wdaWdiApiMsgParam = NULL;
15211 pWdaParams->wdaMsgParam = NULL;
15212 }
15213 return CONVERT_WDI2VOS_STATUS(status) ;
15214}
15215#endif
15216
Jeff Johnson295189b2012-06-20 16:38:30 -070015217/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015218 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015219 *
15220 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015221void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015222{
15223 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15224
15225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015226 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015227
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015228 if(NULL == pWdaParams)
15229 {
15230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015231 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015232 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015233 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015234 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015235
Jeff Johnson295189b2012-06-20 16:38:30 -070015236 vos_mem_free(pWdaParams->wdaMsgParam) ;
15237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15238 vos_mem_free(pWdaParams) ;
15239
15240 return ;
15241}
15242/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015243 * FUNCTION: WDA_RssiFilterReqCallback
15244 * Free memory.
15245 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15246 */
15247void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15248{
15249 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15250
15251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15252 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15253
15254 if(NULL == pWdaParams)
15255 {
15256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15257 "%s: pWdaParams received NULL", __func__);
15258 VOS_ASSERT(0);
15259 return;
15260 }
15261
15262 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15263 {
15264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15265 vos_mem_free(pWdaParams->wdaMsgParam);
15266 vos_mem_free(pWdaParams);
15267 }
15268
15269 return;
15270}
15271/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015272 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15273 * Request to WDI to set Preferred Network List.Offload
15274 */
15275VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15276 tSirSetRSSIFilterReq* pRssiFilterParams)
15277{
Jeff Johnson43971f52012-07-17 12:26:56 -070015278 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015279 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15280 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15281 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015283 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015284 if(NULL == pwdiSetRssiFilterReqInfo)
15285 {
15286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015288 VOS_ASSERT(0);
15289 return VOS_STATUS_E_NOMEM;
15290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15292 if(NULL == pWdaParams)
15293 {
15294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015296 VOS_ASSERT(0);
15297 vos_mem_free(pwdiSetRssiFilterReqInfo);
15298 return VOS_STATUS_E_NOMEM;
15299 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015300 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015301 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15302 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015303
Jeff Johnson295189b2012-06-20 16:38:30 -070015304 /* Store Params pass it to WDI */
15305 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15306 pWdaParams->pWdaContext = pWDA;
15307 /* Store param pointer as passed in by caller */
15308 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015309 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015310 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015311 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015312 if(IS_WDI_STATUS_FAILURE(status))
15313 {
15314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15315 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15317 vos_mem_free(pWdaParams->wdaMsgParam);
15318 pWdaParams->wdaWdiApiMsgParam = NULL;
15319 pWdaParams->wdaMsgParam = NULL;
15320 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015321 return CONVERT_WDI2VOS_STATUS(status) ;
15322}
15323
Jeff Johnson295189b2012-06-20 16:38:30 -070015324/*
15325 * FUNCTION: WDA_ProcessUpdateScanParams
15326 * Request to WDI to update Scan Parameters
15327 */
15328VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15329 tSirUpdateScanParams *pUpdateScanParams)
15330{
Jeff Johnson43971f52012-07-17 12:26:56 -070015331 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015332 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15333 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15334 sizeof(WDI_UpdateScanParamsInfoType)) ;
15335 tWDA_ReqParams *pWdaParams ;
15336 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015338 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015339 if(NULL == wdiUpdateScanParamsInfoType)
15340 {
15341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015343 VOS_ASSERT(0);
15344 return VOS_STATUS_E_NOMEM;
15345 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15347 if ( NULL == pWdaParams )
15348 {
15349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015351 VOS_ASSERT(0);
15352 vos_mem_free(wdiUpdateScanParamsInfoType);
15353 return VOS_STATUS_E_NOMEM;
15354 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015355 //
15356 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15357 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15359 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15360 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15361 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015362 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015363 pUpdateScanParams->b11dEnabled,
15364 pUpdateScanParams->b11dResolved,
15365 pUpdateScanParams->ucChannelCount,
15366 pUpdateScanParams->usPassiveMinChTime,
15367 pUpdateScanParams->usPassiveMaxChTime,
15368 pUpdateScanParams->usActiveMinChTime,
15369 pUpdateScanParams->usActiveMaxChTime,
15370 sizeof(tSirUpdateScanParams),
15371 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15372
Jeff Johnson295189b2012-06-20 16:38:30 -070015373 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15374 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015375 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15376 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015377 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15378 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015379 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15380 pUpdateScanParams->usActiveMaxChTime;
15381 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15382 pUpdateScanParams->usActiveMinChTime;
15383 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15384 pUpdateScanParams->usPassiveMaxChTime;
15385 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15386 pUpdateScanParams->usPassiveMinChTime;
15387
Jeff Johnson295189b2012-06-20 16:38:30 -070015388 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015389 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15390 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015391
Jeff Johnson295189b2012-06-20 16:38:30 -070015392 for ( i = 0; i <
15393 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15394 i++)
15395 {
15396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15397 "Update Scan Parameters channel: %d",
15398 pUpdateScanParams->aChannels[i]);
15399
15400 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15401 pUpdateScanParams->aChannels[i];
15402 }
15403
Yue Ma7f44bbe2013-04-12 11:47:39 -070015404 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15405 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015406
Jeff Johnson295189b2012-06-20 16:38:30 -070015407 /* Store Params pass it to WDI */
15408 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15409 pWdaParams->pWdaContext = pWDA;
15410 /* Store param pointer as passed in by caller */
15411 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015412
Jeff Johnson295189b2012-06-20 16:38:30 -070015413
15414
15415 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015416 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015417 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015418 if(IS_WDI_STATUS_FAILURE(status))
15419 {
15420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15421 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15423 vos_mem_free(pWdaParams->wdaMsgParam);
15424 vos_mem_free(pWdaParams);
15425 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015426 return CONVERT_WDI2VOS_STATUS(status) ;
15427}
15428#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015429
15430#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15431/*
15432 * FUNCTION: WDA_RoamOffloadScanReqCallback
15433 *
15434 */
15435void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15436{
15437 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015438 vos_msg_t vosMsg;
15439 wpt_uint8 reason = 0;
15440
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015442 "<------ %s " ,__func__);
15443 if (NULL == pWdaParams)
15444 {
15445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15446 "%s: pWdaParams received NULL", __func__);
15447 VOS_ASSERT(0) ;
15448 return ;
15449 }
15450 if ( pWdaParams != NULL )
15451 {
15452 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15453 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015454 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15456 }
15457 if ( pWdaParams->wdaMsgParam != NULL)
15458 {
15459 vos_mem_free(pWdaParams->wdaMsgParam);
15460 }
15461
15462 vos_mem_free(pWdaParams) ;
15463 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015464 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15465 vosMsg.bodyptr = NULL;
15466 if (WDI_STATUS_SUCCESS != status)
15467 {
15468 reason = 0;
15469 }
15470 vosMsg.bodyval = reason;
15471 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15472 {
15473 /* free the mem and return */
15474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015475 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015476 }
15477
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015478 return ;
15479}
15480#endif
15481
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015482/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015483 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015484 *
15485 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015486void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015487{
15488 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15489
15490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15491 "<------ %s " ,__func__);
15492
15493 if(NULL == pWdaParams)
15494 {
15495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15496 "%s: pWdaParams received NULL", __func__);
15497 VOS_ASSERT(0);
15498 return;
15499 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015500
15501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15502 vos_mem_free(pWdaParams->wdaMsgParam);
15503 vos_mem_free(pWdaParams);
15504
15505 return;
15506}
15507/*
15508 * FUNCTION: WDA_SetPowerParamsReqCallback
15509 * Free memory.
15510 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15511 */
15512void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15513{
15514 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15515
15516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15517 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15518
15519 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015520 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15522 "%s: pWdaParams received NULL", __func__);
15523 VOS_ASSERT(0);
15524 return;
15525 }
15526
15527 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15528 {
15529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15530 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015531 vos_mem_free(pWdaParams);
15532 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015533
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015534 return;
15535}
15536
Jeff Johnson295189b2012-06-20 16:38:30 -070015537#ifdef WLAN_FEATURE_PACKET_FILTERING
15538/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015539 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015540 *
15541 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015542void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015543 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15544 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015545{
15546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015548 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015549 if(NULL == pWdaParams)
15550 {
15551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015552 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015553 VOS_ASSERT(0) ;
15554 return ;
15555 }
15556
15557 vos_mem_free(pWdaParams->wdaMsgParam) ;
15558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15559 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015560 //print a msg, nothing else to do
15561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015562 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015563 return ;
15564}
Jeff Johnson295189b2012-06-20 16:38:30 -070015565/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015566 * FUNCTION: WDA_8023MulticastListReqCallback
15567 * Free memory.
15568 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15569 */
15570void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15571{
15572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15573
15574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15575 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15576
15577 if(NULL == pWdaParams)
15578 {
15579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15580 "%s: pWdaParams received NULL", __func__);
15581 VOS_ASSERT(0);
15582 return;
15583 }
15584
15585 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15586 {
15587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15588 vos_mem_free(pWdaParams->wdaMsgParam);
15589 vos_mem_free(pWdaParams);
15590 }
15591
15592 return;
15593}
15594/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015595 * FUNCTION: WDA_Process8023MulticastListReq
15596 * Request to WDI to add 8023 Multicast List
15597 */
15598VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15599 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15600{
Jeff Johnson43971f52012-07-17 12:26:56 -070015601 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015602 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15603 tWDA_ReqParams *pWdaParams ;
15604 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015606 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015607 pwdiFltPktSetMcListReqParamsType =
15608 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15609 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15610 ) ;
15611 if(NULL == pwdiFltPktSetMcListReqParamsType)
15612 {
15613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015615 return VOS_STATUS_E_NOMEM;
15616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15618 if(NULL == pWdaParams)
15619 {
15620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015622 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15623 return VOS_STATUS_E_NOMEM;
15624 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015625
Jeff Johnson295189b2012-06-20 16:38:30 -070015626 //
15627 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15628 //
15629 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015630 pRcvFltMcAddrList->ulMulticastAddrCnt;
15631
15632 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15633 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15634 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15635 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15636
Jeff Johnson295189b2012-06-20 16:38:30 -070015637 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15638 {
15639 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15640 &(pRcvFltMcAddrList->multicastAddr[i]),
15641 sizeof(tSirMacAddr));
15642 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015643 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15644 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015645
Jeff Johnson295189b2012-06-20 16:38:30 -070015646 /* Store Params pass it to WDI */
15647 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15648 pWdaParams->pWdaContext = pWDA;
15649 /* Store param pointer as passed in by caller */
15650 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015651 status = WDI_8023MulticastListReq(
15652 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015653 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015654 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015655 if(IS_WDI_STATUS_FAILURE(status))
15656 {
15657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15658 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15660 vos_mem_free(pWdaParams->wdaMsgParam);
15661 vos_mem_free(pWdaParams);
15662 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015663 return CONVERT_WDI2VOS_STATUS(status) ;
15664}
Jeff Johnson295189b2012-06-20 16:38:30 -070015665/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015666 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015667 *
15668 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015669void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015670 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15671 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015672{
15673 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015675 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015676 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070015677 if(NULL == pWdaParams)
15678 {
15679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015680 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015681 VOS_ASSERT(0) ;
15682 return ;
15683 }
15684
15685 vos_mem_free(pWdaParams->wdaMsgParam) ;
15686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15687 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015688 //print a msg, nothing else to do
15689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015690 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015691 return ;
15692}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015693
15694/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015695 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
15696 * Free memory.
15697 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015698 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015699void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015700 void* pUserData)
15701{
15702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15703
15704 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15705 "<------ %s, wdiStatus: %d",
15706 __func__, wdiStatus);
15707
15708 if (NULL == pWdaParams)
15709 {
15710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15711 "%s: Invalid pWdaParams pointer", __func__);
15712 VOS_ASSERT(0);
15713 return;
15714 }
15715
15716 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15717 {
15718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15719 vos_mem_free(pWdaParams->wdaMsgParam);
15720 vos_mem_free(pWdaParams);
15721 }
15722
15723 return;
15724}
15725
Jeff Johnson295189b2012-06-20 16:38:30 -070015726/*
15727 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
15728 * Request to WDI to set Receive Filters
15729 */
15730VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
15731 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
15732{
Jeff Johnson43971f52012-07-17 12:26:56 -070015733 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015734 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
15735 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
15736 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
15737 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
15738 tWDA_ReqParams *pWdaParams ;
15739 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015741 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015742 if(NULL == pwdiSetRcvPktFilterReqParamsType)
15743 {
15744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015746 VOS_ASSERT(0);
15747 return VOS_STATUS_E_NOMEM;
15748 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15750 if(NULL == pWdaParams)
15751 {
15752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015754 VOS_ASSERT(0);
15755 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
15756 return VOS_STATUS_E_NOMEM;
15757 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015758 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
15759 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
15760 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
15761 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070015762 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15763 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15764
15765 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15766 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015767
15768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15769 "FID %d FT %d NParams %d CT %d",
15770 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15771 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15772 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15773 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015774 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15775 {
15776 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15777 &pRcvPktFilterCfg->paramsData[i],
15778 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015780 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015781 pwdiSetRcvPktFilterReqParamsType->
15782 wdiPktFilterCfg.paramsData[i].protocolLayer,
15783 pwdiSetRcvPktFilterReqParamsType->
15784 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015786 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015787 pwdiSetRcvPktFilterReqParamsType->
15788 wdiPktFilterCfg.paramsData[i].dataOffset,
15789 pwdiSetRcvPktFilterReqParamsType->
15790 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015792 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015793 pwdiSetRcvPktFilterReqParamsType->
15794 wdiPktFilterCfg.paramsData[i].compareData[0],
15795 pwdiSetRcvPktFilterReqParamsType->
15796 wdiPktFilterCfg.paramsData[i].compareData[1],
15797 pwdiSetRcvPktFilterReqParamsType->
15798 wdiPktFilterCfg.paramsData[i].compareData[2],
15799 pwdiSetRcvPktFilterReqParamsType->
15800 wdiPktFilterCfg.paramsData[i].compareData[3],
15801 pwdiSetRcvPktFilterReqParamsType->
15802 wdiPktFilterCfg.paramsData[i].compareData[4],
15803 pwdiSetRcvPktFilterReqParamsType->
15804 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015806 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015807 pwdiSetRcvPktFilterReqParamsType->
15808 wdiPktFilterCfg.paramsData[i].dataMask[0],
15809 pwdiSetRcvPktFilterReqParamsType->
15810 wdiPktFilterCfg.paramsData[i].dataMask[1],
15811 pwdiSetRcvPktFilterReqParamsType->
15812 wdiPktFilterCfg.paramsData[i].dataMask[2],
15813 pwdiSetRcvPktFilterReqParamsType->
15814 wdiPktFilterCfg.paramsData[i].dataMask[3],
15815 pwdiSetRcvPktFilterReqParamsType->
15816 wdiPktFilterCfg.paramsData[i].dataMask[4],
15817 pwdiSetRcvPktFilterReqParamsType->
15818 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015819 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015820 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015821 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015822 /* Store Params pass it to WDI */
15823 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15824 pWdaParams->pWdaContext = pWDA;
15825 /* Store param pointer as passed in by caller */
15826 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015827 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015828 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015829 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015830 if(IS_WDI_STATUS_FAILURE(status))
15831 {
15832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15833 "Failure in SetFilter(),free all the memory,status %d ",status);
15834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15835 vos_mem_free(pWdaParams->wdaMsgParam);
15836 vos_mem_free(pWdaParams);
15837 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015838 return CONVERT_WDI2VOS_STATUS(status) ;
15839}
Jeff Johnson295189b2012-06-20 16:38:30 -070015840/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015841 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015842 *
15843 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015844void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015845 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15846 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015847{
15848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15849 tWDA_CbContext *pWDA;
15850 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15851 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15852 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15853 tANI_U8 i;
15854 vos_msg_t vosMsg;
15855
15856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015857 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015858 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15859
Jeff Johnsone7245742012-09-05 17:12:55 -070015860 if(NULL == pRcvFltPktMatchCntRsp)
15861 {
15862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015863 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015864 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015865 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015866 return ;
15867 }
15868
Jeff Johnson295189b2012-06-20 16:38:30 -070015869 if(NULL == pWdaParams)
15870 {
15871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015872 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015873 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015874 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015875 return ;
15876 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015877 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15878 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015879 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15880 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15881
15882 /* Message Header */
15883 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15884 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15885
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015886 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015887
15888 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15889 {
15890 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15891 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15892 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015893 /* VOS message wrapper */
15894 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15895 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15896 vosMsg.bodyval = 0;
15897 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15898 {
15899 /* free the mem and return */
15900 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15901 }
15902
15903 vos_mem_free(pWdaParams->wdaMsgParam) ;
15904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15905 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015906
15907 return;
15908}
15909/*
15910 * FUNCTION: WDA_FilterMatchCountReqCallback
15911 * Free memory and send RSP back to SME.
15912 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15913 */
15914void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15915{
15916 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15917 vos_msg_t vosMsg;
15918
15919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15920 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15921
15922 if(NULL == pWdaParams)
15923 {
15924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15925 "%s: pWdaParams received NULL", __func__);
15926 VOS_ASSERT(0);
15927 return;
15928 }
15929
15930 /* VOS message wrapper */
15931 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15932 vosMsg.bodyptr = NULL;
15933 vosMsg.bodyval = 0;
15934
15935 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15936 {
15937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15938 vos_mem_free(pWdaParams->wdaMsgParam);
15939 vos_mem_free(pWdaParams);
15940 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15941 }
15942
15943 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015944}
Jeff Johnson295189b2012-06-20 16:38:30 -070015945/*
15946 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15947 * Request to WDI to get PC Filter Match Count
15948 */
15949VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15950{
Jeff Johnson43971f52012-07-17 12:26:56 -070015951 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015952 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15953 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15954 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015956 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015957 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15958 {
15959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015961 VOS_ASSERT(0);
15962 return VOS_STATUS_E_NOMEM;
15963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015964 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15965 if(NULL == pWdaParams)
15966 {
15967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015969 VOS_ASSERT(0);
15970 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15971 return VOS_STATUS_E_NOMEM;
15972 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015973
Yue Ma7f44bbe2013-04-12 11:47:39 -070015974 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15975 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015976
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015977 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15978 pRcvFltPktMatchRsp->bssId,
15979 sizeof(wpt_macAddr));
15980
Jeff Johnson295189b2012-06-20 16:38:30 -070015981 /* Store Params pass it to WDI */
15982 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15983 pWdaParams->pWdaContext = pWDA;
15984 /* Store param pointer as passed in by caller */
15985 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015986 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015987 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015988 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015989 if(IS_WDI_STATUS_FAILURE(status))
15990 {
15991 /* failure returned by WDI API */
15992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15993 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15995 vos_mem_free(pWdaParams) ;
15996 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15997 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15998 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015999 return CONVERT_WDI2VOS_STATUS(status) ;
16000}
Jeff Johnson295189b2012-06-20 16:38:30 -070016001/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016002 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016003 *
16004 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016005void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016006 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16007 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016008{
16009 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016011 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016012/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16013 if(NULL == pWdaParams)
16014 {
16015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016016 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016017 VOS_ASSERT(0) ;
16018 return ;
16019 }
16020
16021 vos_mem_free(pWdaParams->wdaMsgParam) ;
16022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16023 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016024 //print a msg, nothing else to do
16025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016026 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016027 return ;
16028}
Jeff Johnson295189b2012-06-20 16:38:30 -070016029/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016030 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16031 * Free memory.
16032 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16033 */
16034void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16035{
16036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16037
16038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16039 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16040
16041 if(NULL == pWdaParams)
16042 {
16043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16044 "%s: Invalid pWdaParams pointer", __func__);
16045 VOS_ASSERT(0);
16046 return;
16047 }
16048
16049 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16050 {
16051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16052 vos_mem_free(pWdaParams->wdaMsgParam);
16053 vos_mem_free(pWdaParams);
16054 }
16055
16056 return;
16057}
16058/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016059 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16060 * Request to WDI to clear Receive Filters
16061 */
16062VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16063 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16064{
Jeff Johnson43971f52012-07-17 12:26:56 -070016065 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016066 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16067 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16068 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016070 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016071 if(NULL == pwdiRcvFltPktClearReqParamsType)
16072 {
16073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016074 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016075 VOS_ASSERT(0);
16076 return VOS_STATUS_E_NOMEM;
16077 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016078 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16079 if(NULL == pWdaParams)
16080 {
16081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016083 VOS_ASSERT(0);
16084 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16085 return VOS_STATUS_E_NOMEM;
16086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016087 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16088 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016089 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16090 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16091 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16092 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016093
Yue Ma7f44bbe2013-04-12 11:47:39 -070016094 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016095 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016096 /* Store Params pass it to WDI */
16097 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16098 pWdaParams->pWdaContext = pWDA;
16099 /* Store param pointer as passed in by caller */
16100 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016101 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016102 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016103 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016104 if(IS_WDI_STATUS_FAILURE(status))
16105 {
16106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16107 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016109 vos_mem_free(pWdaParams->wdaMsgParam);
16110 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016111 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016112 return CONVERT_WDI2VOS_STATUS(status) ;
16113}
16114#endif // WLAN_FEATURE_PACKET_FILTERING
16115
Jeff Johnson295189b2012-06-20 16:38:30 -070016116/*
16117 * FUNCTION: WDA_ProcessSetPowerParamsReq
16118 * Request to WDI to set power params
16119 */
16120VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16121 tSirSetPowerParamsReq *pPowerParams)
16122{
Jeff Johnson43971f52012-07-17 12:26:56 -070016123 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016124 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16125 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016126 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016129 if(NULL == pwdiSetPowerParamsReqInfo)
16130 {
16131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016133 VOS_ASSERT(0);
16134 return VOS_STATUS_E_NOMEM;
16135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16137 if(NULL == pWdaParams)
16138 {
16139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016141 VOS_ASSERT(0);
16142 vos_mem_free(pwdiSetPowerParamsReqInfo);
16143 return VOS_STATUS_E_NOMEM;
16144 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016145
Jeff Johnson295189b2012-06-20 16:38:30 -070016146
16147 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16148 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016149 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16150 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016151 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16152 pPowerParams->uListenInterval;
16153 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16154 pPowerParams->uBcastMcastFilter;
16155 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16156 pPowerParams->uEnableBET;
16157 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16158 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016159 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16160 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016161 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16162 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016163
Jeff Johnson295189b2012-06-20 16:38:30 -070016164 /* Store Params pass it to WDI */
16165 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16166 pWdaParams->pWdaContext = pWDA;
16167 /* Store param pointer as passed in by caller */
16168 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016169 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016170 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016171 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016172 if(IS_WDI_STATUS_FAILURE(status))
16173 {
16174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16175 "Failure in Set power params REQ WDI API, free all the memory " );
16176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16177 vos_mem_free(pWdaParams->wdaMsgParam);
16178 pWdaParams->wdaWdiApiMsgParam = NULL;
16179 pWdaParams->wdaMsgParam = NULL;
16180 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016181 return CONVERT_WDI2VOS_STATUS(status) ;
16182}
16183
16184/*
16185 * FUNCTION: WDA_SetTmLevelRspCallback
16186 * Set TM Level response
16187 */
16188void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16189{
16190 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16191
16192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016193 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016194
16195 if(NULL == pWdaParams)
16196 {
16197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016198 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016199 VOS_ASSERT(0) ;
16200 return ;
16201 }
16202
16203 /* Dose not need to send notification to upper layer
16204 * Just free allocated resources */
16205 if( pWdaParams != NULL )
16206 {
16207 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16208 {
16209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16210 }
16211 vos_mem_free(pWdaParams->wdaMsgParam) ;
16212 vos_mem_free(pWdaParams) ;
16213 }
16214}
16215
16216/*
16217 * FUNCTION: WDA_ProcessSetTmLevelReq
16218 * Set TM Level request
16219 */
16220VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16221 tAniSetTmLevelReq *setTmLevelReq)
16222{
16223 WDI_Status status = WDI_STATUS_SUCCESS ;
16224 tWDA_ReqParams *pWdaParams ;
16225 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16226 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16227 sizeof(WDI_SetTmLevelReqType)) ;
16228 if(NULL == wdiSetTmLevelReq)
16229 {
16230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016231 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016232 VOS_ASSERT(0);
16233 return VOS_STATUS_E_NOMEM;
16234 }
16235
16236 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16237 if(NULL == pWdaParams)
16238 {
16239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016240 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016241 VOS_ASSERT(0);
16242 vos_mem_free(wdiSetTmLevelReq);
16243 return VOS_STATUS_E_NOMEM;
16244 }
16245
16246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016248
16249 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16250 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16251
16252 pWdaParams->pWdaContext = pWDA;
16253 pWdaParams->wdaMsgParam = setTmLevelReq;
16254 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16255
16256 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16257 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16258
16259 if(IS_WDI_STATUS_FAILURE(status))
16260 {
16261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016262 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016263 vos_mem_free(pWdaParams->wdaMsgParam) ;
16264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16265 vos_mem_free(pWdaParams) ;
16266 }
16267
16268 return CONVERT_WDI2VOS_STATUS(status) ;
16269}
16270
16271VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16272 tpTxControlParams pTxCtrlParam)
16273{
16274 VOS_STATUS wdaStatus;
16275
16276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016277 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016278 if( pTxCtrlParam == NULL )
16279 {
16280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016281 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016282 return VOS_STATUS_E_FAILURE;
16283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016284 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16285 {
16286 wdaStatus = WDA_SuspendDataTx(pWDA);
16287 }
16288 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16289 {
16290 wdaStatus = WDA_ResumeDataTx(pWDA);
16291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016292 return wdaStatus;
16293}
16294
16295 /* FUNCTION WDA_featureCapsExchange
16296 * WDA API to invoke capability exchange between host and FW.
16297 */
16298void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16299{
16300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016301 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016302 WDI_featureCapsExchangeReq( NULL, pVosContext);
16303}
16304
Yathish9f22e662012-12-10 14:21:35 -080016305/* FUNCTION WDA_disableCapablityFeature
16306 * WDA API to diable Active mode offload in host.
16307 */
16308void WDA_disableCapablityFeature(tANI_U8 feature_index)
16309{
16310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16311 "%s:enter", __func__ );
16312 WDI_disableCapablityFeature(feature_index);
16313}
16314
Jeff Johnson295189b2012-06-20 16:38:30 -070016315 /* FUNCTION WDA_getHostWlanFeatCaps
16316 * Wrapper for WDI API, that will return if the feature (enum value).passed
16317 * to this API is supported or not in Host
16318 * return value
16319 * 0 - implies feature is NOT Supported
16320 * any non zero value - implies feature is SUPPORTED
16321 */
16322tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16323{
16324 return WDI_getHostWlanFeatCaps(featEnumValue);
16325}
16326
16327 /* FUNCTION WDA_getFwWlanFeatCaps
16328 * Wrapper for WDI API, that will return if the feature (enum value).passed
16329 * to this API is supported or not in FW
16330 * return value
16331 * 0 - implies feature is NOT Supported
16332 * any non zero value - implies feature is SUPPORTED
16333 */
16334tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16335{
16336 return WDI_getFwWlanFeatCaps(featEnumValue);
16337}
16338
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016339
Jeff Johnson295189b2012-06-20 16:38:30 -070016340/*
16341 * FUNCTION: WDA_shutdown
16342 * Shutdown WDA/WDI without handshaking with Riva.
16343 * Synchronous function.
16344 */
16345VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16346{
16347 WDI_Status wdiStatus;
16348 //tANI_U8 eventIdx = 0;
16349 VOS_STATUS status = VOS_STATUS_SUCCESS;
16350 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016351 if (NULL == pWDA)
16352 {
16353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016354 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016355 VOS_ASSERT(0);
16356 return VOS_STATUS_E_FAILURE;
16357 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016358 /* FTM mode stay START_STATE */
16359 if( (WDA_READY_STATE != pWDA->wdaState) &&
16360 (WDA_INIT_STATE != pWDA->wdaState) &&
16361 (WDA_START_STATE != pWDA->wdaState) )
16362 {
16363 VOS_ASSERT(0);
16364 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016365
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016366 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16367 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016368 {
16369 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016370 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016371 }
Leo Chang9d76f622013-08-23 16:34:52 -070016372 else
16373 {
16374 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16375 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016376
Jeff Johnson295189b2012-06-20 16:38:30 -070016377 /* call WDI shutdown */
16378 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016379 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16380 {
16381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16382 "error in WDA Stop" );
16383 status = VOS_STATUS_E_FAILURE;
16384 }
16385 /* WDI stop is synchrnous, shutdown is complete when it returns */
16386 pWDA->wdaState = WDA_STOP_STATE;
16387
Jeff Johnson295189b2012-06-20 16:38:30 -070016388 /* shutdown should perform the stop & close actions. */
16389 /* Destroy the event */
16390 status = vos_event_destroy(&pWDA->txFrameEvent);
16391 if(!VOS_IS_STATUS_SUCCESS(status))
16392 {
16393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016394 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016395 status = VOS_STATUS_E_FAILURE;
16396 }
16397 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16398 if(!VOS_IS_STATUS_SUCCESS(status))
16399 {
16400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016401 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016402 status = VOS_STATUS_E_FAILURE;
16403 }
16404 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16405 if(!VOS_IS_STATUS_SUCCESS(status))
16406 {
16407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016408 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016409 status = VOS_STATUS_E_FAILURE;
16410 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016411 /* free WDA context */
16412 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16413 if ( !VOS_IS_STATUS_SUCCESS(status) )
16414 {
16415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16416 "error in WDA close " );
16417 status = VOS_STATUS_E_FAILURE;
16418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016419 return status;
16420}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016421
Jeff Johnsone7245742012-09-05 17:12:55 -070016422/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016423 * FUNCTION: WDA_setNeedShutdown
16424 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016425 */
16426
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016427void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016428{
16429 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016430 if(pWDA == NULL)
16431 {
16432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16433 "Could not get the WDA Context pointer" );
16434 return;
16435 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016436 pWDA->needShutdown = TRUE;
16437}
16438/*
16439 * FUNCTION: WDA_needShutdown
16440 * WDA needs a shutdown
16441 */
16442
16443v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16444{
16445 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016446 if(pWDA == NULL)
16447 {
16448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16449 "Could not get the WDA Context pointer" );
16450 return 0;
16451 }
16452 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016453}
16454
Mohit Khanna4a70d262012-09-11 16:30:12 -070016455#ifdef WLAN_FEATURE_11AC
16456/*
16457 * FUNCTION: WDA_SetBeaconFilterReqCallback
16458 *
16459 */
16460void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16461{
16462 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016464 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016465 if(NULL == pWdaParams)
16466 {
16467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016468 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016469 VOS_ASSERT(0) ;
16470 return ;
16471 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016472
Mohit Khanna4a70d262012-09-11 16:30:12 -070016473 vos_mem_free(pWdaParams->wdaMsgParam) ;
16474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16475 vos_mem_free(pWdaParams) ;
16476 /*
16477 * No respone required for SetBeaconFilter req so just free the request
16478 * param here
16479 */
16480
16481 return ;
16482}
16483
16484VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16485 tUpdateVHTOpMode *pData)
16486{
16487 WDI_Status status = WDI_STATUS_SUCCESS ;
16488 tWDA_ReqParams *pWdaParams ;
16489 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16490 sizeof(WDI_UpdateVHTOpMode)) ;
16491 if(NULL == wdiTemp)
16492 {
16493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016494 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016495 VOS_ASSERT(0);
16496 return VOS_STATUS_E_NOMEM;
16497 }
16498 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16499 if(NULL == pWdaParams)
16500 {
16501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016502 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016503 VOS_ASSERT(0);
16504 vos_mem_free(wdiTemp);
16505 return VOS_STATUS_E_NOMEM;
16506 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053016507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16508 "------> %s Opmode = %d and staid = %d" ,
16509 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016510 wdiTemp->opMode = pData->opMode;
16511 wdiTemp->staId = pData->staId;
16512
16513 pWdaParams->pWdaContext = pWDA;
16514 /* Store Req pointer, as this will be used for response */
16515 pWdaParams->wdaMsgParam = (void *)pData;
16516 /* store Params pass it to WDI */
16517 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16518
16519 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16520
16521 if(IS_WDI_STATUS_FAILURE(status))
16522 {
16523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16524 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16526 vos_mem_free(pWdaParams->wdaMsgParam);
16527 vos_mem_free(pWdaParams);
16528 }
16529 return CONVERT_WDI2VOS_STATUS(status) ;
16530}
16531#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016532
16533/*==========================================================================
16534 FUNCTION WDA_TransportChannelDebug
16535
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016536 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016537 Display Transport Channel debugging information
16538 User may request to display DXE channel snapshot
16539 Or if host driver detects any abnormal stcuk may display
16540
16541 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016542 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016543 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016544 debugFlags : Enable stall detect features
16545 defined by WPAL_DeviceDebugFlags
16546 These features may effect
16547 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016548
16549 RETURN VALUE
16550 NONE
16551
16552===========================================================================*/
16553void WDA_TransportChannelDebug
16554(
schang6295e542013-03-12 15:31:23 -070016555 tpAniSirGlobal pMac,
16556 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016557 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016558)
16559{
Mihir Shete40a55652014-03-02 14:14:47 +053016560 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016561 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016562}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016563
16564/*==========================================================================
16565 FUNCTION WDA_SetEnableSSR
16566
16567 DESCRIPTION
16568 API to enable/disable SSR on WDI timeout
16569
16570 PARAMETERS
16571 enableSSR : enable/disable SSR
16572
16573 RETURN VALUE
16574 NONE
16575
16576===========================================================================*/
16577void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16578{
16579 WDI_SetEnableSSR(enableSSR);
16580}
Leo Chang9056f462013-08-01 19:21:11 -070016581
16582#ifdef FEATURE_WLAN_LPHB
16583/*
16584 * FUNCTION: WDA_LPHBconfRspCallback
16585 *
16586 */
16587void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16588{
16589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16590
16591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16592 "<------ %s " ,__func__);
16593 if (NULL == pWdaParams)
16594 {
16595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16596 "%s: pWdaParams received NULL", __func__);
16597 VOS_ASSERT(0) ;
16598 return ;
16599 }
16600
16601 /* Do not need to send notification to upper layer
16602 * Just free allocated resources */
16603 if (pWdaParams != NULL)
16604 {
16605 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16606 {
16607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16608 }
16609 vos_mem_free(pWdaParams->wdaMsgParam) ;
16610 vos_mem_free(pWdaParams) ;
16611 }
16612
16613 return;
16614}
16615
16616/*
16617 * FUNCTION: WDA_ProcessLPHBConfReq
16618 *
16619 */
16620VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16621 tSirLPHBReq *pData)
16622{
16623 WDI_Status wdiStatus;
16624 tWDA_ReqParams *pWdaParams ;
16625
16626 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16627 "------> %s " , __func__);
16628
16629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16630 if (NULL == pWdaParams)
16631 {
16632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16633 "%s: VOS MEM Alloc Failure", __func__);
16634 VOS_ASSERT(0);
16635 vos_mem_free(pData);
16636 return VOS_STATUS_E_NOMEM;
16637 }
16638
16639 pWdaParams->pWdaContext = pWDA;
16640 pWdaParams->wdaMsgParam = (void *)pData;
16641 pWdaParams->wdaWdiApiMsgParam = NULL;
16642
16643 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16644 if (WDI_STATUS_PENDING == wdiStatus)
16645 {
16646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16647 "Pending received for %s:%d ", __func__, __LINE__);
16648 }
16649 else if (WDI_STATUS_SUCCESS != wdiStatus)
16650 {
16651 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16652 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16653 vos_mem_free(pWdaParams->wdaMsgParam);
16654 vos_mem_free(pWdaParams);
16655 }
16656
16657 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16658}
16659#endif /* FEATURE_WLAN_LPHB */
16660
c_hpothu92367912014-05-01 15:18:17 +053016661void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16662 void* pUserData)
16663{
16664 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16665
16666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16667 "<------ %s " ,__func__);
16668 if (NULL == pBcnMissRateInfo)
16669 {
16670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16671 "%s: pWdaParams received NULL", __func__);
16672 VOS_ASSERT(0) ;
16673 return ;
16674 }
16675 if (pBcnMissRateInfo->callback)
16676 {
16677 pBcnMissRateInfo->callback(status, bcnMissRate,
16678 pBcnMissRateInfo->data);
16679 }
16680 vos_mem_free(pUserData);
16681
16682 return;
16683}
16684
16685v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16686 tSirBcnMissRateReq *pData)
16687{
16688 WDI_Status wdiStatus;
16689 tSirBcnMissRateInfo *pBcnMissRateInfo;
16690
16691 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16692 "------> %s " , __func__);
16693
16694 pBcnMissRateInfo =
16695 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
16696 if (NULL == pBcnMissRateInfo)
16697 {
16698 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16699 "%s: VOS MEM Alloc Failure", __func__);
16700 VOS_ASSERT(0);
16701 vos_mem_free(pData);
16702 return;
16703 }
16704
16705 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
16706 pBcnMissRateInfo->data = pData->data;
16707
16708 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
16709 WDA_GetBcnMissRateCallback,
16710 pData->bssid);
16711 if (WDI_STATUS_PENDING == wdiStatus)
16712 {
16713 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16714 "Pending received for %s:%d ", __func__, __LINE__);
16715 }
16716 else if (WDI_STATUS_SUCCESS != wdiStatus)
16717 {
16718 if (pBcnMissRateInfo->callback)
16719 {
16720 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
16721 -1, pBcnMissRateInfo->data);
16722 }
16723 }
16724 vos_mem_free(pData);
16725}
Dino Mycle41bdc942014-06-10 11:30:24 +053016726
16727#ifdef WLAN_FEATURE_EXTSCAN
16728
16729/*==========================================================================
16730 FUNCTION WDA_EXTScanStartRspCallback
16731
16732 DESCRIPTION
16733 API to send EXTScan Start Response to HDD
16734
16735 PARAMETERS
16736 pEventData: Response from FW
16737 pUserData:
16738===========================================================================*/
16739void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
16740{
16741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16742 tWDA_CbContext *pWDA = NULL;
16743 void *pCallbackContext;
16744 tpAniSirGlobal pMac;
16745
16746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16747 "%s:", __func__);
16748 if (NULL == pWdaParams)
16749 {
16750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16751 "%s: pWdaParams received NULL", __func__);
16752 VOS_ASSERT(0);
16753 return;
16754 }
16755
16756 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16757
16758 if (NULL == pWDA)
16759 {
16760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16761 "%s: pWDA received NULL", __func__);
16762 VOS_ASSERT(0);
16763 goto error;
16764 }
16765
16766 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16767 if (NULL == pMac)
16768 {
16769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16770 "%s:pMac is NULL", __func__);
16771 VOS_ASSERT(0);
16772 goto error;
16773 }
16774
16775 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16776
16777 if (pMac->sme.pEXTScanIndCb)
16778 {
16779 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
16780 pEventData);
16781 }
16782 else
16783 {
16784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16785 "%s:HDD callback is null", __func__);
16786 VOS_ASSERT(0);
16787 }
16788
16789error:
16790
16791 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16792 {
16793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16794 }
16795 if (pWdaParams->wdaMsgParam != NULL)
16796 {
16797 vos_mem_free(pWdaParams->wdaMsgParam);
16798 }
16799 vos_mem_free(pWdaParams) ;
16800
16801 return;
16802}
16803
16804/*==========================================================================
16805 FUNCTION WDA_EXTScanStopRspCallback
16806
16807 DESCRIPTION
16808 API to send EXTScan Stop Response to HDD
16809
16810 PARAMETERS
16811 pEventData: Response from FW
16812 pUserData:
16813===========================================================================*/
16814void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
16815{
16816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16817 tWDA_CbContext *pWDA = NULL;
16818 void *pCallbackContext;
16819 tpAniSirGlobal pMac;
16820
16821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16822 "%s:", __func__);
16823 if (NULL == pWdaParams)
16824 {
16825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16826 "%s: pWdaParams received NULL", __func__);
16827 VOS_ASSERT(0);
16828 return;
16829 }
16830
16831 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16832
16833 if (NULL == pWDA)
16834 {
16835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16836 "%s: pWDA received NULL", __func__);
16837 VOS_ASSERT(0);
16838 goto error;
16839 }
16840
16841 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16842 if (NULL == pMac)
16843 {
16844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16845 "%s:pMac is NULL", __func__);
16846 VOS_ASSERT(0);
16847 goto error;
16848 }
16849 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16850
16851 if (pMac->sme.pEXTScanIndCb)
16852 {
16853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16854 "%s:HDD call back function called", __func__);
16855 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
16856 pEventData);
16857 }
16858 else
16859 {
16860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16861 "%s:HDD callback is null", __func__);
16862 VOS_ASSERT(0);
16863 }
16864
16865error:
16866
16867 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16868 {
16869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16870 }
16871 if (pWdaParams->wdaMsgParam != NULL)
16872 {
16873 vos_mem_free(pWdaParams->wdaMsgParam);
16874 }
16875 vos_mem_free(pWdaParams) ;
16876
16877
16878 return;
16879}
16880
16881/*==========================================================================
16882 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
16883
16884 DESCRIPTION
16885 API to send EXTScan Get Cached Results Response to HDD
16886
16887 PARAMETERS
16888 pEventData: Response from FW
16889 pUserData:
16890===========================================================================*/
16891void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
16892{
16893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16894 tWDA_CbContext *pWDA = NULL;
16895 void *pCallbackContext;
16896 tpAniSirGlobal pMac;
16897
16898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16899 "%s: ", __func__);
16900 if (NULL == pWdaParams)
16901 {
16902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16903 "%s: pWdaParams received NULL", __func__);
16904 VOS_ASSERT(0);
16905 return;
16906 }
16907
16908 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16909
16910 if (NULL == pWDA)
16911 {
16912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16913 "%s: pWDA received NULL", __func__);
16914 VOS_ASSERT(0);
16915 goto error;
16916 }
16917
16918 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16919 if (NULL == pMac)
16920 {
16921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16922 "%s:pMac is NULL", __func__);
16923 VOS_ASSERT(0);
16924 goto error;
16925 }
16926
16927 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16928
16929 if (pMac->sme.pEXTScanIndCb)
16930 {
16931 pMac->sme.pEXTScanIndCb(pCallbackContext,
16932 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
16933 pEventData);
16934 }
16935 else
16936 {
16937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16938 "%s:HDD callback is null", __func__);
16939 VOS_ASSERT(0);
16940 }
16941
16942
16943error:
16944
16945 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16946 {
16947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16948 }
16949 if (pWdaParams->wdaMsgParam != NULL)
16950 {
16951 vos_mem_free(pWdaParams->wdaMsgParam);
16952 }
16953 vos_mem_free(pWdaParams) ;
16954
16955 return;
16956}
16957
16958/*==========================================================================
16959 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
16960
16961 DESCRIPTION
16962 API to send EXTScan Get Capabilities Response to HDD
16963
16964 PARAMETERS
16965 pEventData: Response from FW
16966 pUserData:
16967===========================================================================*/
16968void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
16969{
16970 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16971 tWDA_CbContext *pWDA = NULL;
16972 void *pCallbackContext;
16973 tpAniSirGlobal pMac;
16974
16975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16976 "%s:", __func__);
16977 if (NULL == pWdaParams)
16978 {
16979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16980 "%s: pWdaParams received NULL", __func__);
16981 VOS_ASSERT(0);
16982 return;
16983 }
16984
16985 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16986
16987 if (NULL == pWDA)
16988 {
16989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16990 "%s: pWDA received NULL", __func__);
16991 VOS_ASSERT(0);
16992 goto error;
16993 }
16994
16995 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16996 if (NULL == pMac)
16997 {
16998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16999 "%s:pMac is NULL", __func__);
17000 VOS_ASSERT(0);
17001 goto error;
17002 }
17003
17004 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17005
17006 if (pMac->sme.pEXTScanIndCb)
17007 {
17008 pMac->sme.pEXTScanIndCb(pCallbackContext,
17009 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17010 pEventData);
17011 }
17012 else
17013 {
17014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17015 "%s:HDD callback is null", __func__);
17016 VOS_ASSERT(0);
17017 }
17018
17019
17020error:
17021
17022 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17023 {
17024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17025 }
17026 if (pWdaParams->wdaMsgParam != NULL)
17027 {
17028 vos_mem_free(pWdaParams->wdaMsgParam);
17029 }
17030 vos_mem_free(pWdaParams) ;
17031
17032 return;
17033}
17034
17035/*==========================================================================
17036 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17037
17038 DESCRIPTION
17039 API to send EXTScan Set BSSID Hotlist Response to HDD
17040
17041 PARAMETERS
17042 pEventData: Response from FW
17043 pUserData:
17044===========================================================================*/
17045void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17046{
17047 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17048 tWDA_CbContext *pWDA = NULL;
17049 void *pCallbackContext;
17050 tpAniSirGlobal pMac;
17051
17052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17053 "%s: ", __func__);
17054 if (NULL == pWdaParams)
17055 {
17056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17057 "%s: pWdaParams received NULL", __func__);
17058 VOS_ASSERT(0) ;
17059 return;
17060 }
17061
17062 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17063
17064 if (NULL == pWDA)
17065 {
17066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17067 "%s: pWDA received NULL", __func__);
17068 VOS_ASSERT(0);
17069 goto error;
17070 }
17071
17072 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17073 if (NULL == pMac)
17074 {
17075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17076 "%s:pMac is NULL", __func__);
17077 VOS_ASSERT(0);
17078 goto error;
17079 }
17080
17081 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17082
17083 if (pMac->sme.pEXTScanIndCb)
17084 {
17085 pMac->sme.pEXTScanIndCb(pCallbackContext,
17086 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17087 pEventData);
17088 }
17089 else
17090 {
17091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17092 "%s:HDD callback is null", __func__);
17093 VOS_ASSERT(0);
17094 }
17095
17096
17097error:
17098
17099 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17100 {
17101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17102 }
17103 if (pWdaParams->wdaMsgParam != NULL)
17104 {
17105 vos_mem_free(pWdaParams->wdaMsgParam);
17106 }
17107 vos_mem_free(pWdaParams) ;
17108
17109 return;
17110}
17111
17112/*==========================================================================
17113 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17114
17115 DESCRIPTION
17116 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17117
17118 PARAMETERS
17119 pEventData: Response from FW
17120 pUserData:
17121===========================================================================*/
17122void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17123{
17124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17125 tWDA_CbContext *pWDA = NULL;
17126 void *pCallbackContext;
17127 tpAniSirGlobal pMac;
17128
17129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17130 "%s:", __func__);
17131 if (NULL == pWdaParams)
17132 {
17133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17134 "%s: pWdaParams received NULL", __func__);
17135 VOS_ASSERT(0) ;
17136 return;
17137 }
17138
17139 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17140
17141 if (NULL == pWDA)
17142 {
17143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17144 "%s: pWDA received NULL", __func__);
17145 VOS_ASSERT(0);
17146 goto error;
17147 }
17148
17149 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17150 if (NULL == pMac)
17151 {
17152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17153 "%s:pMac is NULL", __func__);
17154 VOS_ASSERT(0);
17155 goto error;
17156 }
17157
17158 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17159
17160 if (pMac->sme.pEXTScanIndCb)
17161 {
17162 pMac->sme.pEXTScanIndCb(pCallbackContext,
17163 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17164 pEventData);
17165 }
17166 else
17167 {
17168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17169 "%s:HDD callback is null", __func__);
17170 VOS_ASSERT(0);
17171 }
17172
17173
17174error:
17175
17176 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17177 {
17178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17179 }
17180 if (pWdaParams->wdaMsgParam != NULL)
17181 {
17182 vos_mem_free(pWdaParams->wdaMsgParam);
17183 }
17184 vos_mem_free(pWdaParams) ;
17185
17186 return;
17187}
17188
17189/*==========================================================================
17190 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17191
17192 DESCRIPTION
17193 API to send EXTScan Set Significant RSSI Change RSP to HDD
17194
17195 PARAMETERS
17196 pEventData: Response from FW
17197 pUserData:
17198===========================================================================*/
17199void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17200{
17201 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17202 tWDA_CbContext *pWDA = NULL;
17203 void *pCallbackContext;
17204 tpAniSirGlobal pMac;
17205
17206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17207 "%s:", __func__);
17208 if (NULL == pWdaParams)
17209 {
17210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17211 "%s: pWdaParams received NULL", __func__);
17212 VOS_ASSERT(0) ;
17213 return;
17214 }
17215
17216 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17217
17218 if (NULL == pWDA)
17219 {
17220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17221 "%s: pWDA received NULL", __func__);
17222 VOS_ASSERT(0);
17223 goto error;
17224 }
17225
17226 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17227 if (NULL == pMac)
17228 {
17229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17230 "%s:pMac is NULL", __func__);
17231 VOS_ASSERT(0);
17232 goto error;
17233 }
17234
17235 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17236
17237 if (pMac->sme.pEXTScanIndCb)
17238 {
17239 pMac->sme.pEXTScanIndCb(pCallbackContext,
17240 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17241 pEventData);
17242 }
17243 else
17244 {
17245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17246 "%s:HDD callback is null", __func__);
17247 VOS_ASSERT(0);
17248 }
17249
17250
17251error:
17252
17253 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17254 {
17255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17256 }
17257 if (pWdaParams->wdaMsgParam != NULL)
17258 {
17259 vos_mem_free(pWdaParams->wdaMsgParam);
17260 }
17261 vos_mem_free(pWdaParams) ;
17262
17263 return;
17264}
17265
17266/*==========================================================================
17267 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17268
17269 DESCRIPTION
17270 API to send EXTScan Set Significant RSSI Change RSP to HDD
17271
17272 PARAMETERS
17273 pEventData: Response from FW
17274 pUserData:
17275===========================================================================*/
17276void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17277 void* pUserData)
17278{
17279 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17280 tWDA_CbContext *pWDA = NULL;
17281 void *pCallbackContext;
17282 tpAniSirGlobal pMac;
17283
17284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17285 "%s:", __func__);
17286 if (NULL == pWdaParams)
17287 {
17288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17289 "%s: pWdaParams received NULL", __func__);
17290 VOS_ASSERT(0) ;
17291 return;
17292 }
17293
17294 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17295
17296 if (NULL == pWDA)
17297 {
17298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17299 "%s: pWDA received NULL", __func__);
17300 VOS_ASSERT(0);
17301 goto error;
17302 }
17303
17304 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17305 if (NULL == pMac)
17306 {
17307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17308 "%s:pMac is NULL", __func__);
17309 VOS_ASSERT(0);
17310 goto error;
17311 }
17312
17313 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17314
17315 if (pMac->sme.pEXTScanIndCb)
17316 {
17317 pMac->sme.pEXTScanIndCb(pCallbackContext,
17318 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17319 pEventData);
17320 }
17321 else
17322 {
17323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17324 "%s:HDD callback is null", __func__);
17325 VOS_ASSERT(0);
17326 }
17327
17328
17329error:
17330
17331 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17332 {
17333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17334 }
17335 if (pWdaParams->wdaMsgParam != NULL)
17336 {
17337 vos_mem_free(pWdaParams->wdaMsgParam);
17338 }
17339 vos_mem_free(pWdaParams) ;
17340
17341 return;
17342}
17343
17344/*==========================================================================
17345 FUNCTION WDA_ProcessEXTScanStartReq
17346
17347 DESCRIPTION
17348 API to send EXTScan Start Request to WDI
17349
17350 PARAMETERS
17351 pWDA: Pointer to WDA context
17352 wdaRequest: Pointer to EXTScan req parameters
17353===========================================================================*/
17354VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17355 tSirEXTScanStartReqParams *wdaRequest)
17356{
17357 WDI_Status status = WDI_STATUS_SUCCESS;
17358 tWDA_ReqParams *pWdaParams;
17359
17360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17361 "%s: ", __func__);
17362 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17363 if (NULL == pWdaParams)
17364 {
17365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17366 "%s: VOS MEM Alloc Failure", __func__);
17367 VOS_ASSERT(0);
17368 return VOS_STATUS_E_NOMEM;
17369 }
17370 pWdaParams->pWdaContext = pWDA;
17371 pWdaParams->wdaMsgParam = wdaRequest;
17372 pWdaParams->wdaWdiApiMsgParam = NULL;
17373
17374 status = WDI_EXTScanStartReq((void *)wdaRequest,
17375 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17376 (void *)pWdaParams);
17377 if (IS_WDI_STATUS_FAILURE(status))
17378 {
17379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17380 "Failure to request. Free all the memory " );
17381 vos_mem_free(pWdaParams->wdaMsgParam);
17382 vos_mem_free(pWdaParams);
17383 }
17384 return CONVERT_WDI2VOS_STATUS(status);
17385}
17386
17387/*==========================================================================
17388 FUNCTION WDA_ProcessEXTScanStopReq
17389
17390 DESCRIPTION
17391 API to send EXTScan Start Request to WDI
17392
17393 PARAMETERS
17394 pWDA: Pointer to WDA context
17395 wdaRequest: Pointer to EXTScan req parameters
17396===========================================================================*/
17397VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17398 tSirEXTScanStopReqParams *wdaRequest)
17399{
17400 WDI_Status status = WDI_STATUS_SUCCESS;
17401 tWDA_ReqParams *pWdaParams;
17402
17403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17404 "%s:", __func__);
17405 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17406 if (NULL == pWdaParams)
17407 {
17408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17409 "%s: VOS MEM Alloc Failure", __func__);
17410 VOS_ASSERT(0);
17411 return VOS_STATUS_E_NOMEM;
17412 }
17413 pWdaParams->pWdaContext = pWDA;
17414 pWdaParams->wdaMsgParam = wdaRequest;
17415 pWdaParams->wdaWdiApiMsgParam = NULL;
17416
17417 status = WDI_EXTScanStopReq((void *)wdaRequest,
17418 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17419 (void *)pWdaParams);
17420 if (IS_WDI_STATUS_FAILURE(status))
17421 {
17422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17423 "Failure to request. Free all the memory " );
17424 vos_mem_free(pWdaParams->wdaMsgParam);
17425 vos_mem_free(pWdaParams);
17426 }
17427 return CONVERT_WDI2VOS_STATUS(status);
17428}
17429
17430/*==========================================================================
17431 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17432
17433 DESCRIPTION
17434 API to send EXTScan Get Cached Results Request to WDI
17435
17436 PARAMETERS
17437 pWDA: Pointer to WDA context
17438 wdaRequest: Pointer to EXTScan req parameters
17439===========================================================================*/
17440VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17441 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17442{
17443 WDI_Status status = WDI_STATUS_SUCCESS;
17444 tWDA_ReqParams *pWdaParams;
17445
17446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17447 "%s: ", __func__);
17448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17449 if (NULL == pWdaParams)
17450 {
17451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17452 "%s: VOS MEM Alloc Failure", __func__);
17453 VOS_ASSERT(0);
17454 return VOS_STATUS_E_NOMEM;
17455 }
17456 pWdaParams->pWdaContext = pWDA;
17457 pWdaParams->wdaMsgParam = wdaRequest;
17458 pWdaParams->wdaWdiApiMsgParam = NULL;
17459
17460 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17461 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17462 (void *)pWdaParams);
17463 if (IS_WDI_STATUS_FAILURE(status))
17464 {
17465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17466 "Failure to request. Free all the memory " );
17467 vos_mem_free(pWdaParams->wdaMsgParam);
17468 vos_mem_free(pWdaParams);
17469 }
17470 return CONVERT_WDI2VOS_STATUS(status);
17471}
17472
17473/*==========================================================================
17474 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17475
17476 DESCRIPTION
17477 API to send EXTScan Get Capabilities Request to WDI
17478
17479 PARAMETERS
17480 pWDA: Pointer to WDA context
17481 wdaRequest: Pointer to EXTScan req parameters
17482===========================================================================*/
17483VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17484 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17485{
17486 WDI_Status status = WDI_STATUS_SUCCESS;
17487 tWDA_ReqParams *pWdaParams;
17488
17489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17490 "%s:", __func__);
17491 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17492 if (NULL == pWdaParams)
17493 {
17494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17495 "%s: VOS MEM Alloc Failure", __func__);
17496 VOS_ASSERT(0);
17497 return VOS_STATUS_E_NOMEM;
17498 }
17499 pWdaParams->pWdaContext = pWDA;
17500 pWdaParams->wdaMsgParam = wdaRequest;
17501 pWdaParams->wdaWdiApiMsgParam = NULL;
17502
17503 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17504 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17505 (void *)pWdaParams);
17506 if (IS_WDI_STATUS_FAILURE(status))
17507 {
17508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17509 "Failure to request. Free all the memory " );
17510 vos_mem_free(pWdaParams->wdaMsgParam);
17511 vos_mem_free(pWdaParams);
17512 }
17513 return CONVERT_WDI2VOS_STATUS(status);
17514}
17515
17516/*==========================================================================
17517 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17518
17519 DESCRIPTION
17520 API to send Set BSSID Hotlist Request to WDI
17521
17522 PARAMETERS
17523 pWDA: Pointer to WDA context
17524 wdaRequest: Pointer to EXTScan req parameters
17525===========================================================================*/
17526VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17527 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17528{
17529 WDI_Status status = WDI_STATUS_SUCCESS;
17530 tWDA_ReqParams *pWdaParams;
17531
17532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17533 "%s: ", __func__);
17534 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17535 if (NULL == pWdaParams)
17536 {
17537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17538 "%s: VOS MEM Alloc Failure", __func__);
17539 VOS_ASSERT(0);
17540 return VOS_STATUS_E_NOMEM;
17541 }
17542 pWdaParams->pWdaContext = pWDA;
17543 pWdaParams->wdaMsgParam = wdaRequest;
17544 pWdaParams->wdaWdiApiMsgParam = NULL;
17545
17546 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17547 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17548 (void *)pWdaParams);
17549 if (IS_WDI_STATUS_FAILURE(status))
17550 {
17551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17552 "Failure to request. Free all the memory " );
17553 vos_mem_free(pWdaParams->wdaMsgParam);
17554 vos_mem_free(pWdaParams);
17555 }
17556 return CONVERT_WDI2VOS_STATUS(status);
17557}
17558
17559/*==========================================================================
17560 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17561
17562 DESCRIPTION
17563 API to send Reset BSSID Hotlist Request to WDI
17564
17565 PARAMETERS
17566 pWDA: Pointer to WDA context
17567 wdaRequest: Pointer to EXTScan req parameters
17568===========================================================================*/
17569VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17570 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17571{
17572 WDI_Status status = WDI_STATUS_SUCCESS;
17573 tWDA_ReqParams *pWdaParams;
17574
17575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17576 "%s:", __func__);
17577 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17578 if (NULL == pWdaParams)
17579 {
17580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17581 "%s: VOS MEM Alloc Failure", __func__);
17582 VOS_ASSERT(0);
17583 return VOS_STATUS_E_NOMEM;
17584 }
17585 pWdaParams->pWdaContext = pWDA;
17586 pWdaParams->wdaMsgParam = wdaRequest;
17587 pWdaParams->wdaWdiApiMsgParam = NULL;
17588
17589 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17590 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17591 (void *)pWdaParams);
17592 if (IS_WDI_STATUS_FAILURE(status))
17593 {
17594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17595 "Failure to request. Free all the memory " );
17596 vos_mem_free(pWdaParams->wdaMsgParam);
17597 vos_mem_free(pWdaParams);
17598 }
17599 return CONVERT_WDI2VOS_STATUS(status);
17600}
17601
17602/*==========================================================================
17603 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17604
17605 DESCRIPTION
17606 API to send Set Significant RSSI Change Request to WDI
17607
17608 PARAMETERS
17609 pWDA: Pointer to WDA context
17610 wdaRequest: Pointer to EXTScan req parameters
17611===========================================================================*/
17612VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17613 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17614{
17615 WDI_Status status = WDI_STATUS_SUCCESS;
17616 tWDA_ReqParams *pWdaParams;
17617
17618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17619 "%s: ", __func__);
17620 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17621 if (NULL == pWdaParams)
17622 {
17623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17624 "%s: VOS MEM Alloc Failure", __func__);
17625 VOS_ASSERT(0);
17626 return VOS_STATUS_E_NOMEM;
17627 }
17628 pWdaParams->pWdaContext = pWDA;
17629 pWdaParams->wdaMsgParam = wdaRequest;
17630 pWdaParams->wdaWdiApiMsgParam = NULL;
17631
17632 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17633 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17634 (void *)pWdaParams);
17635 if (IS_WDI_STATUS_FAILURE(status))
17636 {
17637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17638 "Failure to request. Free all the memory " );
17639 vos_mem_free(pWdaParams->wdaMsgParam);
17640 vos_mem_free(pWdaParams);
17641 }
17642 return CONVERT_WDI2VOS_STATUS(status);
17643}
17644
17645/*==========================================================================
17646 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17647
17648 DESCRIPTION
17649 API to send Reset Significant RSSI Change Request to WDI
17650
17651 PARAMETERS
17652 pWDA: Pointer to WDA context
17653 wdaRequest: Pointer to EXTScan req parameters
17654===========================================================================*/
17655VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17656 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17657{
17658 WDI_Status status = WDI_STATUS_SUCCESS;
17659 tWDA_ReqParams *pWdaParams;
17660
17661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17662 "%s:", __func__);
17663 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17664 if (NULL == pWdaParams)
17665 {
17666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17667 "%s: VOS MEM Alloc Failure", __func__);
17668 VOS_ASSERT(0);
17669 return VOS_STATUS_E_NOMEM;
17670 }
17671 pWdaParams->pWdaContext = pWDA;
17672 pWdaParams->wdaMsgParam = wdaRequest;
17673 pWdaParams->wdaWdiApiMsgParam = NULL;
17674
17675 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
17676 (WDI_EXTScanResetSignfRSSIChangeRspCb)
17677 WDA_EXTScanResetSignfRSSIChangeRspCallback,
17678 (void *)pWdaParams);
17679 if (IS_WDI_STATUS_FAILURE(status))
17680 {
17681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17682 "Failure to request. Free all the memory " );
17683 vos_mem_free(pWdaParams->wdaMsgParam);
17684 vos_mem_free(pWdaParams);
17685 }
17686 return CONVERT_WDI2VOS_STATUS(status);
17687}
17688#endif /* WLAN_FEATURE_EXTSCAN */
17689
Sunil Duttbd736ed2014-05-26 21:19:41 +053017690#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17691
17692/*==========================================================================
17693 FUNCTION WDA_LLStatsSetRspCallback
17694
17695 DESCRIPTION
17696 API to process set link layer statistics response from FW
17697
17698 PARAMETERS
17699 pRsp: Pointer to set link layer statistics response
17700 pUserData: Pointer to user data
17701
17702 RETURN VALUE
17703 NONE
17704
17705===========================================================================*/
17706void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
17707{
17708 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17709
17710
17711 if (NULL == pWdaParams)
17712 {
17713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17714 "%s: pWdaParams received NULL", __func__);
17715 VOS_ASSERT(0) ;
17716 return ;
17717 }
17718
17719 /* Do not need to send notification to upper layer
17720 * Just free allocated resources */
17721 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17722 {
17723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17724 }
17725 if (pWdaParams->wdaMsgParam != NULL)
17726 {
17727 vos_mem_free(pWdaParams->wdaMsgParam);
17728 }
17729 vos_mem_free(pWdaParams) ;
17730
17731 return;
17732}
17733
17734/*==========================================================================
17735 FUNCTION WDA_ProcessLLStatsSetReq
17736
17737 DESCRIPTION
17738 API to send Set Link Layer Stats request to WDI
17739
17740 PARAMETERS
17741 pWDA: Pointer to WDA context
17742 wdaRequest: Pointer to set Link Layer Stats req parameters
17743===========================================================================*/
17744VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
17745 tSirLLStatsSetReq *wdaRequest)
17746{
17747 WDI_Status status = WDI_STATUS_SUCCESS;
17748 tWDA_ReqParams *pWdaParams;
17749
17750 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17751 if (NULL == pWdaParams)
17752 {
17753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17754 "%s: VOS MEM Alloc Failure", __func__);
17755 VOS_ASSERT(0);
17756 return VOS_STATUS_E_NOMEM;
17757 }
17758 pWdaParams->pWdaContext = pWDA;
17759 pWdaParams->wdaMsgParam = wdaRequest;
17760 pWdaParams->wdaWdiApiMsgParam = NULL;
17761
17762 status = WDI_LLStatsSetReq((void *)wdaRequest,
17763 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
17764 (void *)pWdaParams);
17765 if (IS_WDI_STATUS_FAILURE(status))
17766 {
17767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17768 "Failure to request. Free all the memory " );
17769 vos_mem_free(pWdaParams->wdaMsgParam);
17770 vos_mem_free(pWdaParams);
17771 }
17772 return CONVERT_WDI2VOS_STATUS(status);
17773}
17774
17775/*==========================================================================
17776 FUNCTION WDA_LLStatsGetRspCallback
17777
17778 DESCRIPTION
17779 API to process get link layer statistics response from FW
17780
17781 PARAMETERS
17782 pRsp: Pointer to get link layer statistics response
17783 pUserData: Pointer to user data
17784
17785 RETURN VALUE
17786 NONE
17787
17788===========================================================================*/
17789void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
17790{
17791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17792
17793 if (NULL == pWdaParams)
17794 {
17795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17796 "%s: pWdaParams received NULL", __func__);
17797 VOS_ASSERT(0) ;
17798 return ;
17799 }
17800
17801 /* Do not need to send notification to upper layer
17802 * Just free allocated resources */
17803 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17804 {
17805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17806 }
17807 if (pWdaParams->wdaMsgParam != NULL)
17808 {
17809 vos_mem_free(pWdaParams->wdaMsgParam);
17810 }
17811 vos_mem_free(pWdaParams) ;
17812
17813 return;
17814}
17815
17816/*==========================================================================
17817 FUNCTION WDA_ProcessLLStatsGetReq
17818
17819 DESCRIPTION
17820 API to send Get Link Layer Stats request to WDI
17821
17822 PARAMETERS
17823 pWDA: Pointer to WDA context
17824 wdaRequest: Pointer to get Link Layer Stats req parameters
17825===========================================================================*/
17826VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
17827 tSirLLStatsGetReq *wdaRequest)
17828{
17829 WDI_Status status = WDI_STATUS_SUCCESS;
17830 tWDA_ReqParams *pWdaParams;
17831
17832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17833 if (NULL == pWdaParams)
17834 {
17835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17836 "%s: VOS MEM Alloc Failure", __func__);
17837 VOS_ASSERT(0);
17838 return VOS_STATUS_E_NOMEM;
17839 }
17840 pWdaParams->pWdaContext = pWDA;
17841 pWdaParams->wdaMsgParam = wdaRequest;
17842 pWdaParams->wdaWdiApiMsgParam = NULL;
17843
17844 status = WDI_LLStatsGetReq((void *) wdaRequest,
17845 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
17846 (void *)pWdaParams);
17847 if (IS_WDI_STATUS_FAILURE(status))
17848 {
17849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17850 "Failure to request. Free all the memory " );
17851 vos_mem_free(pWdaParams->wdaMsgParam);
17852 vos_mem_free(pWdaParams);
17853 }
17854 return CONVERT_WDI2VOS_STATUS(status);
17855}
17856
17857/*==========================================================================
17858 FUNCTION WDA_LLStatsClearRspCallback
17859
17860 DESCRIPTION
17861 API to process clear link layer statistics response from FW
17862
17863 PARAMETERS
17864 pRsp: Pointer to clear link layer statistics response
17865 pUserData: Pointer to user data
17866
17867 RETURN VALUE
17868 NONE
17869
17870===========================================================================*/
17871void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
17872{
17873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17874
17875
17876 if (NULL == pWdaParams)
17877 {
17878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17879 "%s: pWdaParams received NULL", __func__);
17880 VOS_ASSERT(0) ;
17881 return ;
17882 }
17883 /* Do not need to send notification to upper layer
17884 * Just free allocated resources */
17885 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17886 {
17887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17888 }
17889 if (pWdaParams->wdaMsgParam != NULL)
17890 {
17891 vos_mem_free(pWdaParams->wdaMsgParam);
17892 }
17893 vos_mem_free(pWdaParams) ;
17894 return;
17895}
17896
17897/*==========================================================================
17898 FUNCTION WDA_ProcessLLStatsClearReq
17899
17900 DESCRIPTION
17901 API to send Clear Link Layer Stats request to WDI
17902
17903 PARAMETERS
17904 pWDA: Pointer to WDA context
17905 wdaRequest: Pointer to earLink Layer Stats req
17906===========================================================================*/
17907VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
17908 tSirLLStatsClearReq *wdaRequest)
17909{
17910 WDI_Status status = WDI_STATUS_SUCCESS;
17911 tWDA_ReqParams *pWdaParams;
17912
17913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17914 if (NULL == pWdaParams)
17915 {
17916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17917 "%s: VOS MEM Alloc Failure", __func__);
17918 VOS_ASSERT(0);
17919 return VOS_STATUS_E_NOMEM;
17920 }
17921 pWdaParams->pWdaContext = pWDA;
17922 pWdaParams->wdaMsgParam = wdaRequest;
17923 pWdaParams->wdaWdiApiMsgParam = NULL;
17924
17925 status = WDI_LLStatsClearReq((void *) wdaRequest,
17926 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
17927 (void *)pWdaParams);
17928 if (IS_WDI_STATUS_FAILURE(status))
17929 {
17930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17931 "Failure to request. Free all the memory " );
17932 vos_mem_free(pWdaParams->wdaMsgParam);
17933 vos_mem_free(pWdaParams);
17934 }
17935 return CONVERT_WDI2VOS_STATUS(status);
17936}
17937
17938#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053017939
17940
17941void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
17942{
17943 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
17944
17945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17946 "<------ %s " ,__func__);
17947 if (NULL == fwStatsinfo)
17948 {
17949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17950 "%s: pWdaParams received NULL", __func__);
17951 VOS_ASSERT(0);
17952 return;
17953 }
17954
17955 if(fwStatsinfo->callback)
17956 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
17957
17958 vos_mem_free(pUserData);
17959 return;
17960}
17961
17962
17963v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
17964 tSirFWStatsGetReq *pData)
17965{
17966
17967 WDI_Status wdiStatus;
17968 tSirFWStatsInfo *fwStatsinfo;
17969
17970 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17971 "------> %s" , __func__);
17972
17973 fwStatsinfo =
17974 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
17975 if (NULL == fwStatsinfo)
17976 {
17977 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17978 "%s: VOS MEM Alloc Failure", __func__);
17979 VOS_ASSERT(0);
17980 vos_mem_free(pData);
17981 return;
17982 }
17983
17984 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
17985 fwStatsinfo->data = pData->data;
17986
17987 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
17988 WDA_FWStatsGetRspCallback,
17989 pData->stats);
17990 if (WDI_STATUS_PENDING == wdiStatus)
17991 {
17992 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17993 "Pending received for %s:%d ", __func__, __LINE__);
17994 }
17995 else if (WDI_STATUS_SUCCESS != wdiStatus)
17996 {
17997 if (fwStatsinfo->callback)
17998 {
17999 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18000 }
18001 vos_mem_free(fwStatsinfo);
18002 }
18003 vos_mem_free(pData);
18004}
18005