blob: 6bbd4b7a03c0a9171f11ccbbbb09e3333f863545 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040 Copyright (c) 2010-2011 QUALCOMM Incorporated.
41 All Rights Reserved.
42 Qualcomm Confidential and Proprietary
43===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070044/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070045 EDIT HISTORY FOR FILE
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 This section contains comments describing changes made to the module.
48 Notice that changes are listed in reverse chronological order.
49
Jeff Johnson295189b2012-06-20 16:38:30 -070050 $Header$$DateTime$$Author$
51
Jeff Johnson295189b2012-06-20 16:38:30 -070052 when who what, where, why
53---------- --- -------------------------------------------------
5410/05/2011 haparna Adding support for Keep Alive Feature
552010-12-30 smiryala UMAC convergence changes
562010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
57===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070058#include "vos_mq.h"
59#include "vos_api.h"
60#include "vos_packet.h"
61#include "vos_nvitem.h"
62#include "sirApi.h"
63#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053064#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070065#include "wlan_qct_wda.h"
66#include "wlan_qct_wda_msg.h"
67#include "wlan_qct_wdi_cfg.h"
68#include "wlan_qct_wdi.h"
69#include "wlan_qct_wdi_ds.h"
70#include "wlan_hal_cfg.h"
71/**********************/
72#include "wniApi.h"
73#include "cfgApi.h"
74#include "limApi.h"
75#include "wlan_qct_tl.h"
76#include "wlan_qct_tli_ba.h"
77#include "limUtils.h"
78#include "btcApi.h"
79#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070080#include "pttMsgApi.h"
81#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070082/* Used MACRO's */
83/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080084#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
86#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070088#define CONVERT_WDI2SIR_STATUS(x) \
89 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
90
91#define IS_WDI_STATUS_FAILURE(status) \
92 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070093#define CONVERT_WDI2VOS_STATUS(x) \
94 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
95
96/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070097#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define WDA_GET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
101
102#define WDA_SET_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
104
105#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
106 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700107#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
108 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109/* timer related Macros */
110#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
111 tx_timer_create(a, b, c, d, e, f, g)
112#define WDA_START_TIMER(a) tx_timer_activate(a)
113#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
114#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700115#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116
117#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
118 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700122#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800123#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700124
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700125#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700127#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700128#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
129 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
130 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
131
132#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
133#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800134#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
135
Jeff Johnson295189b2012-06-20 16:38:30 -0700136/* extern declarations */
137extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700138extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
139
Jeff Johnson295189b2012-06-20 16:38:30 -0700140/* forward declarations */
141void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
142 void *pBodyptr, tANI_U32 bodyVal) ;
143VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
144 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700145VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
146VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
147
148extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
149 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530150void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
c_hpothu92367912014-05-01 15:18:17 +0530211v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
212 tSirBcnMissRateReq *pData);
213
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Leo Chang9056f462013-08-01 19:21:11 -0700220
221#ifdef FEATURE_WLAN_LPHB
222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
223 tSirLPHBReq *pData);
224#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530225
Dino Mycle41bdc942014-06-10 11:30:24 +0530226#ifdef WLAN_FEATURE_EXTSCAN
227VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
228 tSirEXTScanStartReqParams *wdaRequest);
229VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
230 tSirEXTScanStopReqParams *wdaRequest);
231VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
232 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
233VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
234 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
235VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
236 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
237VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
238 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
239VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
240 tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
241VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
242 tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
243#endif /* WLAN_FEATURE_EXTSCAN */
244
Sunil Duttbd736ed2014-05-26 21:19:41 +0530245#ifdef WLAN_FEATURE_LINK_LAYER_STATS
246VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
247 tSirLLStatsSetReq *wdaRequest);
248
249VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
250 tSirLLStatsGetReq *wdaRequest);
251
252VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
253 tSirLLStatsClearReq *wdaRequest);
254#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530255
256v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
257 tSirFWStatsGetReq *wdaRequest);
258
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530259VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
260 u8 *wdaRequest);
261
Jeff Johnson295189b2012-06-20 16:38:30 -0700262/*
263 * FUNCTION: WDA_open
264 * Allocate the WDA context
265 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530266VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 tMacOpenParameters *pMacParams )
268{
269 tWDA_CbContext *wdaContext;
270 VOS_STATUS status;
271 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 /* Allocate WDA context */
273 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
274 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 return VOS_STATUS_E_NOMEM;
278 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 /*__asm int 3;*/
280 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
281
282 /* Initialize data structures */
283 wdaContext->pVosContext = pVosContext;
284 wdaContext->wdaState = WDA_INIT_STATE;
285 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
286
287 /* Initialize WDA-WDI synchronization event */
288 status = vos_event_init(&wdaContext->wdaWdiEvent);
289 if(!VOS_IS_STATUS_SUCCESS(status))
290 {
291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800292 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800293 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700294 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700295 /* Init Frame transfer event */
296 status = vos_event_init(&wdaContext->txFrameEvent);
297 if(!VOS_IS_STATUS_SUCCESS(status))
298 {
299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800300 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800301 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700303 status = vos_event_init(&wdaContext->suspendDataTxEvent);
304 if(!VOS_IS_STATUS_SUCCESS(status))
305 {
306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800307 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800308 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700310 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
311 if(!VOS_IS_STATUS_SUCCESS(status))
312 {
313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800314 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800315 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530319 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 &wdiDevCapability, pMacParams->driverType))
321 {
322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
323 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800324 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 }
326 else
327 {
328 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
329 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
330 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 /* update max STA in WDA used for BA */
332 wdaContext->wdaMaxSta = pMacParams->maxStation;
333 /* store the frameTransRequired flag in wdaContext, to send this to HAL
334 * in WDA_Start
335 */
336 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
337 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800339
340error:
341 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
342 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700343}
344
Jeff Johnson295189b2012-06-20 16:38:30 -0700345/*
346 * FUNCTION: WDA_preStart
347 * Trigger DAL-AL to start CFG download
348 */
349VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
350{
351 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
352 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700353 /*
354 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
355 */
356 wdaMsg.type = WNI_CFG_DNLD_REQ ;
357 wdaMsg.bodyptr = NULL;
358 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* post the message.. */
360 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
361 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
362 {
363 vosStatus = VOS_STATUS_E_BADMSG;
364 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 return( vosStatus );
366}
Jeff Johnson295189b2012-06-20 16:38:30 -0700367/*
368 * FUNCTION: WDA_wdiStartCallback
369 * Once WDI_Start is finished, WDI start callback will be called by WDI
370 * to indicate completion of WDI_Start.
371 */
372void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
373 void *pVosContext)
374{
375 tWDA_CbContext *wdaContext;
376 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700377 if (NULL == pVosContext)
378 {
379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700380 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 return;
382 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
384 if (NULL == wdaContext)
385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700387 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 return;
389 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
391 {
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700393 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 }
395 else
396 {
397 wdaContext->wdaState = WDA_START_STATE;
398 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 /* extract and save version information from the Start Response */
400 wdaContext->wcnssWlanCompiledVersion.major =
401 wdiRspParams->wlanCompiledVersion.major;
402 wdaContext->wcnssWlanCompiledVersion.minor =
403 wdiRspParams->wlanCompiledVersion.minor;
404 wdaContext->wcnssWlanCompiledVersion.version =
405 wdiRspParams->wlanCompiledVersion.version;
406 wdaContext->wcnssWlanCompiledVersion.revision =
407 wdiRspParams->wlanCompiledVersion.revision;
408 wdaContext->wcnssWlanReportedVersion.major =
409 wdiRspParams->wlanReportedVersion.major;
410 wdaContext->wcnssWlanReportedVersion.minor =
411 wdiRspParams->wlanReportedVersion.minor;
412 wdaContext->wcnssWlanReportedVersion.version =
413 wdiRspParams->wlanReportedVersion.version;
414 wdaContext->wcnssWlanReportedVersion.revision =
415 wdiRspParams->wlanReportedVersion.revision;
416 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
417 wdiRspParams->wcnssSoftwareVersion,
418 sizeof(wdaContext->wcnssSoftwareVersionString));
419 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
420 wdiRspParams->wcnssHardwareVersion,
421 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 /* Notify WDA_start that WDI_Start has completed */
423 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700424 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 {
426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700427 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 return;
430}
431
Jeff Johnson295189b2012-06-20 16:38:30 -0700432/*
433 * FUNCTION: WDA_start
434 * Prepare TLV configuration and call WDI_Start.
435 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700436VOS_STATUS WDA_start(v_PVOID_t pVosContext)
437{
438 tWDA_CbContext *wdaContext;
439 VOS_STATUS status;
440 WDI_Status wdiStatus;
441 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 if (NULL == pVosContext)
443 {
444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700445 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 return VOS_STATUS_E_FAILURE;
447 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
449 if (NULL == wdaContext)
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700452 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 return VOS_STATUS_E_FAILURE;
454 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 /* Non-FTM mode, WDA status for START must be INIT
456 * FTM mode, WDA Status for START can be INIT or STOP */
457 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
458 (WDA_STOP_STATE != wdaContext->wdaState) )
459 {
460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
461 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700462 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 return VOS_STATUS_E_FAILURE;
464 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 /* initialize the wdiStartParam. Note that we can create this on
466 the stack since we won't exit until WDI_Start() completes or
467 times out */
468 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 /* prepare the config TLV for the WDI */
471 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
472 if ( !VOS_IS_STATUS_SUCCESS(status) )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 return VOS_STATUS_E_FAILURE;
477 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* note from here onwards if an error occurs we must
479 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
481 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
482 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* initialize the WDA-WDI synchronization event */
484 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* call WDI start */
486 wdiStatus = WDI_Start(&wdiStartParam,
487 (WDI_StartRspCb)WDA_wdiStartCallback,
488 (v_VOID_t *)pVosContext);
489 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
490 {
491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700492 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 vos_mem_free(wdiStartParam.pConfigBuffer);
494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* wait for WDI start to invoke our callback */
497 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
498 WDA_WDI_START_TIMEOUT );
499 if ( !VOS_IS_STATUS_SUCCESS(status) )
500 {
501 if ( VOS_STATUS_E_TIMEOUT == status )
502 {
503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700504 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 }
506 else
507 {
508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
509 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700510 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 }
512 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530513 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 /* we no longer need the config TLV */
517 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 /* if we are not in the START state then WDI_Start() failed */
519 if (WDA_START_STATE != wdaContext->wdaState)
520 {
521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700522 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 return VOS_STATUS_E_FAILURE;
524 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 /* FTM mode does not need to monitor BA activity */
526 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
527 {
528 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800529 if(VOS_STATUS_SUCCESS == status)
530 {
531 wdaContext->wdaTimersCreated = VOS_TRUE;
532 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 }
Leo Chang9d76f622013-08-23 16:34:52 -0700534 else
535 {
536 vos_event_init(&wdaContext->ftmStopDoneEvent);
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 return status;
539}
540
Jeff Johnson295189b2012-06-20 16:38:30 -0700541/*
542 * FUNCTION: WDA_prepareConfigTLV
543 * Function to prepare CFG for DAL(WDA)
544 */
545VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
546 WDI_StartReqParamsType *wdiStartParams )
547{
548 /* get pMac to acess CFG data base */
549 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
550 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
551 tHalCfg *tlvStruct = NULL ;
552 tANI_U8 *tlvStructStart = NULL ;
553 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
554 v_PVOID_t *configParam;
555 tANI_U32 configParamSize;
556 tANI_U32 *configDataValue;
557 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700558 tANI_U8 i;
559
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 if ((NULL == pMac)||(NULL == wdaContext))
561 {
562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700563 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 VOS_ASSERT(0);
565 return VOS_STATUS_E_FAILURE;
566 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
568 WNI_CFG_STA_ID_LEN +
569 WNI_CFG_EDCA_WME_ACBK_LEN +
570 WNI_CFG_EDCA_WME_ACBE_LEN +
571 WNI_CFG_EDCA_WME_ACVI_LEN +
572 WNI_CFG_EDCA_WME_ACVO_LEN +
573 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 /* malloc memory for all configs in one shot */
575 configParam = vos_mem_malloc(configParamSize);
576
577 if(NULL == configParam )
578 {
579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700580 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 VOS_ASSERT(0) ;
582 return VOS_STATUS_E_NOMEM;
583 }
584 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 tlvStruct = (tHalCfg *)configParam;
587 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 /* TODO: Remove Later */
589 /* QWLAN_HAL_CFG_STA_ID */
590 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
591 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
592 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
593 eSIR_SUCCESS)
594 {
595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
596 "Failed to get value for WNI_CFG_STA_ID");
597 goto handle_failure;
598 }
599 tlvStruct->length = strLength ;
600 /* calculate the pad bytes to have the CFG in aligned format */
601 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
602 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
604 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
606 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
610 != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
619 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
623 eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
632 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length)) ;
644
645 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
646 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
647 tlvStruct->length = sizeof(tANI_U32);
648 configDataValue = (tANI_U32 *)(tlvStruct + 1);
649 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
650 configDataValue ) != eSIR_SUCCESS)
651 {
652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
653 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
654 goto handle_failure;
655 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
657 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 /* QWLAN_HAL_CFG_CAL_PERIOD */
659 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
660 tlvStruct->length = sizeof(tANI_U32);
661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
662 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
663 != eSIR_SUCCESS)
664 {
665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
666 "Failed to get value for WNI_CFG_CAL_PERIOD");
667 goto handle_failure;
668 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
670 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* QWLAN_HAL_CFG_CAL_CONTROL */
672 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
673 tlvStruct->length = sizeof(tANI_U32);
674 configDataValue = (tANI_U32 *)(tlvStruct + 1);
675 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
676 != eSIR_SUCCESS)
677 {
678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
679 "Failed to get value for WNI_CFG_CAL_CONTROL");
680 goto handle_failure;
681 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
683 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 /* QWLAN_HAL_CFG_PROXIMITY */
685 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
686 tlvStruct->length = sizeof(tANI_U32);
687 configDataValue = (tANI_U32 *)(tlvStruct + 1);
688 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
689 != eSIR_SUCCESS)
690 {
691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
692 "Failed to get value for WNI_CFG_PROXIMITY");
693 goto handle_failure;
694 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
696 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
698 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
699 tlvStruct->length = sizeof(tANI_U32);
700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
701 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
702 != eSIR_SUCCESS)
703 {
704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
705 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
706 goto handle_failure;
707 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700708 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
709 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
711 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
712 tlvStruct->length = sizeof(tANI_U32);
713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
714 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
715 eSIR_SUCCESS)
716 {
717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
718 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
719 goto handle_failure;
720 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700721 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
722 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
724 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
725 tlvStruct->length = sizeof(tANI_U32);
726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
727 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
728 configDataValue ) != eSIR_SUCCESS)
729 {
730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
731 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
732 goto handle_failure;
733 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
735 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
737 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
738 tlvStruct->length = sizeof(tANI_U32);
739 configDataValue = (tANI_U32 *)(tlvStruct + 1);
740 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
741 eSIR_SUCCESS)
742 {
743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
744 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
745 goto handle_failure;
746 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
748 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
750 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
751 tlvStruct->length = sizeof(tANI_U32);
752 configDataValue = (tANI_U32 *)(tlvStruct + 1);
753 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
754 eSIR_SUCCESS)
755 {
756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
757 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
758 goto handle_failure;
759 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700760 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
761 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
763 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
767 eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
776 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700788 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
789 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
793 configDataValue ) != eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
797 goto handle_failure;
798 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
800 + sizeof(tHalCfg) + tlvStruct->length));
801
802 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
803 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
804 tlvStruct->length = sizeof(tANI_U32);
805 configDataValue = (tANI_U32 *)(tlvStruct + 1);
806 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
807 configDataValue ) != eSIR_SUCCESS)
808 {
809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
810 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
811 goto handle_failure;
812 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700813 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
814 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700815 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
816 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
817 tlvStruct->length = sizeof(tANI_U32);
818 configDataValue = (tANI_U32 *)(tlvStruct + 1);
819 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
820 configDataValue ) != eSIR_SUCCESS)
821 {
822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
823 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
824 goto handle_failure;
825 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
827 + sizeof(tHalCfg) + tlvStruct->length));
828
829 /* QWLAN_HAL_CFG_FIXED_RATE */
830 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
831 tlvStruct->length = sizeof(tANI_U32);
832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
833 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
834 != eSIR_SUCCESS)
835 {
836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
837 "Failed to get value for WNI_CFG_FIXED_RATE");
838 goto handle_failure;
839 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
841 + sizeof(tHalCfg) + tlvStruct->length));
842
843 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
844 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
848 != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length));
856
857 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
858 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
862 configDataValue ) != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
871 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
875 configDataValue ) != eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
879 goto handle_failure;
880 }
881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
884 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
897 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
910 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
922
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
924 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
928 configDataValue ) != eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
937 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
950 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
954 eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
962
963 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
964 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
965 tlvStruct->length = sizeof(tANI_U32);
966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
967 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
968 configDataValue ) != eSIR_SUCCESS)
969 {
970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
971 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
972 goto handle_failure;
973 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700974 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
975 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
977 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
981 configDataValue ) != eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
990 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
994 configDataValue ) != eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1003 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1007 configDataValue ) != eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length);
1015
1016 /* QWLAN_HAL_CFG_STATS_PERIOD */
1017 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1018 tlvStruct->length = sizeof(tANI_U32);
1019 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1020 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1021 eSIR_SUCCESS)
1022 {
1023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1024 "Failed to get value for WNI_CFG_STATS_PERIOD");
1025 goto handle_failure;
1026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001027 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1028 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001029 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1030 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1031 tlvStruct->length = sizeof(tANI_U32);
1032 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1033 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1034 eSIR_SUCCESS)
1035 {
1036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1037 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1038 goto handle_failure;
1039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1043 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1044 tlvStruct->length = sizeof(tANI_U32);
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1047 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001048 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1049 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001050 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1051 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1052 tlvStruct->length = sizeof(tANI_U32);
1053 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1054 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1055 != eSIR_SUCCESS)
1056 {
1057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1058 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1059 goto handle_failure;
1060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001061 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1062 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001063 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1064 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1065 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1066 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1067 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1068 &strLength) != eSIR_SUCCESS)
1069 {
1070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1071 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1072 goto handle_failure;
1073 }
1074 tlvStruct->length = strLength;
1075 /* calculate the pad bytes to have the CFG in aligned format */
1076 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1077 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001078 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1079 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1081 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1082 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1083 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1084 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1085 &strLength) != eSIR_SUCCESS)
1086 {
1087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1088 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1089 goto handle_failure;
1090 }
1091 tlvStruct->length = strLength;
1092 /* calculate the pad bytes to have the CFG in aligned format */
1093 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1094 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001095 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1096 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001097 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1098 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1099 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1100 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1101 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1102 &strLength) != eSIR_SUCCESS)
1103 {
1104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1105 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1106 goto handle_failure;
1107 }
1108 tlvStruct->length = strLength;
1109 /* calculate the pad bytes to have the CFG in aligned format */
1110 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1111 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1113 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1115 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1116 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1117 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1118 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1119 &strLength) != eSIR_SUCCESS)
1120 {
1121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1122 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1123 goto handle_failure;
1124 }
1125 tlvStruct->length = strLength;
1126 /* calculate the pad bytes to have the CFG in aligned format */
1127 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1128 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001129 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1130 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1132 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1133 tlvStruct->length = sizeof(tANI_U32);
1134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1135 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1136 != eSIR_SUCCESS)
1137 {
1138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1139 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1140 goto handle_failure;
1141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001142 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1143 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1145 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1146 tlvStruct->length = sizeof(tANI_U32);
1147 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1148 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1149 != eSIR_SUCCESS)
1150 {
1151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1152 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1153 goto handle_failure;
1154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1156 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001157 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1158 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1159 tlvStruct->length = sizeof(tANI_U32);
1160 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1161 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1162 != eSIR_SUCCESS)
1163 {
1164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1165 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1166 goto handle_failure;
1167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1169 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1171 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1172 tlvStruct->length = sizeof(tANI_U32);
1173 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1174 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1175 != eSIR_SUCCESS)
1176 {
1177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1178 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1179 goto handle_failure;
1180 }
1181 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1182 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001183 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1184 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1185 tlvStruct->length = sizeof(tANI_U32);
1186 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1187 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1188 != eSIR_SUCCESS)
1189 {
1190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1191 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1192 goto handle_failure;
1193 }
1194 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1195 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001196 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1197 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1198 tlvStruct->length = sizeof(tANI_U32);
1199 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1200 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1201 != eSIR_SUCCESS)
1202 {
1203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1204 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1205 goto handle_failure;
1206 }
1207 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1208 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001209 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1210 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1211 tlvStruct->length = sizeof(tANI_U32);
1212 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1213 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1214 != eSIR_SUCCESS)
1215 {
1216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1217 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1218 goto handle_failure;
1219 }
1220 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1221 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001222 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1223 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1224 tlvStruct->length = sizeof(tANI_U32);
1225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1226 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1227 != eSIR_SUCCESS)
1228 {
1229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1230 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1231 goto handle_failure;
1232 }
1233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1234 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1236 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1237 tlvStruct->length = sizeof(tANI_U32);
1238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1239 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1240 != eSIR_SUCCESS)
1241 {
1242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1243 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1244 goto handle_failure;
1245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1247 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1249 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1253 != eSIR_SUCCESS)
1254 {
1255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1256 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1257 goto handle_failure;
1258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1262 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1266 != eSIR_SUCCESS)
1267 {
1268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1269 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1270 goto handle_failure;
1271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1275 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1276 * into FW, so the parameters are added here.
1277 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001285 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001292 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1293 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1294 tlvStruct->length = sizeof(tANI_U32);
1295 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1296 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1297 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1298 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001299 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1300 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1301 tlvStruct->length = sizeof(tANI_U32);
1302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1303 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
1306
1307 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1308 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1309 tlvStruct->length = sizeof(tANI_U32);
1310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1311 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
1314
1315 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1316 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
1322
1323 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1324 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1325 tlvStruct->length = sizeof(tANI_U32);
1326 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1327 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
1330
1331 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1332 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1333 tlvStruct->length = sizeof(tANI_U32);
1334 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1335 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1337 + sizeof(tHalCfg) + tlvStruct->length) ;
1338
1339 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1340 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1344 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1345 + sizeof(tHalCfg) + tlvStruct->length) ;
1346
1347 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1348 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1349 tlvStruct->length = sizeof(tANI_U32);
1350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1351 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
1354
1355 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1356 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1357 tlvStruct->length = sizeof(tANI_U32);
1358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1359 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362
1363 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1364 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1365 tlvStruct->length = sizeof(tANI_U32);
1366 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1367 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1368 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1369 + sizeof(tHalCfg) + tlvStruct->length) ;
1370
1371 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1372 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1373 tlvStruct->length = sizeof(tANI_U32);
1374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1375 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1376 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1377 + sizeof(tHalCfg) + tlvStruct->length) ;
1378
1379 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1380 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1381 tlvStruct->length = sizeof(tANI_U32);
1382 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1383 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1384 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1385 + sizeof(tHalCfg) + tlvStruct->length) ;
1386
1387 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1388 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1389 tlvStruct->length = sizeof(tANI_U32);
1390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1391 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1392 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1393 + sizeof(tHalCfg) + tlvStruct->length) ;
1394
1395 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1396 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1400 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1401 + sizeof(tHalCfg) + tlvStruct->length) ;
1402
Wilson Tsaof8b37942013-09-06 10:49:00 -07001403 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1404 {
1405 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1406 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1407 tlvStruct->length = sizeof(tANI_U32);
1408 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1409 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1410 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1411 + sizeof(tHalCfg) + tlvStruct->length) ;
1412
1413 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1414 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1418 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1419 + sizeof(tHalCfg) + tlvStruct->length) ;
1420
1421 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1422 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428
1429 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1430 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1431 tlvStruct->length = sizeof(tANI_U32);
1432 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1433 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436 }
1437
1438 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1439 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1444 + sizeof(tHalCfg) + tlvStruct->length) ;
1445
1446 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1447 {
1448 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1449 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1450 tlvStruct->length = sizeof(tANI_U32);
1451 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1452 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1453 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1454 + sizeof(tHalCfg) + tlvStruct->length) ;
1455 }
1456
1457 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1458 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1459 tlvStruct->length = sizeof(tANI_U32);
1460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1461 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464
Jeff Johnson32d95a32012-09-10 13:15:23 -07001465 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001466 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1470 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1471 wcnssCompiledApiVersion.minor,
1472 wcnssCompiledApiVersion.version,
1473 wcnssCompiledApiVersion.revision);
1474 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1475 + sizeof(tHalCfg) + tlvStruct->length) ;
1476
Jeff Johnsond13512a2012-07-17 11:42:19 -07001477 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1478 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1479 tlvStruct->length = sizeof(tANI_U32);
1480 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1481 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1482 configDataValue ) != eSIR_SUCCESS)
1483 {
1484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1485 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1486 goto handle_failure;
1487 }
1488
1489 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1490 + sizeof(tHalCfg) + tlvStruct->length) ;
1491 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1492 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1496 configDataValue ) != eSIR_SUCCESS)
1497 {
1498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1499 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1500 goto handle_failure;
1501 }
1502
1503 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1504 + sizeof(tHalCfg) + tlvStruct->length) ;
1505
1506 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1507 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1508 tlvStruct->length = sizeof(tANI_U32);
1509 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1510 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1511 != eSIR_SUCCESS)
1512 {
1513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1514 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1515 goto handle_failure;
1516 }
1517
1518 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1519 + sizeof(tHalCfg) + tlvStruct->length) ;
1520
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001521 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1522 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1523 tlvStruct->length = sizeof(tANI_U32);
1524 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1525 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1526 != eSIR_SUCCESS)
1527 {
1528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1529 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1530 goto handle_failure;
1531 }
1532
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001535#ifdef WLAN_SOFTAP_VSTA_FEATURE
1536 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1537 tlvStruct->length = sizeof(tANI_U32);
1538 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1539 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1540 != eSIR_SUCCESS)
1541 {
1542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1543 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1544 goto handle_failure;
1545 }
1546
1547 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1548 + sizeof(tHalCfg) + tlvStruct->length) ;
1549#endif
1550
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001551 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1552 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1553 tlvStruct->length = sizeof(tANI_U32);
1554 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1555
1556 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1557 != eSIR_SUCCESS)
1558 {
1559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1560 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1561 goto handle_failure;
1562 }
1563
1564 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1565 + sizeof(tHalCfg) + tlvStruct->length) ;
1566
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301567/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1568 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1569 tlvStruct->length = sizeof(tANI_U32);
1570 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1571 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1572 configDataValue ) != eSIR_SUCCESS)
1573 {
1574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1575 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1576 goto handle_failure;
1577 }
1578
1579 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1580 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301581#ifdef FEATURE_WLAN_TDLS
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
1595
1596 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1597 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1598 tlvStruct->length = sizeof(tANI_U32);
1599 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1600 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1601 configDataValue ) != eSIR_SUCCESS)
1602 {
1603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1604 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1605 goto handle_failure;
1606 }
1607 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1608 + sizeof(tHalCfg) + tlvStruct->length) ;
1609 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1610 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1611 tlvStruct->length = sizeof(tANI_U32);
1612 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1613 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1614 configDataValue ) != eSIR_SUCCESS)
1615 {
1616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1617 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1618 goto handle_failure;
1619 }
1620 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1621 + sizeof(tHalCfg) + tlvStruct->length) ;
1622 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1623 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1624 tlvStruct->length = sizeof(tANI_U32);
1625 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1626 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1627 configDataValue ) != eSIR_SUCCESS)
1628 {
1629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1630 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1631 goto handle_failure;
1632 }
1633 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1634 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301635 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1636 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1637 tlvStruct->length = sizeof(tANI_U32);
1638 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1639 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1640 configDataValue ) != eSIR_SUCCESS)
1641 {
1642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1643 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1644 goto handle_failure;
1645 }
1646 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1647 + sizeof(tHalCfg) + tlvStruct->length) ;
1648
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301649#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301650
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001651 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1652 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1656 configDataValue ) != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001665
1666 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1667 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1668 tlvStruct->length = sizeof(tANI_U32);
1669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1670 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1671 != eSIR_SUCCESS)
1672 {
1673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1675 goto handle_failure;
1676 }
1677 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1678 + sizeof(tHalCfg) + tlvStruct->length));
1679
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301680 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1681 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1682 tlvStruct->length = sizeof(tANI_U32);
1683 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1684 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1685 configDataValue ) != eSIR_SUCCESS)
1686 {
1687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1688 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1689 goto handle_failure;
1690 }
1691
1692 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1693 + sizeof(tHalCfg) + tlvStruct->length) ;
1694
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301695 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1696 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1697 tlvStruct->length = sizeof(tANI_U32);
1698 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1699 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1700 configDataValue ) != eSIR_SUCCESS)
1701 {
1702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1703 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1704 goto handle_failure;
1705 }
1706 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1707 + sizeof(tHalCfg) + tlvStruct->length) ;
1708
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301709 /* QWLAN_HAL_CFG_ATH_DISABLE */
1710 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1711 tlvStruct->length = sizeof(tANI_U32);
1712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1713 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1714 configDataValue ) != eSIR_SUCCESS)
1715 {
1716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1717 "Failed to get value for WNI_CFG_ATH_DISABLE");
1718 goto handle_failure;
1719 }
1720 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1721 + sizeof(tHalCfg) + tlvStruct->length) ;
1722
c_hpothu6d7dc922013-12-02 12:36:41 +05301723 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1724 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1725 tlvStruct->length = sizeof(tANI_U32);
1726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1727 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1728 configDataValue ) != eSIR_SUCCESS)
1729 {
1730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1731 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1732 goto handle_failure;
1733 }
1734 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1735 + sizeof(tHalCfg) + tlvStruct->length) ;
1736
1737 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1738 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1739 tlvStruct->length = sizeof(tANI_U32);
1740 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1741 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1742 configDataValue ) != eSIR_SUCCESS)
1743 {
1744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1745 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1746 goto handle_failure;
1747 }
1748 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1749 + sizeof(tHalCfg) + tlvStruct->length) ;
1750
1751 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1752 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1753 tlvStruct->length = sizeof(tANI_U32);
1754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1755 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1756 configDataValue ) != eSIR_SUCCESS)
1757 {
1758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1759 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1760 goto handle_failure;
1761 }
1762 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1763 + sizeof(tHalCfg) + tlvStruct->length) ;
1764
1765 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1766 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1767 tlvStruct->length = sizeof(tANI_U32);
1768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1769 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1770 configDataValue ) != eSIR_SUCCESS)
1771 {
1772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1773 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1774 goto handle_failure;
1775 }
1776 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1777 + sizeof(tHalCfg) + tlvStruct->length) ;
1778
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301779 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1780 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1781 tlvStruct->length = sizeof(tANI_U32);
1782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1783 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1784 configDataValue ) != eSIR_SUCCESS)
1785 {
1786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1787 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1788 goto handle_failure;
1789 }
1790 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1791 + sizeof(tHalCfg) + tlvStruct->length) ;
1792
1793 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1794 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1795 tlvStruct->length = sizeof(tANI_U32);
1796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1797 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1798 configDataValue ) != eSIR_SUCCESS)
1799 {
1800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1801 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1802 goto handle_failure;
1803 }
1804 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1805 + sizeof(tHalCfg) + tlvStruct->length) ;
1806
1807 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1808 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1809 tlvStruct->length = sizeof(tANI_U32);
1810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1811 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1812 configDataValue ) != eSIR_SUCCESS)
1813 {
1814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1815 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1816 goto handle_failure;
1817 }
1818 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1819 + sizeof(tHalCfg) + tlvStruct->length) ;
1820
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001821 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1822 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1823 tlvStruct->length = sizeof(tANI_U32);
1824 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1825 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1826 configDataValue ) != eSIR_SUCCESS)
1827 {
1828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1829 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1830 goto handle_failure;
1831 }
1832 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1833 + sizeof(tHalCfg) + tlvStruct->length) ;
1834
c_hpothu5bd1ae42014-03-07 20:28:22 +05301835 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1836 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1837 tlvStruct->length = sizeof(tANI_U32);
1838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1839
1840 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1841 configDataValue ) != eSIR_SUCCESS)
1842 {
1843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1844 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1845 goto handle_failure;
1846 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301847 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1848 + sizeof(tHalCfg) + tlvStruct->length) ;
1849
1850 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1851 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1852 tlvStruct->length = sizeof(tANI_U32);
1853 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1854
1855 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1856 configDataValue ) != eSIR_SUCCESS)
1857 {
1858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1859 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1860 goto handle_failure;
1861 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301862 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1863 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301864
c_hpothu2d0f1c42014-04-01 18:38:51 +05301865 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1866 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1867 tlvStruct->length = sizeof(tANI_U32);
1868 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1869
1870 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1871 configDataValue ) != eSIR_SUCCESS)
1872 {
1873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1874 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1875 goto handle_failure;
1876 }
1877 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1878 + sizeof(tHalCfg) + tlvStruct->length) ;
1879
1880 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1881 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1882 tlvStruct->length = sizeof(tANI_U32);
1883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1884
1885 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1886 configDataValue ) != eSIR_SUCCESS)
1887 {
1888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1889 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1890 goto handle_failure;
1891 }
1892 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1893 + sizeof(tHalCfg) + tlvStruct->length) ;
1894
1895 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1896 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1897 tlvStruct->length = sizeof(tANI_U32);
1898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1899
1900 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1901 configDataValue ) != eSIR_SUCCESS)
1902 {
1903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1904 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1905 goto handle_failure;
1906 }
1907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1908 + sizeof(tHalCfg) + tlvStruct->length) ;
1909
1910 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1911 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1912 tlvStruct->length = sizeof(tANI_U32);
1913 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1914
1915 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1916 configDataValue ) != eSIR_SUCCESS)
1917 {
1918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1919 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1920 goto handle_failure;
1921 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1923 + sizeof(tHalCfg) + tlvStruct->length) ;
1924
Mihir Shetec34258c2014-07-30 17:50:27 +05301925 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1926 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1927 tlvStruct->length = sizeof(tANI_U32);
1928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1929
1930 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1931 configDataValue ) != eSIR_SUCCESS)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1934 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1935 goto handle_failure;
1936 }
1937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1938 + sizeof(tHalCfg) + tlvStruct->length) ;
1939
1940 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1941 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1942 tlvStruct->length = sizeof(tANI_U32);
1943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1944
1945 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1946 configDataValue ) != eSIR_SUCCESS)
1947 {
1948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1949 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1950 goto handle_failure;
1951 }
1952 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1953 + sizeof(tHalCfg) + tlvStruct->length) ;
1954
1955 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1956 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1957 tlvStruct->length = sizeof(tANI_U32);
1958 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1959
1960 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1961 configDataValue ) != eSIR_SUCCESS)
1962 {
1963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1964 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1965 goto handle_failure;
1966 }
1967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1968 + sizeof(tHalCfg) + tlvStruct->length) ;
1969
1970 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1971 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1972 tlvStruct->length = sizeof(tANI_U32);
1973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1974
1975 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1976 configDataValue ) != eSIR_SUCCESS)
1977 {
1978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1979 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1980 goto handle_failure;
1981 }
1982 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1983 + sizeof(tHalCfg) + tlvStruct->length) ;
1984
1985 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1986 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1987 tlvStruct->length = sizeof(tANI_U32);
1988 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1989
1990 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1991 configDataValue ) != eSIR_SUCCESS)
1992 {
1993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1994 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1995 goto handle_failure;
1996 }
1997 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1998 + sizeof(tHalCfg) + tlvStruct->length) ;
1999
2000 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2001 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2002 tlvStruct->length = sizeof(tANI_U32);
2003 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2004
2005 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2006 configDataValue ) != eSIR_SUCCESS)
2007 {
2008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2009 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2010 goto handle_failure;
2011 }
2012 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2013 + sizeof(tHalCfg) + tlvStruct->length) ;
2014
2015 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2016 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2017 tlvStruct->length = sizeof(tANI_U32);
2018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2019
2020 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2021 configDataValue ) != eSIR_SUCCESS)
2022 {
2023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2024 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2025 goto handle_failure;
2026 }
2027 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2028 + sizeof(tHalCfg) + tlvStruct->length) ;
2029
2030 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2031 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2032 tlvStruct->length = sizeof(tANI_U32);
2033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2034
2035 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2036 configDataValue ) != eSIR_SUCCESS)
2037 {
2038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2039 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2040 goto handle_failure;
2041 }
2042 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2043 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302044
2045 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2046 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2047 tlvStruct->length = sizeof(tANI_U32);
2048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2049
2050 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2051 configDataValue ) != eSIR_SUCCESS)
2052 {
2053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2054 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2055 goto handle_failure;
2056 }
2057 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2058 + sizeof(tHalCfg) + tlvStruct->length) ;
2059
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302060 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2061 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2062 tlvStruct->length = sizeof(tANI_U32);
2063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2064
2065 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2066 configDataValue ) != eSIR_SUCCESS)
2067 {
2068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2069 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2070 goto handle_failure;
2071 }
2072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2073 + sizeof(tHalCfg) + tlvStruct->length) ;
2074
2075
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002077#ifdef WLAN_DEBUG
2078 {
2079 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002080 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2081 "****** Dumping CFG TLV ***** ");
2082 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2083 {
2084 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2085 "%02x %02x %02x %02x %02x %02x %02x %02x",
2086 tlvStructStart[i],
2087 tlvStructStart[i+1],
2088 tlvStructStart[i+2],
2089 tlvStructStart[i+3],
2090 tlvStructStart[i+4],
2091 tlvStructStart[i+5],
2092 tlvStructStart[i+6],
2093 tlvStructStart[i+7]);
2094 }
2095 /* Dump the bytes in the last line*/
2096 for (; i < wdiStartParams->usConfigBufferLen; i++)
2097 {
2098 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2099 "%02x ",tlvStructStart[i]);
2100 }
2101 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2102 "**************************** ");
2103 }
2104#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002106handle_failure:
2107 vos_mem_free(configParam);
2108 return VOS_STATUS_E_FAILURE;
2109}
Jeff Johnson295189b2012-06-20 16:38:30 -07002110/*
2111 * FUNCTION: WDA_wdiCompleteCB
2112 * call the voss call back function
2113 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002114void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002115{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2117 tWDA_CbContext *wdaContext;
2118
2119 if(NULL == pWdaParams)
2120 {
2121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002122 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002123 VOS_ASSERT(0) ;
2124 return ;
2125 }
2126
2127 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2128
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 if (NULL == wdaContext)
2130 {
2131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002132 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 return ;
2134 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002135
Jeff Johnson295189b2012-06-20 16:38:30 -07002136 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002137 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002141 vos_mem_free(pWdaParams);
2142
Jeff Johnson295189b2012-06-20 16:38:30 -07002143 if(WDI_STATUS_SUCCESS != status)
2144 {
2145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2146 "WDI stop callback returned failure" );
2147 VOS_ASSERT(0) ;
2148 }
2149 else
2150 {
2151 wdaContext->wdaState = WDA_STOP_STATE;
2152 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002153
Leo Chang9d76f622013-08-23 16:34:52 -07002154 /* FTM Driver stop procedure should be synced.
2155 * Stop and Close will happen on same context */
2156 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2157 {
2158 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2159 {
2160 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2161 "%s: FTM Stop Event Set Fail", __func__);
2162 VOS_ASSERT(0);
2163 }
2164 }
2165
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002167 vos_WDAComplete_cback(wdaContext->pVosContext);
2168
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 return ;
2170}
Jeff Johnson295189b2012-06-20 16:38:30 -07002171/*
2172 * FUNCTION: WDA_stop
2173 * call WDI_stop
2174 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002175VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2176{
2177 WDI_Status wdiStatus;
2178 VOS_STATUS status = VOS_STATUS_SUCCESS;
2179 WDI_StopReqParamsType *wdiStopReq;
2180 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002181 tWDA_ReqParams *pWdaParams ;
2182
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 if (NULL == pWDA)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002186 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 VOS_ASSERT(0);
2188 return VOS_STATUS_E_FAILURE;
2189 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002190 if (pWDA->wdiFailed == true)
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002194 return VOS_STATUS_E_ALREADY;
2195 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002196
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 /* FTM mode stay START_STATE */
2198 if( (WDA_READY_STATE != pWDA->wdaState) &&
2199 (WDA_INIT_STATE != pWDA->wdaState) &&
2200 (WDA_START_STATE != pWDA->wdaState) )
2201 {
2202 VOS_ASSERT(0);
2203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 wdiStopReq = (WDI_StopReqParamsType *)
2205 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2206 if(NULL == wdiStopReq)
2207 {
2208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002210 VOS_ASSERT(0);
2211 return VOS_STATUS_E_NOMEM;
2212 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002213
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 wdiStopReq->wdiStopReason = reason;
2215 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002216
2217 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2218 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 {
2220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 VOS_ASSERT(0);
2223 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002224 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002226
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002227 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2228 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 {
2230 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002231 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002233
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002234 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2235 pWdaParams->wdaMsgParam = NULL;
2236 pWdaParams->pWdaContext = pWDA;
2237
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 /* call WDI stop */
2239 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002240 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2241
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2245 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2247 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 status = VOS_STATUS_E_FAILURE;
2249 }
Leo Chang9d76f622013-08-23 16:34:52 -07002250
2251 /* FTM Driver stop procedure should be synced.
2252 * Stop and Close will happen on same context */
2253 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2254 {
2255 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2256 WDI_RESPONSE_TIMEOUT);
2257 if (status != VOS_STATUS_SUCCESS)
2258 {
2259 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2260 "%s: FTM Stop Timepoout", __func__);
2261 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002262 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302263 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 return status;
2266}
Jeff Johnson295189b2012-06-20 16:38:30 -07002267/*
2268 * FUNCTION: WDA_close
2269 * call WDI_close and free the WDA context
2270 */
2271VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2272{
Jeff Johnson43971f52012-07-17 12:26:56 -07002273 VOS_STATUS status = VOS_STATUS_SUCCESS;
2274 WDI_Status wstatus;
2275 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 if (NULL == wdaContext)
2278 {
2279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002280 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 return VOS_STATUS_E_FAILURE;
2282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2284 (WDA_STOP_STATE != wdaContext->wdaState))
2285 {
2286 VOS_ASSERT(0);
2287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002289 wstatus = WDI_Close();
2290 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 {
2292 status = VOS_STATUS_E_FAILURE;
2293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002296 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2297 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 {
2299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002300 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 status = VOS_STATUS_E_FAILURE;
2302 }
2303
Jeff Johnson43971f52012-07-17 12:26:56 -07002304 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002305 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002308 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 status = VOS_STATUS_E_FAILURE;
2310 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002311 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002312 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 {
2314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002315 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 status = VOS_STATUS_E_FAILURE;
2317 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002318 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002319 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 {
2321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002322 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 status = VOS_STATUS_E_FAILURE;
2324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002326 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002327 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 {
2329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2330 "error in WDA close " );
2331 status = VOS_STATUS_E_FAILURE;
2332 }
2333 return status;
2334}
Jeff Johnson295189b2012-06-20 16:38:30 -07002335/*
2336 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2337 * returns 1 if the compiled version is greater than or equal to the input version
2338 */
2339
2340uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2341{
2342 VOS_STATUS status = VOS_STATUS_SUCCESS;
2343 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2344 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002346 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2347 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2348 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2349 (compiledVersion.revision >= revision)))
2350 return 1;
2351 else
2352 return 0;
2353}
Jeff Johnson295189b2012-06-20 16:38:30 -07002354/*
2355 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2356 * returns 1 if the compiled version is greater than or equal to the input version
2357 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002358uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2359{
2360 VOS_STATUS status = VOS_STATUS_SUCCESS;
2361 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2362 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002364 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2365 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2366 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2367 (reportedVersion.revision >= revision)))
2368 return 1;
2369 else
2370 return 0;
2371}
Jeff Johnson295189b2012-06-20 16:38:30 -07002372/*
2373 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2374 * Returns the version of the WCNSS WLAN API with which the HOST
2375 * device driver was compiled
2376 */
2377VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2378 tSirVersionType *pVersion)
2379{
2380 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 if ((NULL == pvosGCtx) || (NULL == pVersion))
2382 {
2383 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002384 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 VOS_ASSERT(0);
2386 return VOS_STATUS_E_FAILURE;
2387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2389 if (NULL == pWDA )
2390 {
2391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002392 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 VOS_ASSERT(0);
2394 return VOS_STATUS_E_FAILURE;
2395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 *pVersion = pWDA->wcnssWlanCompiledVersion;
2397 return VOS_STATUS_SUCCESS;
2398}
Jeff Johnson295189b2012-06-20 16:38:30 -07002399/*
2400 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2401 * Returns the version of the WCNSS WLAN API with which the WCNSS
2402 * device driver was compiled
2403 */
2404VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2405 tSirVersionType *pVersion)
2406{
2407 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 if ((NULL == pvosGCtx) || (NULL == pVersion))
2409 {
2410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002411 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 VOS_ASSERT(0);
2413 return VOS_STATUS_E_FAILURE;
2414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2416 if (NULL == pWDA )
2417 {
2418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002419 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 VOS_ASSERT(0);
2421 return VOS_STATUS_E_FAILURE;
2422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 *pVersion = pWDA->wcnssWlanReportedVersion;
2424 return VOS_STATUS_SUCCESS;
2425}
Jeff Johnson295189b2012-06-20 16:38:30 -07002426/*
2427 * FUNCTION: WDA_GetWcnssSoftwareVersion
2428 * Returns the WCNSS Software version string
2429 */
2430VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2431 tANI_U8 *pVersion,
2432 tANI_U32 versionBufferSize)
2433{
2434 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002436 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 if ((NULL == pvosGCtx) || (NULL == pVersion))
2438 {
2439 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002440 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 VOS_ASSERT(0);
2442 return VOS_STATUS_E_FAILURE;
2443 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2445 if (NULL == pWDA )
2446 {
2447 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002448 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 VOS_ASSERT(0);
2450 return VOS_STATUS_E_FAILURE;
2451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2453 return VOS_STATUS_SUCCESS;
2454}
Jeff Johnson295189b2012-06-20 16:38:30 -07002455/*
2456 * FUNCTION: WDA_GetWcnssHardwareVersion
2457 * Returns the WCNSS Hardware version string
2458 */
2459VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2460 tANI_U8 *pVersion,
2461 tANI_U32 versionBufferSize)
2462{
2463 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002465 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 if ((NULL == pvosGCtx) || (NULL == pVersion))
2467 {
2468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 VOS_ASSERT(0);
2471 return VOS_STATUS_E_FAILURE;
2472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2474 if (NULL == pWDA )
2475 {
2476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002477 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0);
2479 return VOS_STATUS_E_FAILURE;
2480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2482 return VOS_STATUS_SUCCESS;
2483}
Jeff Johnson295189b2012-06-20 16:38:30 -07002484/*
2485 * FUNCTION: WDA_WniCfgDnld
2486 * Trigger CFG Download
2487 */
2488VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2489{
2490 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302491 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002492
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 if (NULL == pMac )
2494 {
2495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002496 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 VOS_ASSERT(0);
2498 return VOS_STATUS_E_FAILURE;
2499 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302500 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 return vosStatus;
2502}
Jeff Johnson295189b2012-06-20 16:38:30 -07002503/* -----------------------------------------------------------------
2504 * WDI interface
2505 * -----------------------------------------------------------------
2506 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002507/*
2508 * FUNCTION: WDA_suspendDataTxCallback
2509 * call back function called from TL after suspend Transmission
2510 */
2511VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2512 v_U8_t* ucSTAId,
2513 VOS_STATUS vosStatus)
2514{
2515 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002517 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 if (NULL == pWDA )
2519 {
2520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002521 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 VOS_ASSERT(0);
2523 return VOS_STATUS_E_FAILURE;
2524 }
2525 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2526 {
2527 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2528 }
2529 else
2530 {
2531 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2532 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 /* Trigger the event to bring the WDA TL suspend function to come
2534 * out of wait*/
2535 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2536 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2537 {
2538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002539 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 /* If TL suspended had timedout before this callback was called, resume back
2542 * TL.*/
2543 if (pWDA->txSuspendTimedOut)
2544 {
2545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002546 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 WDA_ResumeDataTx(pWDA);
2548 pWDA->txSuspendTimedOut = FALSE;
2549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 return VOS_STATUS_SUCCESS;
2551}
Jeff Johnson295189b2012-06-20 16:38:30 -07002552/*
2553 * FUNCTION: WDA_suspendDataTx
2554 * Update TL to suspend the data Transmission
2555 */
2556VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2557{
2558 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2559 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002560
2561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002562 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 if (pWDA->txSuspendTimedOut)
2565 {
2566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002567 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 return status;
2569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 /* Reset the event to be not signalled */
2571 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2572 if(!VOS_IS_STATUS_SUCCESS(status))
2573 {
2574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002575 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 return VOS_STATUS_E_FAILURE;
2577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002579 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 WDA_SuspendDataTxCallback);
2581 if(status != VOS_STATUS_SUCCESS)
2582 {
2583 return status;
2584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 /* Wait for the event to be set by the TL, to get the response of
2586 * suspending the TX queues, this event should be set by the Callback
2587 * function called by TL*/
2588 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2589 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2590 if(!VOS_IS_STATUS_SUCCESS(status))
2591 {
2592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2593 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002594 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 /* Set this flag to true when TL suspend times out, so that when TL
2596 * suspend eventually happens and calls the callback, TL can be resumed
2597 * right away by looking at this flag when true.*/
2598 pWDA->txSuspendTimedOut = TRUE;
2599 }
2600 else
2601 {
2602 pWDA->txSuspendTimedOut = FALSE;
2603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2605 {
2606 status = VOS_STATUS_SUCCESS;
2607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 return status;
2609}
Jeff Johnson295189b2012-06-20 16:38:30 -07002610/*
2611 * FUNCTION: WDA_resumeDataTx
2612 * Update TL to resume the data Transmission
2613 */
2614VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2615{
2616 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002617
2618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002619 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002620
2621 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 return status;
2623}
Jeff Johnson295189b2012-06-20 16:38:30 -07002624/*
2625 * FUNCTION: WDA_InitScanReqCallback
2626 * Trigger Init SCAN callback
2627 */
2628void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2629{
2630 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2631 tWDA_CbContext *pWDA;
2632 tInitScanParams *pWDA_ScanParam ;
2633 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002635 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 if(NULL == pWdaParams)
2637 {
2638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002639 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 VOS_ASSERT(0) ;
2641 return ;
2642 }
2643 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2644 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 if(NULL == pWDA_ScanParam)
2646 {
2647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002648 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002649 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2651 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 return ;
2653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 if(WDI_STATUS_SUCCESS != wdiStatus)
2655 {
2656 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 if(VOS_STATUS_SUCCESS != status)
2658 {
2659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002660 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 }
2662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 /* free WDI command buffer */
2664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002666
Jeff Johnson295189b2012-06-20 16:38:30 -07002667
2668 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002669 /* without converting the Status to Failure or Success Just
2670 pass the same status to lim */
2671 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 /* send SCAN RSP message back to PE */
2673 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 return ;
2675}
2676
2677/*
2678 * FUNCTION: WDA_ProcessInitScanReq
2679 * Trigger Init SCAN in DAL
2680 */
2681VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2682 tInitScanParams *initScanParams)
2683{
2684 WDI_Status status = WDI_STATUS_SUCCESS ;
2685 WDI_InitScanReqParamsType *wdiInitScanParam =
2686 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2687 sizeof(WDI_InitScanReqParamsType)) ;
2688 tWDA_ReqParams *pWdaParams;
2689 tANI_U8 i = 0;
2690
2691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002692 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 if(NULL == wdiInitScanParam)
2694 {
2695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002696 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 VOS_ASSERT(0);
2698 return VOS_STATUS_E_NOMEM;
2699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2701 if(NULL == pWdaParams)
2702 {
2703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 VOS_ASSERT(0);
2706 vos_mem_free(wdiInitScanParam);
2707 return VOS_STATUS_E_NOMEM;
2708 }
2709
2710 /* Copy init Scan params to WDI structure */
2711 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2712 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2713 sizeof(tSirMacAddr)) ;
2714 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2715 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2716 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2718 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2720 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2722 {
2723 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2724 initScanParams->scanEntry.bssIdx[i] ;
2725 }
2726
2727 /* if Frame length, copy macMgmtHdr or WDI structure */
2728 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2729 {
2730 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2731 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2732 }
2733 wdiInitScanParam->wdiReqStatusCB = NULL ;
2734
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 /* Store Init Req pointer, as this will be used for response */
2736 pWdaParams->pWdaContext = pWDA;
2737 pWdaParams->wdaMsgParam = initScanParams;
2738 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 /* first try to suspend TX */
2740 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 if(WDI_STATUS_SUCCESS != status)
2742 {
2743 goto handleWdiFailure;
2744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 /* call DAL API to pass init scan request to DAL */
2746 status = WDI_InitScanReq(wdiInitScanParam,
2747 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002748 if(IS_WDI_STATUS_FAILURE(status))
2749 {
2750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2751 "error in WDA Init Scan, Resume Tx " );
2752 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 VOS_ASSERT(0) ;
2754
2755 goto handleWdiFailure;
2756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002758handleWdiFailure:
2759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2760 "Failure in WDI Api, free all the memory " );
2761 /* free WDI command buffer */
2762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2763 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 /* send Failure to PE */
2765 initScanParams->status = eSIR_FAILURE ;
2766 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 return CONVERT_WDI2VOS_STATUS(status) ;
2768}
2769
Jeff Johnson295189b2012-06-20 16:38:30 -07002770/*
2771 * FUNCTION: WDA_StartScanReqCallback
2772 * send Start SCAN RSP back to PE
2773 */
2774void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2775 void* pUserData)
2776{
2777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2778 tWDA_CbContext *pWDA;
2779 tStartScanParams *pWDA_ScanParam;
2780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002781 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 if(NULL == pWdaParams)
2783 {
2784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002785 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002786 VOS_ASSERT(0) ;
2787 return ;
2788 }
2789 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2790 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 if(NULL == pWDA_ScanParam)
2792 {
2793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002794 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002796 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 return ;
2798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2800 {
2801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002802 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002804 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002805 return ;
2806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2808 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002809
Jeff Johnson295189b2012-06-20 16:38:30 -07002810
2811 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002812 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 /* send SCAN RSP message back to PE */
2814 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 return ;
2816}
2817
Jeff Johnson295189b2012-06-20 16:38:30 -07002818/*
2819 * FUNCTION: WDA_ProcessStartScanReq
2820 * Trigger start SCAN in WDI
2821 */
2822VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2823 tStartScanParams *startScanParams)
2824{
2825 WDI_Status status = WDI_STATUS_SUCCESS;
2826 WDI_StartScanReqParamsType *wdiStartScanParams =
2827 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2828 sizeof(WDI_StartScanReqParamsType)) ;
2829 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002831 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 if(NULL == wdiStartScanParams)
2833 {
2834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 VOS_ASSERT(0);
2837 return VOS_STATUS_E_NOMEM;
2838 }
2839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2840 if(NULL == pWdaParams)
2841 {
2842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 VOS_ASSERT(0);
2845 vos_mem_free(wdiStartScanParams);
2846 return VOS_STATUS_E_NOMEM;
2847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 /* Copy init Scan params to WDI structure */
2849 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2850 wdiStartScanParams->wdiReqStatusCB = NULL ;
2851
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 /* Store Init Req pointer, as this will be used for response */
2853 /* store Params pass it to WDI */
2854 pWdaParams->pWdaContext = pWDA;
2855 pWdaParams->wdaMsgParam = startScanParams;
2856 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 /* call DAL API to pass init scan request to DAL */
2858 status = WDI_StartScanReq(wdiStartScanParams,
2859 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 /* failure returned by WDI API */
2861 if(IS_WDI_STATUS_FAILURE(status))
2862 {
2863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2864 "Failure in Start Scan WDI API, free all the memory "
2865 "It should be due to previous abort scan." );
2866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2867 vos_mem_free(pWdaParams) ;
2868 startScanParams->status = eSIR_FAILURE ;
2869 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 return CONVERT_WDI2VOS_STATUS(status) ;
2872}
Jeff Johnson295189b2012-06-20 16:38:30 -07002873/*
2874 * FUNCTION: WDA_EndScanReqCallback
2875 * END SCAN callback
2876 */
2877void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2878{
2879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2880 tWDA_CbContext *pWDA;
2881 tEndScanParams *endScanParam;
2882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 if(NULL == pWdaParams)
2885 {
2886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002887 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 VOS_ASSERT(0) ;
2889 return ;
2890 }
2891 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2892 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 if(NULL == endScanParam)
2894 {
2895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002896 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2899 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return ;
2901 }
2902
2903 /* Free WDI command buffer */
2904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2905 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002907 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 /* send response back to PE */
2909 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2910 return ;
2911}
2912
Jeff Johnson295189b2012-06-20 16:38:30 -07002913/*
2914 * FUNCTION: WDA_ProcessEndScanReq
2915 * Trigger END SCAN in WDI
2916 */
2917VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2918 tEndScanParams *endScanParams)
2919{
2920 WDI_Status status = WDI_STATUS_SUCCESS;
2921 WDI_EndScanReqParamsType *wdiEndScanParams =
2922 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2923 sizeof(WDI_EndScanReqParamsType)) ;
2924 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002926 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 if(NULL == wdiEndScanParams)
2928 {
2929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 VOS_ASSERT(0);
2932 return VOS_STATUS_E_NOMEM;
2933 }
2934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2935 if(NULL == pWdaParams)
2936 {
2937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 VOS_ASSERT(0);
2940 vos_mem_free(wdiEndScanParams);
2941 return VOS_STATUS_E_NOMEM;
2942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 /* Copy init Scan params to WDI structure */
2944 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2945 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 /* Store Init Req pointer, as this will be used for response */
2947 /* store Params pass it to WDI */
2948 pWdaParams->pWdaContext = pWDA;
2949 pWdaParams->wdaMsgParam = endScanParams;
2950 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 /* call DAL API to pass init scan request to DAL */
2952 status = WDI_EndScanReq(wdiEndScanParams,
2953 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 if(IS_WDI_STATUS_FAILURE(status))
2955 {
2956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2957 "Failure in End Scan WDI API, free all the memory "
2958 "It should be due to previous abort scan." );
2959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2960 vos_mem_free(pWdaParams) ;
2961 endScanParams->status = eSIR_FAILURE ;
2962 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 return CONVERT_WDI2VOS_STATUS(status) ;
2965}
Jeff Johnson295189b2012-06-20 16:38:30 -07002966/*
2967 * FUNCTION: WDA_FinishScanReqCallback
2968 * Trigger Finish SCAN callback
2969 */
2970void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2971{
2972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2973 tWDA_CbContext *pWDA;
2974 tFinishScanParams *finishScanParam;
2975 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002977 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 if(NULL == pWdaParams)
2979 {
2980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002981 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 VOS_ASSERT(0) ;
2983 return ;
2984 }
2985
2986 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2987 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 if(NULL == finishScanParam)
2989 {
2990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002991 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2994 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 return ;
2996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2998 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 /*
3000 * Now Resume TX, if we reached here means, TX is already suspended, we
3001 * have to resume it unconditionaly
3002 */
3003 status = WDA_ResumeDataTx(pWDA) ;
3004
3005 if(VOS_STATUS_SUCCESS != status)
3006 {
3007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003008 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003010 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3012 return ;
3013}
Jeff Johnson295189b2012-06-20 16:38:30 -07003014/*
3015 * FUNCTION: WDA_ProcessFinshScanReq
3016 * Trigger Finish SCAN in WDI
3017 */
3018VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3019 tFinishScanParams *finishScanParams)
3020{
3021 WDI_Status status = WDI_STATUS_SUCCESS;
3022 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3023 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3024 sizeof(WDI_FinishScanReqParamsType)) ;
3025 tWDA_ReqParams *pWdaParams ;
3026 tANI_U8 i = 0;
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 if(NULL == wdiFinishScanParams)
3030 {
3031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 VOS_ASSERT(0);
3034 return VOS_STATUS_E_NOMEM;
3035 }
3036 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3037 if(NULL == pWdaParams)
3038 {
3039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003040 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 VOS_ASSERT(0);
3042 vos_mem_free(wdiFinishScanParams);
3043 return VOS_STATUS_E_NOMEM;
3044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 /* Copy init Scan params to WDI structure */
3046 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3047 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3048 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3050 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3051 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3052 finishScanParams->frameLength ;
3053 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3054 finishScanParams->currentOperChannel ;
3055 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3056 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3057 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3059 {
3060 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3061 finishScanParams->scanEntry.bssIdx[i] ;
3062 }
3063
3064
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 /* if Frame length, copy macMgmtHdr ro WDI structure */
3066 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3067 {
3068 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3069 &finishScanParams->macMgmtHdr,
3070 sizeof(WDI_MacMgmtHdr)) ;
3071 }
3072 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 /* Store Init Req pointer, as this will be used for response */
3074 /* store Params pass it to WDI */
3075 pWdaParams->pWdaContext = pWDA;
3076 pWdaParams->wdaMsgParam = finishScanParams;
3077 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 /* call DAL API to pass init scan request to DAL */
3079 status = WDI_FinishScanReq(wdiFinishScanParams,
3080 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003081
Jeff Johnson295189b2012-06-20 16:38:30 -07003082
3083 /*
3084 * WDI API returns failure..
3085 */
3086 if(IS_WDI_STATUS_FAILURE( status))
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3089 "Failure in Finish Scan WDI API, free all the memory " );
3090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3091 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 finishScanParams->status = eSIR_FAILURE ;
3093 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 return CONVERT_WDI2VOS_STATUS(status) ;
3096}
Jeff Johnson295189b2012-06-20 16:38:30 -07003097/*---------------------------------------------------------------------
3098 * ASSOC API's
3099 *---------------------------------------------------------------------
3100 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003101/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303102 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 * Trigger Init SCAN callback
3104 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303105void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003106{
3107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3108 tWDA_CbContext *pWDA;
3109 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003111 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 if(NULL == pWdaParams)
3113 {
3114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003115 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 VOS_ASSERT(0) ;
3117 return ;
3118 }
3119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3120 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3122 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 /* reset macBSSID */
3124 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 /* reset macSTASelf */
3126 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003127 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return ;
3130}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303131
3132/*
3133 * FUNCTION: WDA_JoinReqCallback
3134 * Free memory and send SWITCH CHANNEL RSP back to PE.
3135 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3136 */
3137void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3138{
3139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3140 tWDA_CbContext *pWDA;
3141 tSwitchChannelParams *joinReqParam;
3142
3143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3144 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3145
3146 if(NULL == pWdaParams)
3147 {
3148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3149 "%s: pWdaParams received NULL", __func__);
3150 VOS_ASSERT(0);
3151 return;
3152 }
3153
3154 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3155 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3156 joinReqParam->status = wdiStatus;
3157
3158 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3159 {
3160 /* reset macBSSID */
3161 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3162 /* reset macSTASelf */
3163 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3164
3165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3166 vos_mem_free(pWdaParams);
3167 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3168 }
3169
3170 return;
3171}
3172
Jeff Johnson295189b2012-06-20 16:38:30 -07003173/*
3174 * FUNCTION: WDA_ProcessJoinReq
3175 * Trigger Join REQ in WDI
3176 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003177VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3178 tSwitchChannelParams* joinReqParam)
3179{
3180 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 WDI_JoinReqParamsType *wdiJoinReqParam =
3182 (WDI_JoinReqParamsType *)vos_mem_malloc(
3183 sizeof(WDI_JoinReqParamsType)) ;
3184 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(NULL == wdiJoinReqParam)
3188 {
3189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003192 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 return VOS_STATUS_E_NOMEM;
3194 }
3195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3196 if(NULL == pWdaParams)
3197 {
3198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 VOS_ASSERT(0);
3201 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003202 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 return VOS_STATUS_E_NOMEM;
3204 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003205
3206 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3207 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3208 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3211 "%s: received join request when BSSID or self-STA is NULL "
3212 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003213 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003214 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3215 VOS_ASSERT(0);
3216 vos_mem_free(wdiJoinReqParam);
3217 vos_mem_free(pWdaParams);
3218 joinReqParam->status = eSIR_FAILURE ;
3219 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3220 return VOS_STATUS_E_INVAL;
3221 }
3222
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 /* copy the BSSID for pWDA */
3224 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3225 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3227 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3229 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003230#ifdef WLAN_FEATURE_VOWIFI
3231 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3232 joinReqParam->maxTxPower ;
3233#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3235 joinReqParam->localPowerConstraint ;
3236#endif
3237 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3238 joinReqParam->secondaryChannelOffset ;
3239 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3240
Sachin Ahuja935eda782014-07-30 14:57:41 +05303241 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3242 wdiJoinReqParam->pUserData = pWdaParams;
3243
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 /* Store Init Req pointer, as this will be used for response */
3245 /* store Params pass it to WDI */
3246 pWdaParams->pWdaContext = pWDA;
3247 pWdaParams->wdaMsgParam = joinReqParam;
3248 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303250 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 if(IS_WDI_STATUS_FAILURE(status))
3252 {
3253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3254 "Failure in Join WDI API, free all the memory " );
3255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3256 vos_mem_free(pWdaParams) ;
3257 joinReqParam->status = eSIR_FAILURE ;
3258 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 return CONVERT_WDI2VOS_STATUS(status) ;
3261}
Jeff Johnson295189b2012-06-20 16:38:30 -07003262/*
3263 * FUNCTION: WDA_SwitchChannelReqCallback
3264 * send Switch channel RSP back to PE
3265 */
3266void WDA_SwitchChannelReqCallback(
3267 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3268{
3269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3270 tWDA_CbContext *pWDA;
3271 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003273 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 if(NULL == pWdaParams)
3275 {
3276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 VOS_ASSERT(0) ;
3279 return ;
3280 }
3281 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3282 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3283
3284#ifdef WLAN_FEATURE_VOWIFI
3285 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3286#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3288 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003290 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 return ;
3293}
Jeff Johnson295189b2012-06-20 16:38:30 -07003294/*
3295 * FUNCTION: WDA_ProcessChannelSwitchReq
3296 * Request to WDI to switch channel REQ params.
3297 */
3298VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3299 tSwitchChannelParams *pSwitchChanParams)
3300{
3301 WDI_Status status = WDI_STATUS_SUCCESS ;
3302 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3303 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3304 sizeof(WDI_SwitchChReqParamsType)) ;
3305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 if(NULL == wdiSwitchChanParam)
3309 {
3310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 VOS_ASSERT(0);
3313 return VOS_STATUS_E_NOMEM;
3314 }
3315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3316 if(NULL == pWdaParams)
3317 {
3318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 VOS_ASSERT(0);
3321 vos_mem_free(wdiSwitchChanParam);
3322 return VOS_STATUS_E_NOMEM;
3323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3325#ifndef WLAN_FEATURE_VOWIFI
3326 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3327 pSwitchChanParams->localPowerConstraint;
3328#endif
3329 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3330 pSwitchChanParams->secondaryChannelOffset;
3331 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 /* Store req pointer, as this will be used for response */
3333 /* store Params pass it to WDI */
3334 pWdaParams->pWdaContext = pWDA;
3335 pWdaParams->wdaMsgParam = pSwitchChanParams;
3336 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003337#ifdef WLAN_FEATURE_VOWIFI
3338 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3339 = pSwitchChanParams->maxTxPower;
3340 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3341 pSwitchChanParams ->selfStaMacAddr,
3342 sizeof(tSirMacAddr));
3343#endif
3344 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3345 pSwitchChanParams->bssId,
3346 sizeof(tSirMacAddr));
3347
3348 status = WDI_SwitchChReq(wdiSwitchChanParam,
3349 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 if(IS_WDI_STATUS_FAILURE(status))
3351 {
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3353 "Failure in process channel switch Req WDI API, free all the memory " );
3354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3355 vos_mem_free(pWdaParams) ;
3356 pSwitchChanParams->status = eSIR_FAILURE ;
3357 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 return CONVERT_WDI2VOS_STATUS(status) ;
3360}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003361
3362/*
3363 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3364 * send Switch channel RSP back to PE
3365 */
3366void WDA_SwitchChannelReqCallback_V1(
3367 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3368 void* pUserData)
3369{
3370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3371 tWDA_CbContext *pWDA;
3372 tSwitchChannelParams *pSwitchChanParams;
3373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3374 "<------ %s " ,__func__);
3375
3376 if (NULL == pWdaParams)
3377 {
3378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3379 "%s: pWdaParams received NULL", __func__);
3380 VOS_ASSERT(0);
3381 return ;
3382 }
3383 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3384 pSwitchChanParams =
3385 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3386 pSwitchChanParams->channelSwitchSrc =
3387 wdiSwitchChanRsp->channelSwitchSrc;
3388#ifdef WLAN_FEATURE_VOWIFI
3389 pSwitchChanParams->txMgmtPower =
3390 wdiSwitchChanRsp->ucTxMgmtPower;
3391#endif
3392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3393 vos_mem_free(pWdaParams);
3394 pSwitchChanParams->status =
3395 wdiSwitchChanRsp->wdiStatus ;
3396 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3397 (void *)pSwitchChanParams , 0);
3398 return;
3399}
3400
3401/*
3402 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3403 * Request to WDI to switch channel REQ params.
3404 */
3405VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3406 tSwitchChannelParams *pSwitchChanParams)
3407{
3408 WDI_Status status = WDI_STATUS_SUCCESS ;
3409 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3410 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3411 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3412 tWDA_ReqParams *pWdaParams ;
3413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3414 "------> %s " ,__func__);
3415 if (NULL == wdiSwitchChanParam)
3416 {
3417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3418 "%s: VOS MEM Alloc Failure", __func__);
3419 VOS_ASSERT(0);
3420 return VOS_STATUS_E_NOMEM;
3421 }
3422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3423 if (NULL == pWdaParams)
3424 {
3425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3426 "%s: VOS MEM Alloc Failure", __func__);
3427 VOS_ASSERT(0);
3428 vos_mem_free(wdiSwitchChanParam);
3429 return VOS_STATUS_E_NOMEM;
3430 }
3431 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3432 pSwitchChanParams->channelSwitchSrc;
3433
3434 wdiSwitchChanParam->wdiChInfo.ucChannel =
3435 pSwitchChanParams->channelNumber;
3436#ifndef WLAN_FEATURE_VOWIFI
3437 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3438 pSwitchChanParams->localPowerConstraint;
3439#endif
3440 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3441 pSwitchChanParams->secondaryChannelOffset;
3442 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3443 /* Store req pointer, as this will be used for response */
3444 /* store Params pass it to WDI */
3445 pWdaParams->pWdaContext = pWDA;
3446 pWdaParams->wdaMsgParam = pSwitchChanParams;
3447 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3448#ifdef WLAN_FEATURE_VOWIFI
3449 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3450 pSwitchChanParams->maxTxPower;
3451 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3452 pSwitchChanParams ->selfStaMacAddr,
3453 sizeof(tSirMacAddr));
3454#endif
3455 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3456 pSwitchChanParams->bssId,
3457 sizeof(tSirMacAddr));
3458
3459 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3460 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3461 pWdaParams);
3462 if (IS_WDI_STATUS_FAILURE(status))
3463 {
3464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3465 "Failure in process channel switch Req WDI "
3466 "API, free all the memory " );
3467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3468 vos_mem_free(pWdaParams) ;
3469 pSwitchChanParams->status = eSIR_FAILURE ;
3470 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3471 (void *)pSwitchChanParams, 0) ;
3472 }
3473 return CONVERT_WDI2VOS_STATUS(status) ;
3474}
3475
Jeff Johnson295189b2012-06-20 16:38:30 -07003476/*
3477 * FUNCTION: WDA_ConfigBssReqCallback
3478 * config BSS Req Callback, called by WDI
3479 */
3480void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3481 ,void* pUserData)
3482{
3483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3484 tWDA_CbContext *pWDA;
3485 tAddBssParams *configBssReqParam;
3486 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003488 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 if(NULL == pWdaParams)
3490 {
3491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 VOS_ASSERT(0) ;
3494 return ;
3495 }
3496 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3497 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3498 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003500 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3502 {
3503 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3504 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3506 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3507 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3508
3509 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3510 {
3511 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3512 {
3513 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3514 staConfigBssParam->staType = STA_ENTRY_BSSID;
3515 }
3516 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3517 (staConfigBssParam->staType == STA_ENTRY_SELF))
3518 {
3519 /* This is the 1st add BSS Req for the BTAMP STA */
3520 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3521 staConfigBssParam->staType = STA_ENTRY_BSSID;
3522 }
3523 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3524 (staConfigBssParam->staType == STA_ENTRY_PEER))
3525 {
3526 /* This is the 2nd ADD BSS Request that is sent
3527 * on the BTAMP STA side. The Sta type is
3528 * set to STA_ENTRY_PEER here.*/
3529 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3530 }
3531 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3532 (staConfigBssParam->staType == STA_ENTRY_SELF))
3533 {
3534 /* statype is already set by PE.
3535 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3536 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3537 staConfigBssParam->staType = STA_ENTRY_BSSID;
3538 }
3539 else
3540 {
3541 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3542 staConfigBssParam->staType = STA_ENTRY_PEER;
3543 }
3544 }
3545 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3546 {
3547 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3548 staConfigBssParam->staType = STA_ENTRY_SELF;
3549 }
3550 else
3551 {
3552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3553 "Invalid operation mode specified");
3554 VOS_ASSERT(0);
3555 }
3556
3557 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3562 sizeof(tSirMacAddr));
3563 staConfigBssParam->txChannelWidthSet =
3564 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3566 staConfigBssParam->htCapable)
3567 {
3568 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3569 wdiConfigBssRsp->ucBSSIdx;
3570 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3571 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303572 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3573 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3576 wdiConfigBssRsp->ucBSSIdx,
3577 wdiConfigBssRsp->ucSTAIdx))
3578 {
3579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003580 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 VOS_ASSERT(0) ;
3582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3584 {
3585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_ASSERT(0) ;
3588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003589#ifdef WLAN_FEATURE_VOWIFI
3590 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3591#endif
3592 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303593 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3594 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3596 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 return ;
3599}
Jeff Johnson295189b2012-06-20 16:38:30 -07003600/*
3601 * FUNCTION: WDA_UpdateEdcaParamsForAC
3602 * Update WDI EDCA params with PE edca params
3603 */
3604void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3605 WDI_EdcaParamRecord *wdiEdcaParam,
3606 tSirMacEdcaParamRecord *macEdcaParam)
3607{
3608 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3609 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3610 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3611 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3612 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3613 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3614}
Jeff Johnson295189b2012-06-20 16:38:30 -07003615/*
3616 * FUNCTION: WDA_ProcessConfigBssReq
3617 * Configure BSS before starting Assoc with AP
3618 */
3619VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3620 tAddBssParams* configBssReqParam)
3621{
3622 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303623 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003626 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303627 if (NULL == configBssReqParam)
3628 {
3629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3630 "%s: configBssReqParam is NULL", __func__);
3631 return VOS_STATUS_E_INVAL;
3632 }
3633
3634 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3635 sizeof(WDI_ConfigBSSReqParamsType)) ;
3636
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 if(NULL == wdiConfigBssReqParam)
3638 {
3639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_ASSERT(0);
3642 return VOS_STATUS_E_NOMEM;
3643 }
3644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3645 if(NULL == pWdaParams)
3646 {
3647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 VOS_ASSERT(0);
3650 vos_mem_free(wdiConfigBssReqParam);
3651 return VOS_STATUS_E_NOMEM;
3652 }
Kiran4a17ebe2013-01-31 10:43:43 -08003653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3654 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3657 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 /* Store Init Req pointer, as this will be used for response */
3659 /* store Params pass it to WDI */
3660 pWdaParams->pWdaContext = pWDA;
3661 pWdaParams->wdaMsgParam = configBssReqParam;
3662 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003663 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3664 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 if(IS_WDI_STATUS_FAILURE(status))
3666 {
3667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3668 "Failure in Config BSS WDI API, free all the memory " );
3669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3670 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 return CONVERT_WDI2VOS_STATUS(status) ;
3675}
Jeff Johnson295189b2012-06-20 16:38:30 -07003676#ifdef ENABLE_HAL_COMBINED_MESSAGES
3677/*
3678 * FUNCTION: WDA_PostAssocReqCallback
3679 * Post ASSOC req callback, send RSP back to PE
3680 */
3681void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3682 void* pUserData)
3683{
3684 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3685 tPostAssocParams *postAssocReqParam =
3686 (tPostAssocParams *)pWDA->wdaMsgParam ;
3687 /*STA context within the BSS Params*/
3688 tAddStaParams *staPostAssocParam =
3689 &postAssocReqParam->addBssParams.staContext ;
3690 /*STA Params for self STA*/
3691 tAddStaParams *selfStaPostAssocParam =
3692 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003696 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3698 {
3699 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3700 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3701 sizeof(tSirMacAddr)) ;
3702 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3703 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3704 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3706 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303707 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3709 pWDA->wdaWdiApiMsgParam = NULL;
3710 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 return ;
3713}
Jeff Johnson295189b2012-06-20 16:38:30 -07003714/*
3715 * FUNCTION: WDA_ProcessPostAssocReq
3716 * Trigger POST ASSOC processing in WDI
3717 */
3718VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3719 tPostAssocParams *postAssocReqParam)
3720{
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 WDI_Status status = WDI_STATUS_SUCCESS ;
3722
3723 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3724 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3725 sizeof(WDI_PostAssocReqParamsType)) ;
3726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003727 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003728
Jeff Johnson295189b2012-06-20 16:38:30 -07003729 if(NULL == wdiPostAssocReqParam)
3730 {
3731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003733 VOS_ASSERT(0);
3734 return VOS_STATUS_E_NOMEM;
3735 }
3736
3737 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3738 {
3739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003740 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 VOS_ASSERT(0);
3742 return VOS_STATUS_E_FAILURE;
3743 }
3744
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 /* update BSS params into WDI structure */
3746 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3747 &postAssocReqParam->addBssParams) ;
3748 /* update STA params into WDI structure */
3749 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3750 &postAssocReqParam->addStaParams) ;
3751
3752 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3753 postAssocReqParam->addBssParams.highPerformance;
3754 WDA_UpdateEdcaParamsForAC(pWDA,
3755 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3756 &postAssocReqParam->addBssParams.acbe);
3757 WDA_UpdateEdcaParamsForAC(pWDA,
3758 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3759 &postAssocReqParam->addBssParams.acbk);
3760 WDA_UpdateEdcaParamsForAC(pWDA,
3761 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3762 &postAssocReqParam->addBssParams.acvi);
3763 WDA_UpdateEdcaParamsForAC(pWDA,
3764 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3765 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 /* Store Init Req pointer, as this will be used for response */
3767 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 /* store Params pass it to WDI */
3769 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3771 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 if(IS_WDI_STATUS_FAILURE(status))
3773 {
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3775 "Failure in Post Assoc WDI API, free all the memory " );
3776 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3777 pWDA->wdaWdiApiMsgParam = NULL;
3778 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 return CONVERT_WDI2VOS_STATUS(status) ;
3783}
3784#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003785/*
3786 * FUNCTION: WDA_AddStaReqCallback
3787 * ADD STA req callback, send RSP back to PE
3788 */
3789void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3790 void* pUserData)
3791{
3792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3793 tWDA_CbContext *pWDA;
3794 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003796 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 if(NULL == pWdaParams)
3798 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 VOS_ASSERT(0) ;
3801 return ;
3802 }
3803 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3804 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003805 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003806 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3808 {
3809 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3810 /*TODO: UMAC structure doesn't have these fields*/
3811 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3812 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3813 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3814 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3815 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3816 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003817#ifdef FEATURE_WLAN_TDLS
3818 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3819 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3820#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003822#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 {
3824 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3825 wdiConfigStaRsp->ucBssIdx;
3826 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3827 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303828 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3829 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003830 }
3831 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3832 {
3833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003834 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 VOS_ASSERT(0) ;
3836 return ;
3837 }
3838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3840 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003841 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003842 return ;
3843}
Jeff Johnson295189b2012-06-20 16:38:30 -07003844/*
3845 * FUNCTION: WDA_ConfigStaReq
3846 * Trigger Config STA processing in WDI
3847 */
3848VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3849 tAddStaParams *addStaReqParam)
3850{
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3853 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3854 sizeof(WDI_ConfigSTAReqParamsType)) ;
3855 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003857 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 if(NULL == wdiConfigStaReqParam)
3859 {
3860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003861 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003862 VOS_ASSERT(0);
3863 return VOS_STATUS_E_NOMEM;
3864 }
3865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3866 if(NULL == pWdaParams)
3867 {
3868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 VOS_ASSERT(0);
3871 vos_mem_free(wdiConfigStaReqParam);
3872 return VOS_STATUS_E_NOMEM;
3873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 /* update STA params into WDI structure */
3876 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3877 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 /* Store Init Req pointer, as this will be used for response */
3879 /* store Params pass it to WDI */
3880 pWdaParams->pWdaContext = pWDA;
3881 pWdaParams->wdaMsgParam = addStaReqParam;
3882 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3884 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 if(IS_WDI_STATUS_FAILURE(status))
3886 {
3887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3888 "Failure in Config STA WDI API, free all the memory " );
3889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3890 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003891 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 return CONVERT_WDI2VOS_STATUS(status) ;
3895}
Jeff Johnson295189b2012-06-20 16:38:30 -07003896/*
3897 * FUNCTION: WDA_DelBSSReqCallback
3898 * Dens DEL BSS RSP back to PE
3899 */
3900void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3901 void* pUserData)
3902{
3903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3904 tWDA_CbContext *pWDA;
3905 tDeleteBssParams *delBssReqParam;
3906 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003908 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 if(NULL == pWdaParams)
3910 {
3911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003912 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003913 VOS_ASSERT(0) ;
3914 return ;
3915 }
3916 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3917 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003918 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3920 {
3921 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3922 sizeof(tSirMacAddr)) ;
3923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3925 {
3926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003927 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 VOS_ASSERT(0) ;
3929 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3931 {
3932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003933 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 VOS_ASSERT(0) ;
3935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3937 {
3938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003939 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 VOS_ASSERT(0) ;
3941 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303942
3943 WLANTL_StartForwarding(staIdx,0,0);
3944
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3946 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 /* reset the the system role*/
3948 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3949
3950 /* Reset the BA related information */
3951 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3952 {
3953 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3954 {
3955 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3956 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303957 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 /* Reset framesTxed counters here */
3959 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3960 {
3961 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3962 }
3963 }
3964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 return ;
3967}
3968
Jeff Johnson295189b2012-06-20 16:38:30 -07003969/*
3970 * FUNCTION: WDA_ProcessDelBssReq
3971 * Init DEL BSS req with WDI
3972 */
3973VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3974 tDeleteBssParams *delBssParam)
3975{
3976 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3978 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3979 sizeof(WDI_DelBSSReqParamsType)) ;
3980 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003982 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 if(NULL == wdiDelBssReqParam)
3984 {
3985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 VOS_ASSERT(0);
3988 return VOS_STATUS_E_NOMEM;
3989 }
3990 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3991 if(NULL == pWdaParams)
3992 {
3993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 VOS_ASSERT(0);
3996 vos_mem_free(wdiDelBssReqParam);
3997 return VOS_STATUS_E_NOMEM;
3998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4000 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4001
4002 /* Store Init Req pointer, as this will be used for response */
4003 /* store Params pass it to WDI */
4004 pWdaParams->pWdaContext = pWDA;
4005 pWdaParams->wdaMsgParam = delBssParam;
4006 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 status = WDI_DelBSSReq(wdiDelBssReqParam,
4008 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 if(IS_WDI_STATUS_FAILURE(status))
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4012 "Failure in Del BSS WDI API, free all the memory " );
4013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4014 vos_mem_free(pWdaParams) ;
4015 delBssParam->status = eSIR_FAILURE ;
4016 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 return CONVERT_WDI2VOS_STATUS(status) ;
4019}
Jeff Johnson295189b2012-06-20 16:38:30 -07004020/*
4021 * FUNCTION: WDA_DelSTAReqCallback
4022 * Dens DEL STA RSP back to PE
4023 */
4024void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4025 void* pUserData)
4026{
4027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4028 tWDA_CbContext *pWDA;
4029 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004031 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 if(NULL == pWdaParams)
4033 {
4034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004035 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 VOS_ASSERT(0) ;
4037 return ;
4038 }
4039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4040 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004041 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004042 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4043 {
4044 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4045 {
4046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004047 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 VOS_ASSERT(0) ;
4049 }
4050 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304051 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 }
4053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4054 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 /*Reset the BA information corresponding to this STAIdx */
4056 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4057 WDA_INVALID_STA_INDEX;
4058 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304059 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 return ;
4062}
Jeff Johnson295189b2012-06-20 16:38:30 -07004063/*
4064 * FUNCTION: WDA_ProcessDelStaReq
4065 * Init DEL STA req with WDI
4066 */
4067VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4068 tDeleteStaParams *delStaParam)
4069{
4070 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4072 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4073 sizeof(WDI_DelSTAReqParamsType)) ;
4074 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004076 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 if(NULL == wdiDelStaReqParam)
4078 {
4079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 VOS_ASSERT(0);
4082 return VOS_STATUS_E_NOMEM;
4083 }
4084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4085 if(NULL == pWdaParams)
4086 {
4087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 VOS_ASSERT(0);
4090 vos_mem_free(wdiDelStaReqParam);
4091 return VOS_STATUS_E_NOMEM;
4092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4094 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 /* Store Init Req pointer, as this will be used for response */
4096 /* store Params pass it to WDI */
4097 pWdaParams->pWdaContext = pWDA;
4098 pWdaParams->wdaMsgParam = delStaParam;
4099 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 status = WDI_DelSTAReq(wdiDelStaReqParam,
4101 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 if(IS_WDI_STATUS_FAILURE(status))
4103 {
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4105 "Failure in Del STA WDI API, free all the memory status = %d",
4106 status );
4107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4108 vos_mem_free(pWdaParams) ;
4109 delStaParam->status = eSIR_FAILURE ;
4110 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 return CONVERT_WDI2VOS_STATUS(status) ;
4113}
Jeff Johnson295189b2012-06-20 16:38:30 -07004114void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4115{
4116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4117 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304118 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004120 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 if(NULL == pWdaParams)
4122 {
4123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004124 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 VOS_ASSERT(0) ;
4126 return ;
4127 }
4128 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4129 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4131 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4133 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4134 pwdiAddSTASelfRsp->macSelfSta,
4135 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304136 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4137 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4138 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4139 {
4140 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4141 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 return ;
4145}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304146
Jeff Johnson295189b2012-06-20 16:38:30 -07004147/*
4148 * FUNCTION: WDA_ProcessAddStaSelfReq
4149 *
4150 */
4151VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4152{
4153 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004154 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4156 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4157 sizeof(WDI_AddSTASelfReqParamsType)) ;
4158 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004160 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304161 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 if( NULL == wdiAddStaSelfReq )
4163 {
4164 VOS_ASSERT( 0 );
4165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004166 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304167 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4168 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 return( VOS_STATUS_E_NOMEM );
4170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 if( NULL == pWdaParams )
4173 {
4174 VOS_ASSERT( 0 );
4175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004176 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304177 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4178 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 vos_mem_free(wdiAddStaSelfReq) ;
4180 return( VOS_STATUS_E_NOMEM );
4181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004184 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 /* Store Init Req pointer, as this will be used for response */
4186 /* store Params pass it to WDI */
4187 pWdaParams->pWdaContext = pWDA;
4188 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4189 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004190 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004191
Jeff Johnson43971f52012-07-17 12:26:56 -07004192 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 {
4194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4195 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004196 wstatus );
4197 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4199 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304200 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4201 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 pAddStaSelfReq->status = eSIR_FAILURE ;
4203 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4204 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004205 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206}
Jeff Johnson295189b2012-06-20 16:38:30 -07004207/*
4208 * FUNCTION: WDA_DelSTASelfRespCallback
4209 *
4210 */
4211void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4212 wdiDelStaSelfRspParams , void* pUserData)
4213{
4214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4215 tWDA_CbContext *pWDA;
4216 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004218 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 if (NULL == pWdaParams)
4220 {
4221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004222 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 VOS_ASSERT(0);
4224 return;
4225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4227 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004229 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230
4231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4232 vos_mem_free(pWdaParams) ;
4233
4234 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 return ;
4236}
Jeff Johnson295189b2012-06-20 16:38:30 -07004237/*
4238 * FUNCTION: WDA_DelSTASelfReqCallback
4239 *
4240 */
4241void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4242 void* pUserData)
4243{
4244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4245 tWDA_CbContext *pWDA;
4246 tDelStaSelfParams *delStaSelfParams;
4247
4248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304249 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004250 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004251
4252 if (NULL == pWdaParams)
4253 {
4254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004255 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 VOS_ASSERT(0);
4257 return;
4258 }
4259
4260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4261 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4262
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004263 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004264
4265 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4266 {
4267 VOS_ASSERT(0);
4268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4269 vos_mem_free(pWdaParams) ;
4270 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4271 }
4272
4273 return ;
4274}
4275
4276/*
4277 * FUNCTION: WDA_DelSTASelfReq
4278 * Trigger Config STA processing in WDI
4279 */
4280VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4281 tDelStaSelfParams* pDelStaSelfReqParam)
4282{
4283 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004284 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 tWDA_ReqParams *pWdaParams = NULL;
4286 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4287 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4288 sizeof(WDI_DelSTASelfReqParamsType)) ;
4289
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 if( NULL == wdiDelStaSelfReq )
4293 {
4294 VOS_ASSERT( 0 );
4295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004296 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 return( VOS_STATUS_E_NOMEM );
4298 }
4299
4300 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4301 if( NULL == pWdaParams )
4302 {
4303 VOS_ASSERT( 0 );
4304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004305 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 vos_mem_free(wdiDelStaSelfReq) ;
4307 return( VOS_STATUS_E_NOMEM );
4308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 pWdaParams->pWdaContext = pWDA;
4310 /* Store param pointer as passed in by caller */
4311 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4312 /* store Params pass it to WDI */
4313 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4315 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4316
4317 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4318 wdiDelStaSelfReq->pUserData = pWdaParams;
4319
Jeff Johnson43971f52012-07-17 12:26:56 -07004320 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4322
Jeff Johnson43971f52012-07-17 12:26:56 -07004323 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 {
4325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4326 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4327 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004328 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4330 vos_mem_free(pWdaParams) ;
4331 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4332 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4333 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004334 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335}
4336
Jeff Johnson295189b2012-06-20 16:38:30 -07004337/*
4338 * FUNCTION: WDA_SendMsg
4339 * Send Message back to PE
4340 */
4341void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4342 void *pBodyptr, tANI_U32 bodyVal)
4343{
4344 tSirMsgQ msg = {0} ;
4345 tANI_U32 status = VOS_STATUS_SUCCESS ;
4346 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 msg.type = msgType;
4348 msg.bodyval = bodyVal;
4349 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 if (VOS_STATUS_SUCCESS != status)
4352 {
4353 if(NULL != pBodyptr)
4354 {
4355 vos_mem_free(pBodyptr);
4356 }
4357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004358 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 VOS_ASSERT(0) ;
4360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 return ;
4362}
Jeff Johnson295189b2012-06-20 16:38:30 -07004363/*
4364 * FUNCTION: WDA_UpdateBSSParams
4365 * Translated WDA/PE BSS info into WDI BSS info..
4366 */
4367void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4368 WDI_ConfigBSSReqInfoType *wdiBssParams,
4369 tAddBssParams *wdaBssParams)
4370{
4371 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304372 v_U8_t i = 0;
4373
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 /* copy bssReq Params to WDI structure */
4375 vos_mem_copy(wdiBssParams->macBSSID,
4376 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4377 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4378 sizeof(tSirMacAddr)) ;
4379 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4380 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4381 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 wdiBssParams->ucShortSlotTimeSupported =
4383 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4385 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4386 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4387 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4388 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4389
4390 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4391 wdiBssParams->ucTXOPProtectionFullSupport =
4392 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4394 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4397 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4398 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4399 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4400
Chet Lanctot186b5732013-03-18 10:26:30 -07004401 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4402
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 /* copy SSID into WDI structure */
4404 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4405 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4406 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004407 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4408 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410#ifdef WLAN_FEATURE_VOWIFI
4411 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4412#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004413 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415#ifdef WLAN_FEATURE_VOWIFI_11R
4416 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004417 if(wdiBssParams->bExtSetStaKeyParamValid)
4418 {
4419 /* copy set STA key params to WDI structure */
4420 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4421 wdaBssParams->extSetStaKeyParam.staIdx;
4422 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4423 wdaBssParams->extSetStaKeyParam.encType;
4424 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4425 wdaBssParams->extSetStaKeyParam.wepType;
4426 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4427 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4429 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004430 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004431 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4432 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4433 {
4434 WDA_GetWepKeysFromCfg( pWDA,
4435 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4436 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4437 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4438 }
4439 else
4440 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4442 keyIndex++)
4443 {
4444 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4445 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4446 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4447 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4448 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4449 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304450
4451 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4452 {
4453 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4454 {
4455 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4456 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4457 }
4458
4459 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4460 {
4461 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4462 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4463 }
4464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4465 FL("%s: Negated Keys"), __func__);
4466 }
4467 else
4468 {
4469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4470 FL("%s: No change in Keys "), __func__);
4471 vos_mem_copy(
4472 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4473 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4474 WLAN_MAX_KEY_RSC_LEN);
4475 vos_mem_copy(
4476 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4477 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4478 SIR_MAC_MAX_KEY_LENGTH);
4479 }
4480
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4482 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4483 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4484 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304486 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 }
4489 }
4490 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4491 }
4492 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4493 {
4494 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4495 sizeof(wdaBssParams->extSetStaKeyParam) );
4496 }
4497#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004498#ifdef WLAN_FEATURE_11AC
4499 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4500 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4501#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004502
4503 return ;
4504}
Jeff Johnson295189b2012-06-20 16:38:30 -07004505/*
4506 * FUNCTION: WDA_UpdateSTAParams
4507 * Translated WDA/PE BSS info into WDI BSS info..
4508 */
4509void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4510 WDI_ConfigStaReqInfoType *wdiStaParams,
4511 tAddStaParams *wdaStaParams)
4512{
4513 tANI_U8 i = 0;
4514 /* Update STA params */
4515 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4516 sizeof(tSirMacAddr)) ;
4517 wdiStaParams->usAssocId = wdaStaParams->assocId;
4518 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004519 wdiStaParams->staIdx = wdaStaParams->staIdx;
4520
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 wdiStaParams->ucShortPreambleSupported =
4522 wdaStaParams->shortPreambleSupported;
4523 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4524 sizeof(tSirMacAddr)) ;
4525 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4526
4527 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4528
4529 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4530 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4531 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4532 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4533 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4534 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4535 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4536
4537 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4538 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 wdiStaParams->wdiSupportedRates.opRateMode =
4540 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4542 {
4543 wdiStaParams->wdiSupportedRates.llbRates[i] =
4544 wdaStaParams->supportedRates.llbRates[i];
4545 }
4546 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4547 {
4548 wdiStaParams->wdiSupportedRates.llaRates[i] =
4549 wdaStaParams->supportedRates.llaRates[i];
4550 }
4551 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4552 {
4553 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4554 wdaStaParams->supportedRates.aniLegacyRates[i];
4555 }
4556 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4557 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004558#ifdef WLAN_FEATURE_11AC
4559 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4560 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4561 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4562 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4563#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4565 {
4566 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4567 wdaStaParams->supportedRates.supportedMCSSet[i];
4568 }
4569 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4570 wdaStaParams->supportedRates.rxHighestDataRate;
4571
4572 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4573
4574 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4575
4576 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4577 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4578 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4579
4580 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4581 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4582 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4583 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004585#ifdef WLAN_FEATURE_11AC
4586 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4587 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004588 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304589 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4590 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4591 * must be set by default */
4592 if ( wdiStaParams->vhtTxMUBformeeCapable )
4593 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004594#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004595 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4596 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004597 return ;
4598}
Jeff Johnson295189b2012-06-20 16:38:30 -07004599/*
4600 * -------------------------------------------------------------------------
4601 * CFG update to WDI
4602 * -------------------------------------------------------------------------
4603 */
4604
4605 /*
4606 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4607 * Convert the WNI CFG ID to HAL CFG ID
4608 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004609static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004610{
4611 switch(wniCfgId)
4612 {
4613 case WNI_CFG_STA_ID:
4614 return QWLAN_HAL_CFG_STA_ID;
4615 case WNI_CFG_CURRENT_TX_ANTENNA:
4616 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4617 case WNI_CFG_CURRENT_RX_ANTENNA:
4618 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4619 case WNI_CFG_LOW_GAIN_OVERRIDE:
4620 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4621 case WNI_CFG_POWER_STATE_PER_CHAIN:
4622 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4623 case WNI_CFG_CAL_PERIOD:
4624 return QWLAN_HAL_CFG_CAL_PERIOD;
4625 case WNI_CFG_CAL_CONTROL:
4626 return QWLAN_HAL_CFG_CAL_CONTROL;
4627 case WNI_CFG_PROXIMITY:
4628 return QWLAN_HAL_CFG_PROXIMITY;
4629 case WNI_CFG_NETWORK_DENSITY:
4630 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4631 case WNI_CFG_MAX_MEDIUM_TIME:
4632 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4633 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4634 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4635 case WNI_CFG_RTS_THRESHOLD:
4636 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4637 case WNI_CFG_SHORT_RETRY_LIMIT:
4638 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4639 case WNI_CFG_LONG_RETRY_LIMIT:
4640 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4641 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4642 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4643 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4644 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4645 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4646 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4647 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4648 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4649 case WNI_CFG_FIXED_RATE:
4650 return QWLAN_HAL_CFG_FIXED_RATE;
4651 case WNI_CFG_RETRYRATE_POLICY:
4652 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4653 case WNI_CFG_RETRYRATE_SECONDARY:
4654 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4655 case WNI_CFG_RETRYRATE_TERTIARY:
4656 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4657 case WNI_CFG_FORCE_POLICY_PROTECTION:
4658 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4659 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4660 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4661 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4662 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4663 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4664 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4665 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4666 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4667 case WNI_CFG_MAX_BA_SESSIONS:
4668 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4669 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4670 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4671 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4672 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4673 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4674 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4675 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4676 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4677 case WNI_CFG_STATS_PERIOD:
4678 return QWLAN_HAL_CFG_STATS_PERIOD;
4679 case WNI_CFG_CFP_MAX_DURATION:
4680 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4681#if 0 /*This is not part of CFG*/
4682 case WNI_CFG_FRAME_TRANS_ENABLED:
4683 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4684#endif
4685 case WNI_CFG_DTIM_PERIOD:
4686 return QWLAN_HAL_CFG_DTIM_PERIOD;
4687 case WNI_CFG_EDCA_WME_ACBK:
4688 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4689 case WNI_CFG_EDCA_WME_ACBE:
4690 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4691 case WNI_CFG_EDCA_WME_ACVI:
4692 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4693 case WNI_CFG_EDCA_WME_ACVO:
4694 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4695#if 0
4696 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4697 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4698 case WNI_CFG_TELE_BCN_TRANS_LI:
4699 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4700 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4701 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4702 case WNI_CFG_TELE_BCN_MAX_LI:
4703 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4704 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4705 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4706#endif
4707 case WNI_CFG_ENABLE_CLOSE_LOOP:
4708 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004709 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4710 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 default:
4712 {
4713 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004714 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 wniCfgId);
4716 return VOS_STATUS_E_INVAL;
4717 }
4718 }
4719}
Jeff Johnson295189b2012-06-20 16:38:30 -07004720/*
4721 * FUNCTION: WDA_UpdateCfgCallback
4722 *
4723 */
4724void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4725{
4726 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4727 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4728 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 /*
4732 * currently there is no response message is expected between PE and
4733 * WDA, Failure return from WDI is a ASSERT condition
4734 */
4735 if(WDI_STATUS_SUCCESS != wdiStatus)
4736 {
4737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004738 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4740 }
4741
4742 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4743 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4744 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004745 return ;
4746}
Jeff Johnson295189b2012-06-20 16:38:30 -07004747/*
4748 * FUNCTION: WDA_UpdateCfg
4749 *
4750 */
4751VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4752{
4753
4754 WDI_Status status = WDI_STATUS_SUCCESS ;
4755 tANI_U32 val =0;
4756 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4757 tHalCfg *configData;
4758 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4759 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004761 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 if (NULL == pMac )
4763 {
4764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004765 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 return VOS_STATUS_E_FAILURE;
4767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 if(WDA_START_STATE != pWDA->wdaState)
4769 {
4770 return VOS_STATUS_E_FAILURE;
4771 }
4772
4773 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4774 {
4775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004776 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 VOS_ASSERT(0);
4778 return VOS_STATUS_E_FAILURE;
4779 }
4780
4781 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4782 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 if(NULL == wdiCfgReqParam)
4784 {
4785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004787 VOS_ASSERT(0);
4788 return VOS_STATUS_E_NOMEM;
4789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4791 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 if(NULL == wdiCfgReqParam->pConfigBuffer)
4793 {
4794 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 vos_mem_free(wdiCfgReqParam);
4797 VOS_ASSERT(0);
4798 return VOS_STATUS_E_NOMEM;
4799 }
4800
4801 /*convert the WNI CFG Id to HAL CFG Id*/
4802 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4803 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4804
4805 /*TODO: revisit this for handling string parameters */
4806 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4807 &val) != eSIR_SUCCESS)
4808 {
4809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004810 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4812 vos_mem_free(wdiCfgReqParam);
4813 return eSIR_FAILURE;
4814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004815 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4816 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4817 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4818 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4819 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4820
4821 /* store Params pass it to WDI */
4822 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004823#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4824 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4825 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 if(IS_WDI_STATUS_FAILURE(status))
4827 {
4828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4829 "Failure in Update CFG WDI API, free all the memory " );
4830 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4831 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4832 pWDA->wdaWdiCfgApiMsgParam = NULL;
4833 /* Failure is not expected */
4834 VOS_ASSERT(0) ;
4835 }
4836#else
4837 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4838 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4839 pWDA->wdaWdiCfgApiMsgParam = NULL;
4840#endif
4841 return CONVERT_WDI2VOS_STATUS(status) ;
4842}
4843
Jeff Johnson295189b2012-06-20 16:38:30 -07004844VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4845 v_U8_t *pDefaultKeyId,
4846 v_U8_t *pNumKeys,
4847 WDI_KeysType *pWdiKeys )
4848{
4849 v_U32_t i, j, defKeyId = 0;
4850 v_U32_t val = SIR_MAC_KEY_LENGTH;
4851 VOS_STATUS status = WDI_STATUS_SUCCESS;
4852 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if (NULL == pMac )
4854 {
4855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004856 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 return VOS_STATUS_E_FAILURE;
4858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4860 &defKeyId ))
4861 {
4862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4863 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4864 }
4865
4866 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 /* Need to extract ALL of the configured WEP Keys */
4868 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4869 {
4870 val = SIR_MAC_KEY_LENGTH;
4871 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4872 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4873 pWdiKeys[j].key,
4874 &val ))
4875 {
4876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004877 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 }
4879 else
4880 {
4881 pWdiKeys[j].keyId = (tANI_U8) i;
4882 /*
4883 * Actually, a DC (Don't Care) because
4884 * this is determined (and set) by PE/MLME
4885 */
4886 pWdiKeys[j].unicast = 0;
4887 /*
4888 * Another DC (Don't Care)
4889 */
4890 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4891 /* Another DC (Don't Care). Unused for WEP */
4892 pWdiKeys[j].paeRole = 0;
4893 /* Determined from wlan_cfgGetStr() above.*/
4894 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004895 j++;
4896 *pNumKeys = (tANI_U8) j;
4897 }
4898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 return status;
4900}
Jeff Johnson295189b2012-06-20 16:38:30 -07004901/*
4902 * FUNCTION: WDA_SetBssKeyReqCallback
4903 * send SET BSS key RSP back to PE
4904 */
4905void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4906{
4907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4908 tWDA_CbContext *pWDA;
4909 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004911 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 if(NULL == pWdaParams)
4913 {
4914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004915 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 VOS_ASSERT(0) ;
4917 return ;
4918 }
4919 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4920 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304921 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4922 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4924 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004925 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 return ;
4928}
Jeff Johnson295189b2012-06-20 16:38:30 -07004929/*
4930 * FUNCTION: WDA_ProcessSetBssKeyReq
4931 * Request to WDI for programming the BSS key( key for
4932 * broadcast/multicast frames Encryption)
4933 */
4934VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4935 tSetBssKeyParams *setBssKeyParams )
4936{
4937 WDI_Status status = WDI_STATUS_SUCCESS ;
4938 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4939 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4940 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4941 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004944 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 if(NULL == wdiSetBssKeyParam)
4946 {
4947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004948 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 VOS_ASSERT(0);
4950 return VOS_STATUS_E_NOMEM;
4951 }
4952 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4953 if(NULL == pWdaParams)
4954 {
4955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004956 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 VOS_ASSERT(0);
4958 vos_mem_free(wdiSetBssKeyParam);
4959 return VOS_STATUS_E_NOMEM;
4960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 /* copy set BSS params to WDI structure */
4963 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4964 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4965 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 if(setBssKeyParams->encType != eSIR_ED_NONE)
4967 {
4968 if( setBssKeyParams->numKeys == 0 &&
4969 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4970 setBssKeyParams->encType == eSIR_ED_WEP104))
4971 {
4972 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4974 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4975 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4976 }
4977 else
4978 {
4979 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4980 {
4981 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4982 setBssKeyParams->key[keyIndex].keyId;
4983 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4984 setBssKeyParams->key[keyIndex].unicast;
4985 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4986 setBssKeyParams->key[keyIndex].keyDirection;
4987 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4988 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4989 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4990 setBssKeyParams->key[keyIndex].paeRole;
4991 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4992 setBssKeyParams->key[keyIndex].keyLength;
4993 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4994 setBssKeyParams->key[keyIndex].key,
4995 SIR_MAC_MAX_KEY_LENGTH);
4996 }
4997 }
4998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5000 setBssKeyParams->singleTidRc;
5001 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005002 /* Store set key pointer, as this will be used for response */
5003 /* store Params pass it to WDI */
5004 pWdaParams->pWdaContext = pWDA;
5005 pWdaParams->wdaMsgParam = setBssKeyParams;
5006 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5008 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5009
5010 if(IS_WDI_STATUS_FAILURE(status))
5011 {
5012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5013 "Failure in Set BSS Key Req WDI API, free all the memory " );
5014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5015 vos_mem_free(pWdaParams) ;
5016 setBssKeyParams->status = eSIR_FAILURE ;
5017 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 return CONVERT_WDI2VOS_STATUS(status) ;
5020}
Jeff Johnson295189b2012-06-20 16:38:30 -07005021/*
5022 * FUNCTION: WDA_RemoveBssKeyReqCallback
5023 * send SET BSS key RSP back to PE
5024 */
5025void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5026{
5027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5028 tWDA_CbContext *pWDA;
5029 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005031 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 if(NULL == pWdaParams)
5033 {
5034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005035 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005036 VOS_ASSERT(0) ;
5037 return ;
5038 }
5039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5040 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5042 vos_mem_free(pWdaParams) ;
5043
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005044 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 return ;
5047}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305048
5049/*
5050 * FUNCTION: WDA_SpoofMacAddrRspCallback
5051 * recieves spoof mac addr response from FW
5052 */
5053void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5054{
5055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5056 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305057
Siddharth Bhal171788a2014-09-29 21:02:40 +05305058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5059 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305060
Siddharth Bhal171788a2014-09-29 21:02:40 +05305061 if(NULL == pWdaParams)
5062 {
5063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5064 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305065 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305066 return ;
5067 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305068 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305069
Siddharth Bhal029d6732014-10-09 21:31:23 +05305070 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305072 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305073 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305074 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5075 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305076
Siddharth Bhal171788a2014-09-29 21:02:40 +05305077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305078 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305079 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305080
5081 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305082}
5083
Jeff Johnson295189b2012-06-20 16:38:30 -07005084/*
5085 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5086 * Request to WDI to remove the BSS key( key for broadcast/multicast
5087 * frames Encryption)
5088 */
5089VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5090 tRemoveBssKeyParams *removeBssKeyParams )
5091{
5092 WDI_Status status = WDI_STATUS_SUCCESS ;
5093 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5094 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5095 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5096 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 if(NULL == wdiRemoveBssKeyParam)
5100 {
5101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005103 VOS_ASSERT(0);
5104 return VOS_STATUS_E_NOMEM;
5105 }
5106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5107 if(NULL == pWdaParams)
5108 {
5109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 VOS_ASSERT(0);
5112 vos_mem_free(wdiRemoveBssKeyParam);
5113 return VOS_STATUS_E_NOMEM;
5114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 /* copy Remove BSS key params to WDI structure*/
5116 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5117 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5118 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5119 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5120 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 /* Store remove key pointer, as this will be used for response */
5122 /* store Params pass it to WDI */
5123 pWdaParams->pWdaContext = pWDA;
5124 pWdaParams->wdaMsgParam = removeBssKeyParams;
5125 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5127 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 if(IS_WDI_STATUS_FAILURE(status))
5129 {
5130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5131 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5133 vos_mem_free(pWdaParams) ;
5134 removeBssKeyParams->status = eSIR_FAILURE ;
5135 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 return CONVERT_WDI2VOS_STATUS(status) ;
5138}
Jeff Johnson295189b2012-06-20 16:38:30 -07005139/*
5140 * FUNCTION: WDA_SetBssKeyReqCallback
5141 * send SET BSS key RSP back to PE
5142 */
5143void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5144{
5145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5146 tWDA_CbContext *pWDA;
5147 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005149 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 if(NULL == pWdaParams)
5151 {
5152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005153 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 VOS_ASSERT(0) ;
5155 return ;
5156 }
5157 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5158 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305159 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5160 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5162 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005163 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 return ;
5166}
Jeff Johnson295189b2012-06-20 16:38:30 -07005167/*
5168 * FUNCTION: WDA_ProcessSetStaKeyReq
5169 * Request to WDI for programming the STA key( key for Unicast frames
5170 * Encryption)
5171 */
5172VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5173 tSetStaKeyParams *setStaKeyParams )
5174{
5175 WDI_Status status = WDI_STATUS_SUCCESS ;
5176 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5177 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5178 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5179 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005182 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 if(NULL == wdiSetStaKeyParam)
5184 {
5185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 VOS_ASSERT(0);
5188 return VOS_STATUS_E_NOMEM;
5189 }
5190 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5191 if(NULL == pWdaParams)
5192 {
5193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005195 VOS_ASSERT(0);
5196 vos_mem_free(wdiSetStaKeyParam);
5197 return VOS_STATUS_E_NOMEM;
5198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 /* copy set STA key params to WDI structure */
5202 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5203 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5204 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5205 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 if(setStaKeyParams->encType != eSIR_ED_NONE)
5207 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005208 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5210 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5211 {
5212 WDA_GetWepKeysFromCfg( pWDA,
5213 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5214 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5215 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5216 }
5217 else
5218 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5220 keyIndex++)
5221 {
5222 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5223 setStaKeyParams->key[keyIndex].keyId;
5224 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5225 setStaKeyParams->key[keyIndex].unicast;
5226 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5227 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5229 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5230 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5231 setStaKeyParams->key[keyIndex].paeRole;
5232 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5233 setStaKeyParams->key[keyIndex].keyLength;
5234 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5235 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5236 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5237 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5238 {
5239 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5240 }
5241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5243 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 }
5245 }
5246 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5247 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 /* Store set key pointer, as this will be used for response */
5249 /* store Params pass it to WDI */
5250 pWdaParams->pWdaContext = pWDA;
5251 pWdaParams->wdaMsgParam = setStaKeyParams;
5252 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005253 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5254 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 if(IS_WDI_STATUS_FAILURE(status))
5256 {
5257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5258 "Failure in set STA Key Req WDI API, free all the memory " );
5259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5260 vos_mem_free(pWdaParams) ;
5261 setStaKeyParams->status = eSIR_FAILURE ;
5262 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 return CONVERT_WDI2VOS_STATUS(status) ;
5265}
Jeff Johnson295189b2012-06-20 16:38:30 -07005266/*
5267 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5268 * send SET Bcast STA key RSP back to PE
5269 */
5270void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5271{
5272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5273 tWDA_CbContext *pWDA;
5274 tSetStaKeyParams *setStaKeyParams;
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 == pWdaParams)
5278 {
5279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005280 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 VOS_ASSERT(0) ;
5282 return ;
5283 }
5284 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5285 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5287 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005288 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005290 return ;
5291}
5292
Jeff Johnson295189b2012-06-20 16:38:30 -07005293/*
5294 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5295 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5296 * Encryption)
5297 */
5298VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5299 tSetStaKeyParams *setStaKeyParams )
5300{
5301 WDI_Status status = WDI_STATUS_SUCCESS ;
5302 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5303 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5304 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005308 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 if(NULL == wdiSetStaKeyParam)
5310 {
5311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005312 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 VOS_ASSERT(0);
5314 return VOS_STATUS_E_NOMEM;
5315 }
5316 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5317 if(NULL == pWdaParams)
5318 {
5319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005320 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005321 VOS_ASSERT(0);
5322 vos_mem_free(wdiSetStaKeyParam);
5323 return VOS_STATUS_E_NOMEM;
5324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 /* copy set STA key params to WDI structure */
5328 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5329 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5330 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5331 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 if(setStaKeyParams->encType != eSIR_ED_NONE)
5333 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5335 keyIndex++)
5336 {
5337 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5338 setStaKeyParams->key[keyIndex].keyId;
5339 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5340 setStaKeyParams->key[keyIndex].unicast;
5341 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5342 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5344 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5345 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5346 setStaKeyParams->key[keyIndex].paeRole;
5347 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5348 setStaKeyParams->key[keyIndex].keyLength;
5349 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5350 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005352 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5353 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 }
5355 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 /* Store set key pointer, as this will be used for response */
5357 /* store Params pass it to WDI */
5358 pWdaParams->pWdaContext = pWDA;
5359 pWdaParams->wdaMsgParam = setStaKeyParams;
5360 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5362 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 if(IS_WDI_STATUS_FAILURE(status))
5364 {
5365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5366 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5368 vos_mem_free(pWdaParams) ;
5369 setStaKeyParams->status = eSIR_FAILURE ;
5370 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 return CONVERT_WDI2VOS_STATUS(status) ;
5373}
Jeff Johnson295189b2012-06-20 16:38:30 -07005374/*
5375 * FUNCTION: WDA_RemoveStaKeyReqCallback
5376 * send SET BSS key RSP back to PE
5377 */
5378void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5379{
5380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5381 tWDA_CbContext *pWDA;
5382 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005384 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 if(NULL == pWdaParams)
5386 {
5387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005388 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 VOS_ASSERT(0) ;
5390 return ;
5391 }
5392 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5393 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5395 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005396 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005398 return ;
5399}
5400
Jeff Johnson295189b2012-06-20 16:38:30 -07005401/*
5402 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5403 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5404 */
5405VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5406 tRemoveStaKeyParams *removeStaKeyParams )
5407{
5408 WDI_Status status = WDI_STATUS_SUCCESS ;
5409 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5410 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5411 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5412 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005414 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 if(NULL == wdiRemoveStaKeyParam)
5416 {
5417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 VOS_ASSERT(0);
5420 return VOS_STATUS_E_NOMEM;
5421 }
5422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5423 if(NULL == pWdaParams)
5424 {
5425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 VOS_ASSERT(0);
5428 vos_mem_free(wdiRemoveStaKeyParam);
5429 return VOS_STATUS_E_NOMEM;
5430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 /* copy remove STA key params to WDI structure*/
5432 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5433 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5434 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5435 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5436 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 /* Store remove key pointer, as this will be used for response */
5438 /* store Params pass it to WDI */
5439 pWdaParams->pWdaContext = pWDA;
5440 pWdaParams->wdaMsgParam = removeStaKeyParams;
5441 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5443 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 if(IS_WDI_STATUS_FAILURE(status))
5445 {
5446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5447 "Failure in remove STA Key Req WDI API, free all the memory " );
5448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5449 vos_mem_free(pWdaParams) ;
5450 removeStaKeyParams->status = eSIR_FAILURE ;
5451 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 return CONVERT_WDI2VOS_STATUS(status) ;
5454}
Jeff Johnson295189b2012-06-20 16:38:30 -07005455/*
5456 * FUNCTION: WDA_IsHandleSetLinkStateReq
5457 * Update the WDA state and return the status to handle this message or not
5458 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005459WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5460 tWDA_CbContext *pWDA,
5461 tLinkStateParams *linkStateParams)
5462{
5463 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 switch(linkStateParams->state)
5465 {
5466 case eSIR_LINK_PREASSOC_STATE:
5467 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5468 /*
5469 * set the WDA state to PRE ASSOC
5470 * copy the BSSID into pWDA to use it in join request and return,
5471 * No need to handle these messages.
5472 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005473 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5474 {
5475 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005477 }
5478 else
5479 {
5480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005481 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005482 VOS_ASSERT(0);
5483 }
5484
5485 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5486 {
5487 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005489 }
5490 else
5491 {
5492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005493 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005494 VOS_ASSERT(0);
5495 }
5496
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5498 *channel and after ) so reset the WDA state to ready when the second
5499 * time UMAC issue the link state with PREASSOC
5500 */
5501 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5502 {
5503 /* RESET WDA state back to WDA_READY_STATE */
5504 pWDA->wdaState = WDA_READY_STATE;
5505 }
5506 else
5507 {
5508 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5509 }
5510 //populate linkState info in WDACbCtxt
5511 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 default:
5514 if(pWDA->wdaState != WDA_READY_STATE)
5515 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005516 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5517 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5518 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5519 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5520 *the ASSERT in WDA_Stop during module unload.*/
5521 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5522 {
5523 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005524 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005525 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005526 else
5527 {
5528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005529 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005530 status = WDA_IGNORE_SET_LINK_STATE;
5531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 }
5533 break;
5534 }
5535
5536 return status;
5537}
Jeff Johnson295189b2012-06-20 16:38:30 -07005538/*
5539 * FUNCTION: WDA_SetLinkStateCallback
5540 * call back function for set link state from WDI
5541 */
5542void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5543{
5544 tWDA_CbContext *pWDA;
5545 tLinkStateParams *linkStateParams;
5546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005548 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 if(NULL == pWdaParams)
5550 {
5551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005552 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 VOS_ASSERT(0) ;
5554 return ;
5555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005556 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 /*
5559 * In STA mode start the BA activity check timer after association
5560 * and in AP mode start BA activity check timer after BSS start */
5561 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5562 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005563 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5564 ((status == WDI_STATUS_SUCCESS) &&
5565 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 {
5567 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5568 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005570 /*
5571 * No respone required for WDA_SET_LINK_STATE so free the request
5572 * param here
5573 */
5574 if( pWdaParams != NULL )
5575 {
5576 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5577 {
5578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5579 }
5580 vos_mem_free(pWdaParams);
5581 }
5582 return ;
5583}
Jeff Johnson295189b2012-06-20 16:38:30 -07005584/*
5585 * FUNCTION: WDA_ProcessSetLinkState
5586 * Request to WDI to set the link status.
5587 */
5588VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5589 tLinkStateParams *linkStateParams)
5590{
5591 WDI_Status status = WDI_STATUS_SUCCESS ;
5592 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5593 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5594 sizeof(WDI_SetLinkReqParamsType)) ;
5595 tWDA_ReqParams *pWdaParams ;
5596 tpAniSirGlobal pMac;
5597 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5598
5599 if(NULL == pMac)
5600 {
5601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005602 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005604 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 return VOS_STATUS_E_FAILURE;
5606 }
5607
5608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005609 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 if(NULL == wdiSetLinkStateParam)
5611 {
5612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 VOS_ASSERT(0);
5615 return VOS_STATUS_E_NOMEM;
5616 }
5617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5618 if(NULL == pWdaParams)
5619 {
5620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 VOS_ASSERT(0);
5623 vos_mem_free(wdiSetLinkStateParam);
5624 return VOS_STATUS_E_NOMEM;
5625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 if(WDA_IGNORE_SET_LINK_STATE ==
5627 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5628 {
5629 status = WDI_STATUS_E_FAILURE;
5630 }
5631 else
5632 {
5633 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5634 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5636 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5638 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 pWdaParams->pWdaContext = pWDA;
5640 /* Store remove key pointer, as this will be used for response */
5641 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005642 /* store Params pass it to WDI */
5643 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5644 /* Stop Timer only other than GO role and concurrent session */
5645 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005646 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5648 {
5649 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5652 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 if(IS_WDI_STATUS_FAILURE(status))
5654 {
5655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5656 "Failure in set link state Req WDI API, free all the memory " );
5657 }
5658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 if(IS_WDI_STATUS_FAILURE(status))
5660 {
5661 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005662 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 vos_mem_free(pWdaParams);
5664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 return CONVERT_WDI2VOS_STATUS(status) ;
5666}
Jeff Johnson295189b2012-06-20 16:38:30 -07005667/*
5668 * FUNCTION: WDA_GetStatsReqParamsCallback
5669 * send the response to PE with Stats received from WDI
5670 */
5671void WDA_GetStatsReqParamsCallback(
5672 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5673 void* pUserData)
5674{
5675 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5676 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5677
5678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005679 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 pGetPEStatsRspParams =
5681 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5682 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5683
5684 if(NULL == pGetPEStatsRspParams)
5685 {
5686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 VOS_ASSERT(0);
5689 return;
5690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5692 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5693 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5694 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005695
5696 //Fill the Session Id Properly in PE
5697 pGetPEStatsRspParams->sessionId = 0;
5698 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005699 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5701 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 vos_mem_copy( pGetPEStatsRspParams + 1,
5703 wdiGetStatsRsp + 1,
5704 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 /* send response to UMAC*/
5706 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5707
5708 return;
5709}
5710
Jeff Johnson295189b2012-06-20 16:38:30 -07005711/*
5712 * FUNCTION: WDA_ProcessGetStatsReq
5713 * Request to WDI to get the statistics
5714 */
5715VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5716 tAniGetPEStatsReq *pGetStatsParams)
5717{
5718 WDI_Status status = WDI_STATUS_SUCCESS ;
5719 WDI_GetStatsReqParamsType wdiGetStatsParam;
5720 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005722 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5724 pGetStatsParams->staId;
5725 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5726 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005727 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 status = WDI_GetStatsReq(&wdiGetStatsParam,
5729 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 if(IS_WDI_STATUS_FAILURE(status))
5731 {
5732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5733 "Failure in Get Stats Req WDI API, free all the memory " );
5734 pGetPEStatsRspParams =
5735 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5736 if(NULL == pGetPEStatsRspParams)
5737 {
5738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005741 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 return VOS_STATUS_E_NOMEM;
5743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5745 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5746 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5747 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5748 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5749 (void *)pGetPEStatsRspParams, 0) ;
5750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 /* Free the request message */
5752 vos_mem_free(pGetStatsParams);
5753 return CONVERT_WDI2VOS_STATUS(status);
5754}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005755
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005756#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005757/*
5758 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5759 * send the response to PE with roam Rssi received from WDI
5760 */
5761void WDA_GetRoamRssiReqParamsCallback(
5762 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5763 void* pUserData)
5764{
5765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5766 tWDA_CbContext *pWDA = NULL;
5767 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5768 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5770 "<------ %s " ,__func__);
5771 if(NULL == pWdaParams)
5772 {
5773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5774 "%s: pWdaParams received NULL", __func__);
5775 VOS_ASSERT(0) ;
5776 return ;
5777 }
5778 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5779 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5780
5781 if(NULL == pGetRoamRssiReqParams)
5782 {
5783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5784 "%s: pGetRoamRssiReqParams received NULL", __func__);
5785 VOS_ASSERT(0);
5786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5787 vos_mem_free(pWdaParams);
5788 return ;
5789 }
5790 pGetRoamRssiRspParams =
5791 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5792
5793 if(NULL == pGetRoamRssiRspParams)
5794 {
5795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5796 "%s: VOS MEM Alloc Failure", __func__);
5797 VOS_ASSERT(0);
5798 return;
5799 }
5800 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5801 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005802 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005803 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5804 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5805
5806 /* Assign get roam rssi req (backup) in to the response */
5807 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5808
5809 /* free WDI command buffer */
5810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5811 vos_mem_free(pWdaParams) ;
5812
5813 /* send response to UMAC*/
5814 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5815
5816 return;
5817}
5818
5819
5820
5821/*
5822 * FUNCTION: WDA_ProcessGetRoamRssiReq
5823 * Request to WDI to get the statistics
5824 */
5825VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5826 tAniGetRssiReq *pGetRoamRssiParams)
5827{
5828 WDI_Status status = WDI_STATUS_SUCCESS ;
5829 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5830 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5831 tWDA_ReqParams *pWdaParams = NULL;
5832
5833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5834 "------> %s " ,__func__);
5835 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5836 pGetRoamRssiParams->staId;
5837 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5838
5839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5840 if(NULL == pWdaParams)
5841 {
5842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5843 "%s: VOS MEM Alloc Failure", __func__);
5844 VOS_ASSERT(0);
5845 return VOS_STATUS_E_NOMEM;
5846 }
5847
5848 /* Store Init Req pointer, as this will be used for response */
5849 pWdaParams->pWdaContext = pWDA;
5850
5851 /* Take Get roam Rssi req backup as it stores the callback to be called after
5852 receiving the response */
5853 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5854 pWdaParams->wdaWdiApiMsgParam = NULL;
5855
5856 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5857 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5858 if(IS_WDI_STATUS_FAILURE(status))
5859 {
5860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5861 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5862 pGetRoamRssiRspParams =
5863 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5864 if(NULL == pGetRoamRssiRspParams)
5865 {
5866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5867 "%s: VOS MEM Alloc Failure", __func__);
5868 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305869 vos_mem_free(pGetRoamRssiParams);
5870 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005871 return VOS_STATUS_E_NOMEM;
5872 }
5873 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5874 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5875 pGetRoamRssiRspParams->rssi = 0;
5876 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5877 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5878 (void *)pGetRoamRssiRspParams, 0) ;
5879 }
5880 return CONVERT_WDI2VOS_STATUS(status);
5881}
5882#endif
5883
5884
Jeff Johnson295189b2012-06-20 16:38:30 -07005885/*
5886 * FUNCTION: WDA_UpdateEDCAParamCallback
5887 * call back function for Update EDCA params from WDI
5888 */
5889void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5890{
5891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5892 tEdcaParams *pEdcaParams;
5893
5894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 if(NULL == pWdaParams)
5897 {
5898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005899 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 VOS_ASSERT(0) ;
5901 return ;
5902 }
5903 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5905 vos_mem_free(pWdaParams);
5906 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 return ;
5908}
Jeff Johnson295189b2012-06-20 16:38:30 -07005909/*
5910 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5911 * Request to WDI to Update the EDCA params.
5912 */
5913VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5914 tEdcaParams *pEdcaParams)
5915{
5916 WDI_Status status = WDI_STATUS_SUCCESS ;
5917 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5918 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5919 sizeof(WDI_UpdateEDCAParamsType)) ;
5920 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005922 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 if(NULL == wdiEdcaParam)
5924 {
5925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005926 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005928 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 return VOS_STATUS_E_NOMEM;
5930 }
5931 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5932 if(NULL == pWdaParams)
5933 {
5934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 VOS_ASSERT(0);
5937 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005938 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 return VOS_STATUS_E_NOMEM;
5940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005942 /*
5943 Since firmware is not using highperformance flag, we have removed
5944 this flag from wdiEDCAInfo structure to match sizeof the structure
5945 between host and firmware.In future if we are planning to use
5946 highperformance flag then Please define this flag in wdiEDCAInfo
5947 structure, update it here and send it to firmware. i.e.
5948 Following is the original line which we removed as part of the fix
5949 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5950 pEdcaParams->highPerformance;
5951 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5953 &pEdcaParams->acbe);
5954 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5955 &pEdcaParams->acbk);
5956 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5957 &pEdcaParams->acvi);
5958 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5959 &pEdcaParams->acvo);
5960 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 pWdaParams->pWdaContext = pWDA;
5962 /* Store remove key pointer, as this will be used for response */
5963 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005964 /* store Params pass it to WDI */
5965 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5967 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 if(IS_WDI_STATUS_FAILURE(status))
5969 {
5970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5971 "Failure in Update EDCA Params WDI API, free all the memory " );
5972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5973 vos_mem_free(pWdaParams);
5974 vos_mem_free(pEdcaParams);
5975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 return CONVERT_WDI2VOS_STATUS(status) ;
5977}
Jeff Johnson295189b2012-06-20 16:38:30 -07005978/*
5979 * FUNCTION: WDA_AddBAReqCallback
5980 * send ADD BA RSP back to PE
5981 */
5982void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5983 void* pUserData)
5984{
5985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5986 tWDA_CbContext *pWDA;
5987 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005989 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 if(NULL == pWdaParams)
5991 {
5992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005993 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005994 VOS_ASSERT(0) ;
5995 return ;
5996 }
5997 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5998 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6000 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006001 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 return ;
6004}
6005
Jeff Johnson295189b2012-06-20 16:38:30 -07006006/*
6007 * FUNCTION: WDA_ProcessAddBAReq
6008 * Request to WDI to Update the ADDBA REQ params.
6009 */
6010VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
6011 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
6012{
Jeff Johnson43971f52012-07-17 12:26:56 -07006013 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6015 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6016 sizeof(WDI_AddBAReqParamsType)) ;
6017 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 if(NULL == wdiAddBAReqParam)
6021 {
6022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 VOS_ASSERT(0);
6025 return VOS_STATUS_E_NOMEM;
6026 }
6027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6028 if(NULL == pWdaParams)
6029 {
6030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 VOS_ASSERT(0);
6033 vos_mem_free(wdiAddBAReqParam);
6034 return VOS_STATUS_E_NOMEM;
6035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 do
6037 {
6038 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006039 wdiAddBaInfo->ucSTAIdx = staIdx ;
6040 wdiAddBaInfo->ucBaSessionID = baSessionID ;
6041 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 } while(0) ;
6043 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 pWdaParams->pWdaContext = pWDA;
6045 /* store Params pass it to WDI */
6046 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6047 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006048 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6049 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006050
Jeff Johnson43971f52012-07-17 12:26:56 -07006051 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 {
6053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006054 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6055 status = CONVERT_WDI2VOS_STATUS(wstatus);
6056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 vos_mem_free(pWdaParams);
6058 pAddBAReqParams->status = eSIR_FAILURE;
6059 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6060 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006061 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006062}
Jeff Johnson295189b2012-06-20 16:38:30 -07006063/*
6064 * FUNCTION: WDA_AddBASessionReqCallback
6065 * send ADD BA SESSION RSP back to PE/(or TL)
6066 */
6067void WDA_AddBASessionReqCallback(
6068 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6069{
6070 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6072 tWDA_CbContext *pWDA;
6073 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006075 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 if(NULL == pWdaParams)
6077 {
6078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 VOS_ASSERT(0) ;
6081 return ;
6082 }
6083 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6084 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006085 if( NULL == pAddBAReqParams )
6086 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006088 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6091 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 return ;
6093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6095 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 /*
6097 * if WDA in update TL state, update TL with BA session parama and send
6098 * another request to HAL(/WDI) (ADD_BA_REQ)
6099 */
6100
6101 if((VOS_STATUS_SUCCESS ==
6102 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6103 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6104 {
6105 /* Update TL with BA info received from HAL/WDI */
6106 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6107 wdiAddBaSession->usBaSessionID,
6108 wdiAddBaSession->ucSTAIdx,
6109 wdiAddBaSession->ucBaTID,
6110 wdiAddBaSession->ucBaBufferSize,
6111 wdiAddBaSession->ucWinSize,
6112 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6114 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6115 }
6116 else
6117 {
6118 pAddBAReqParams->status =
6119 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6120
6121 /* Setting Flag to indicate that Set BA is success */
6122 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6123 {
6124 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6125 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6126 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006128 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 /*Reset the WDA state to READY */
6131 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 return ;
6133}
6134
Jeff Johnson295189b2012-06-20 16:38:30 -07006135/*
6136 * FUNCTION: WDA_ProcessAddBASessionReq
6137 * Request to WDI to Update the ADDBA REQ params.
6138 */
6139VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6140 tAddBAParams *pAddBAReqParams)
6141{
6142 WDI_Status status = WDI_STATUS_SUCCESS ;
6143 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6144 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6145 sizeof(WDI_AddBASessionReqParamsType)) ;
6146 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006147 WLANTL_STAStateType tlSTAState = 0;
6148
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 if(NULL == wdiAddBASessionReqParam)
6152 {
6153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 VOS_ASSERT(0);
6156 return VOS_STATUS_E_NOMEM;
6157 }
6158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6159 if(NULL == pWdaParams)
6160 {
6161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 VOS_ASSERT(0);
6164 vos_mem_free(wdiAddBASessionReqParam);
6165 return VOS_STATUS_E_NOMEM;
6166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 /*
6168 * Populate ADD BA parameters and pass these paarmeters to WDI.
6169 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6170 * the state to track if these is BA recipient case or BA initiator
6171 * case.
6172 */
6173 do
6174 {
6175 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6176 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6177 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6178 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6179 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6180 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6181 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6184 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6185 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6186 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6187 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 /* check the BA direction and update state accordingly */
6189 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6190 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6191 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6192
6193 }while(0) ;
6194 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 pWdaParams->pWdaContext = pWDA;
6196 /* Store ADD BA pointer, as this will be used for response */
6197 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6198 /* store Params pass it to WDI */
6199 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006200
6201 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6202 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6203 */
6204 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6205 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6206 {
6207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006208 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006209 status = WDI_STATUS_E_NOT_ALLOWED;
6210 pAddBAReqParams->status =
6211 CONVERT_WDI2SIR_STATUS(status) ;
6212 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6213 /*Reset the WDA state to READY */
6214 pWDA->wdaState = WDA_READY_STATE;
6215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6216 vos_mem_free(pWdaParams);
6217
6218 return CONVERT_WDI2VOS_STATUS(status) ;
6219 }
6220
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6222 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 if(IS_WDI_STATUS_FAILURE(status))
6224 {
6225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006226 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006228 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006229 pAddBAReqParams->status =
6230 CONVERT_WDI2SIR_STATUS(status) ;
6231 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006232 /*Reset the WDA state to READY */
6233 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 vos_mem_free(pWdaParams);
6236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006238}
Jeff Johnson295189b2012-06-20 16:38:30 -07006239/*
6240 * FUNCTION: WDA_DelBANotifyTL
6241 * send DEL BA IND to TL
6242 */
6243void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6244 tDelBAParams *pDelBAReqParams)
6245{
6246 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6247 //tSirMsgQ msg;
6248 vos_msg_t vosMsg;
6249 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 if(NULL == pDelBAInd)
6251 {
6252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 VOS_ASSERT(0) ;
6255 return;
6256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6258 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6259 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6260 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006261
Jeff Johnson295189b2012-06-20 16:38:30 -07006262
6263 vosMsg.type = WDA_DELETEBA_IND;
6264 vosMsg.bodyptr = pDelBAInd;
6265 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6266 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6267 {
6268 vosStatus = VOS_STATUS_E_BADMSG;
6269 }
6270}
Jeff Johnson295189b2012-06-20 16:38:30 -07006271/*
6272 * FUNCTION: WDA_DelBAReqCallback
6273 * send DEL BA RSP back to PE
6274 */
6275void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6276{
6277 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6278 tWDA_CbContext *pWDA;
6279 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006281 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 if(NULL == pWdaParams)
6283 {
6284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006285 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006286 VOS_ASSERT(0) ;
6287 return ;
6288 }
6289 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6290 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 /* Notify TL about DEL BA in case of recipinet */
6292 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6293 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6294 {
6295 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 /*
6298 * No respone required for WDA_DELBA_IND so just free the request
6299 * param here
6300 */
6301 vos_mem_free(pDelBAReqParams);
6302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6303 vos_mem_free(pWdaParams);
6304 return ;
6305}
6306
Jeff Johnson295189b2012-06-20 16:38:30 -07006307/*
6308 * FUNCTION: WDA_ProcessDelBAReq
6309 * Request to WDI to Update the DELBA REQ params.
6310 */
6311VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6312 tDelBAParams *pDelBAReqParams)
6313{
6314 WDI_Status status = WDI_STATUS_SUCCESS ;
6315 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6316 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6317 sizeof(WDI_DelBAReqParamsType)) ;
6318 tWDA_ReqParams *pWdaParams ;
6319 tANI_U16 staIdx = 0;
6320 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006322 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006323 if(NULL == wdiDelBAReqParam)
6324 {
6325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 VOS_ASSERT(0);
6328 return VOS_STATUS_E_NOMEM;
6329 }
6330 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6331 if(NULL == pWdaParams)
6332 {
6333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006334 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 VOS_ASSERT(0);
6336 vos_mem_free(wdiDelBAReqParam);
6337 return VOS_STATUS_E_NOMEM;
6338 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006339 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6340 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6341 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6342 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 pWdaParams->pWdaContext = pWDA;
6344 /* Store DEL BA pointer, as this will be used for response */
6345 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 /* store Params pass it to WDI */
6347 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6349 * maintained in WDA, so that WDA can retry for another BA session
6350 */
6351 staIdx = pDelBAReqParams->staIdx;
6352 tid = pDelBAReqParams->baTID;
6353 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 status = WDI_DelBAReq(wdiDelBAReqParam,
6355 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 if(IS_WDI_STATUS_FAILURE(status))
6357 {
6358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6359 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6361 vos_mem_free(pWdaParams->wdaMsgParam);
6362 vos_mem_free(pWdaParams);
6363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006365}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006366
6367/*
6368 * FUNCTION: WDA_UpdateChReqCallback
6369 *
6370 */
6371void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6372{
Siddharth Bhala006c122014-05-03 12:13:27 +05306373 tWDA_ReqParams *pWdaParams;
6374 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6375 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6376 WDI_UpdateChannelReqinfoType *pChanInfoType;
6377 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006378
6379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6380 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306381 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006382 {
6383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306384 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006385 VOS_ASSERT(0);
6386 return;
6387 }
6388
Siddharth Bhala006c122014-05-03 12:13:27 +05306389 pWdaParams = (tWDA_ReqParams *)pUserData;
6390 pwdiUpdateChReqParam =
6391 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6392 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6393 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6394 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006395 /*
6396 * currently there is no response message is expected between PE and
6397 * WDA, Failure return from WDI is a ASSERT condition
6398 */
6399 vos_mem_free(pChanInfoType);
6400 vos_mem_free(pChanList);
6401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6402 vos_mem_free(pWdaParams);
6403
6404 return;
6405}
6406
6407/*
6408 * FUNCTION: WDA_ProcessUpdateChannelList
6409 * Request to WDI to Update the ChannelList params.
6410 */
6411VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6412 tSirUpdateChanList *pChanList)
6413{
6414 WDI_Status status = WDI_STATUS_SUCCESS;
6415 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6416 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6417 WDI_UpdateChannelReqinfoType *pChanInfoType;
6418 tWDA_ReqParams *pWdaParams;
6419 wpt_uint8 i;
6420
6421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6422 "------> %s " ,__func__);
6423 if(NULL == pChanList)
6424 {
6425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6426 "%s: NULL pChanList", __func__);
6427 VOS_ASSERT(0);
6428 return VOS_STATUS_E_INVAL;
6429 }
6430
6431 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6432 {
6433 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6434 "Update channel list capability Not Supported");
6435 vos_mem_free(pChanList);
6436 return VOS_STATUS_E_INVAL;
6437 }
6438
6439 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6440 sizeof(WDI_UpdateChReqParamsType));
6441 if(NULL == pwdiUpdateChReqParam)
6442 {
6443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6444 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6445 __func__);
6446 VOS_ASSERT(0);
6447 vos_mem_free(pChanList);
6448 return VOS_STATUS_E_NOMEM;
6449 }
6450 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6451 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6452 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6453 pChanList->numChan);
6454 if(NULL == pChanInfoType)
6455 {
6456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6457 "%s: VOS MEM Alloc Failure", __func__);
6458 VOS_ASSERT(0);
6459 vos_mem_free(pChanList);
6460 vos_mem_free(pwdiUpdateChReqParam);
6461 return VOS_STATUS_E_NOMEM;
6462 }
6463 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6464 * pChanList->numChan);
6465 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6466
6467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6468 if(NULL == pWdaParams)
6469 {
6470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6471 "%s: VOS MEM Alloc Failure", __func__);
6472 VOS_ASSERT(0);
6473 vos_mem_free(pChanList);
6474 vos_mem_free(pChanInfoType);
6475 vos_mem_free(pwdiUpdateChReqParam);
6476 return VOS_STATUS_E_NOMEM;
6477 }
6478 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6479
6480 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6481 {
6482 pChanInfoType->mhz =
6483 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6484
6485 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6486 pChanInfoType->band_center_freq2 = 0;
6487
6488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6489 "chan[%d] = %u", i, pChanInfoType->mhz);
6490 if (pChanList->chanParam[i].dfsSet)
6491 {
6492 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6494 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6495 pChanList->chanParam[i].dfsSet);
6496 }
6497
6498 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6499 {
6500 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6501 }
6502 else
6503 {
6504 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6505 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6506 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6507 }
6508
6509 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6510 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6511
6512 pChanInfoType++;
6513 }
6514
6515 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6516 pWdaParams->pWdaContext = pWDA;
6517 pWdaParams->wdaMsgParam = (void *)pChanList;
6518 /* store Params pass it to WDI */
6519 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6520 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6521 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6522 if(IS_WDI_STATUS_FAILURE(status))
6523 {
6524 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6525 "Failure in Update Channel REQ Params WDI API, free all the memory");
6526 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6527 vos_mem_free(pwdiUpdateChReqParam);
6528 vos_mem_free(pWdaParams->wdaMsgParam);
6529 vos_mem_free(pWdaParams);
6530 }
6531 return CONVERT_WDI2VOS_STATUS(status);
6532}
6533
Jeff Johnson295189b2012-06-20 16:38:30 -07006534/*
6535 * FUNCTION: WDA_AddTSReqCallback
6536 * send ADD TS RSP back to PE
6537 */
6538void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6539{
6540 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6541 tWDA_CbContext *pWDA;
6542 tAddTsParams *pAddTsReqParams;
6543
6544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006545 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 if(NULL == pWdaParams)
6547 {
6548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006549 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 VOS_ASSERT(0) ;
6551 return ;
6552 }
6553 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6554 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6556 vos_mem_free(pWdaParams);
6557
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006558 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 return ;
6561}
6562
Jeff Johnson295189b2012-06-20 16:38:30 -07006563/*
6564 * FUNCTION: WDA_ProcessAddTSReq
6565 * Request to WDI to Update the ADD TS REQ params.
6566 */
6567VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6568 tAddTsParams *pAddTsReqParams)
6569{
6570 WDI_Status status = WDI_STATUS_SUCCESS ;
6571 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6572 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6573 sizeof(WDI_AddTSReqParamsType)) ;
6574 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006576 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006577 if(NULL == wdiAddTSReqParam)
6578 {
6579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006581 VOS_ASSERT(0);
6582 return VOS_STATUS_E_NOMEM;
6583 }
6584 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6585 if(NULL == pWdaParams)
6586 {
6587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006588 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 VOS_ASSERT(0);
6590 vos_mem_free(wdiAddTSReqParam);
6591 return VOS_STATUS_E_NOMEM;
6592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006593 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6594 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 //TS IE
6596 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6597 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6598 pAddTsReqParams->tspec.length;
6599
6600 //TS IE : TS INFO : TRAFFIC
6601 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6602 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6603 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6604 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6605 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6606 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6607 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6608 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6609 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6610 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6611 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6612 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6613 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6614 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6615 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6616 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6617
6618 //TS IE : TS INFO : SCHEDULE
6619 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6620 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6621 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6622 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 //TS IE
6624 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6625 pAddTsReqParams->tspec.nomMsduSz;
6626 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6627 pAddTsReqParams->tspec.maxMsduSz;
6628 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6629 pAddTsReqParams->tspec.minSvcInterval;
6630 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6631 pAddTsReqParams->tspec.maxSvcInterval;
6632 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6633 pAddTsReqParams->tspec.inactInterval;
6634 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6635 pAddTsReqParams->tspec.suspendInterval;
6636 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6637 pAddTsReqParams->tspec.svcStartTime;
6638 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6639 pAddTsReqParams->tspec.minDataRate;
6640 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6641 pAddTsReqParams->tspec.meanDataRate;
6642 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6643 pAddTsReqParams->tspec.peakDataRate;
6644 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6645 pAddTsReqParams->tspec.maxBurstSz;
6646 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6647 pAddTsReqParams->tspec.delayBound;
6648 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6649 pAddTsReqParams->tspec.minPhyRate;
6650 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6651 pAddTsReqParams->tspec.surplusBw;
6652 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6653 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 /* TODO: tAddTsParams doesn't have the following fields */
6655#if 0
6656 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6657 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6658 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6659 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6660#endif
6661 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6662
6663 pWdaParams->pWdaContext = pWDA;
6664 /* Store ADD TS pointer, as this will be used for response */
6665 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006666 /* store Params pass it to WDI */
6667 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006668 status = WDI_AddTSReq(wdiAddTSReqParam,
6669 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 if(IS_WDI_STATUS_FAILURE(status))
6671 {
6672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6673 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6675 vos_mem_free(pWdaParams);
6676 pAddTsReqParams->status = eSIR_FAILURE ;
6677 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006680}
6681
Jeff Johnson295189b2012-06-20 16:38:30 -07006682/*
6683 * FUNCTION: WDA_DelTSReqCallback
6684 * send DEL TS RSP back to PE
6685 */
6686void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6687{
6688 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006690 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6692 vos_mem_free(pWdaParams->wdaMsgParam) ;
6693 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006694 /*
6695 * No respone required for WDA_DEL_TS_REQ so just free the request
6696 * param here
6697 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 return ;
6699}
6700
Jeff Johnson295189b2012-06-20 16:38:30 -07006701/*
6702 * FUNCTION: WDA_ProcessDelTSReq
6703 * Request to WDI to Update the DELTS REQ params.
6704 */
6705VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6706 tDelTsParams *pDelTSReqParams)
6707{
6708 WDI_Status status = WDI_STATUS_SUCCESS ;
6709 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6710 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6711 sizeof(WDI_DelTSReqParamsType)) ;
6712 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006714 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 if(NULL == wdiDelTSReqParam)
6716 {
6717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 VOS_ASSERT(0);
6720 return VOS_STATUS_E_NOMEM;
6721 }
6722 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6723 if(NULL == pWdaParams)
6724 {
6725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 VOS_ASSERT(0);
6728 vos_mem_free(wdiDelTSReqParam);
6729 return VOS_STATUS_E_NOMEM;
6730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6732 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6733 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6734 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6735 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 pWdaParams->pWdaContext = pWDA;
6737 /* Store DEL TS pointer, as this will be used for response */
6738 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 /* store Params pass it to WDI */
6740 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 status = WDI_DelTSReq(wdiDelTSReqParam,
6742 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 if(IS_WDI_STATUS_FAILURE(status))
6744 {
6745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6746 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6748 vos_mem_free(pWdaParams->wdaMsgParam);
6749 vos_mem_free(pWdaParams);
6750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006752}
Jeff Johnson295189b2012-06-20 16:38:30 -07006753/*
6754 * FUNCTION: WDA_UpdateBeaconParamsCallback
6755 * Free the memory. No need to send any response to PE in this case
6756 */
6757void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6758{
6759 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006761 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 if(NULL == pWdaParams)
6763 {
6764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006765 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 VOS_ASSERT(0) ;
6767 return ;
6768 }
6769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6770 vos_mem_free(pWdaParams->wdaMsgParam) ;
6771 vos_mem_free(pWdaParams);
6772 /*
6773 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6774 * param here
6775 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 return ;
6777}
Jeff Johnson295189b2012-06-20 16:38:30 -07006778/*
6779 * FUNCTION: WDA_ProcessUpdateBeaconParams
6780 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6781 */
6782VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6783 tUpdateBeaconParams *pUpdateBeaconParams)
6784{
6785 WDI_Status status = WDI_STATUS_SUCCESS ;
6786 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6787 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6788 sizeof(WDI_UpdateBeaconParamsType)) ;
6789 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006791 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 if(NULL == wdiUpdateBeaconParams)
6793 {
6794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 VOS_ASSERT(0);
6797 return VOS_STATUS_E_NOMEM;
6798 }
6799 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6800 if(NULL == pWdaParams)
6801 {
6802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 VOS_ASSERT(0);
6805 vos_mem_free(wdiUpdateBeaconParams);
6806 return VOS_STATUS_E_NOMEM;
6807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6809 pUpdateBeaconParams->bssIdx;
6810 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6811 pUpdateBeaconParams->fShortPreamble;
6812 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6813 pUpdateBeaconParams->fShortSlotTime;
6814 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6815 pUpdateBeaconParams->beaconInterval;
6816 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6817 pUpdateBeaconParams->llaCoexist;
6818 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6819 pUpdateBeaconParams->llbCoexist;
6820 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6821 pUpdateBeaconParams->llgCoexist;
6822 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6823 pUpdateBeaconParams->ht20MhzCoexist;
6824 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6825 pUpdateBeaconParams->llnNonGFCoexist;
6826 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6827 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6828 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6829 pUpdateBeaconParams->fRIFSMode;
6830 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6831 pUpdateBeaconParams->paramChangeBitmap;
6832 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6833
6834 pWdaParams->pWdaContext = pWDA;
6835 /* Store UpdateBeacon Req pointer, as this will be used for response */
6836 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 /* store Params pass it to WDI */
6838 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6840 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6841 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 if(IS_WDI_STATUS_FAILURE(status))
6843 {
6844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6845 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6847 vos_mem_free(pWdaParams->wdaMsgParam);
6848 vos_mem_free(pWdaParams);
6849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006851}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006852#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006853/*
6854 * FUNCTION: WDA_TSMStatsReqCallback
6855 * send TSM Stats RSP back to PE
6856 */
6857void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6858{
6859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6860 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006861 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6862 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863
6864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006865 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 if(NULL == pWdaParams)
6867 {
6868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006869 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 VOS_ASSERT(0) ;
6871 return ;
6872 }
6873 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006874 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6875
6876 if(NULL == pGetTsmStatsReqParams)
6877 {
6878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6879 "%s: pGetTsmStatsReqParams received NULL", __func__);
6880 VOS_ASSERT(0);
6881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6882 vos_mem_free(pWdaParams);
6883 return;
6884 }
6885
6886 pTsmRspParams =
6887 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 if( NULL == pTsmRspParams )
6889 {
6890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006891 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 VOS_ASSERT( 0 );
6893 return ;
6894 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006895 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6896 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6897 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6898
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6900 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6901 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6902 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6903 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6904 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6905 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6906 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6907 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6908 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006909
6910 /* Assign get tsm stats req req (backup) in to the response */
6911 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6912
6913 /* free WDI command buffer */
6914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6915 vos_mem_free(pWdaParams);
6916
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 return ;
6919}
6920
6921
Jeff Johnson295189b2012-06-20 16:38:30 -07006922/*
6923 * FUNCTION: WDA_ProcessTsmStatsReq
6924 * Request to WDI to get the TSM Stats params.
6925 */
6926VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006927 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006928{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006929 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006931 tWDA_ReqParams *pWdaParams = NULL;
6932 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6933
Jeff Johnson295189b2012-06-20 16:38:30 -07006934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006935 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6937 sizeof(WDI_TSMStatsReqParamsType));
6938 if(NULL == wdiTSMReqParam)
6939 {
6940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 VOS_ASSERT(0);
6943 return VOS_STATUS_E_NOMEM;
6944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6946 if(NULL == pWdaParams)
6947 {
6948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006950 VOS_ASSERT(0);
6951 vos_mem_free(wdiTSMReqParam);
6952 return VOS_STATUS_E_NOMEM;
6953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6955 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6956 pTsmStats->bssId,
6957 sizeof(wpt_macAddr));
6958 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6959
6960 pWdaParams->pWdaContext = pWDA;
6961 /* Store TSM Stats pointer, as this will be used for response */
6962 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006963 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 status = WDI_TSMStatsReq(wdiTSMReqParam,
6965 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 if(IS_WDI_STATUS_FAILURE(status))
6967 {
6968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6969 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006970 vos_mem_free(pWdaParams);
6971
6972 pGetTsmStatsRspParams =
6973 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6974 if(NULL == pGetTsmStatsRspParams)
6975 {
6976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6977 "%s: VOS MEM Alloc Failure", __func__);
6978 VOS_ASSERT(0);
6979 vos_mem_free(pTsmStats);
6980 return VOS_STATUS_E_NOMEM;
6981 }
6982 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6983 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6984 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6985
6986 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 return CONVERT_WDI2VOS_STATUS(status) ;
6989}
6990#endif
6991/*
6992 * FUNCTION: WDA_SendBeaconParamsCallback
6993 * No need to send any response to PE in this case
6994 */
6995void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6996{
6997
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 return ;
7001}
Jeff Johnson295189b2012-06-20 16:38:30 -07007002/*
7003 * FUNCTION: WDA_ProcessSendBeacon
7004 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7005 * start beacon trasmission
7006 */
7007VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7008 tSendbeaconParams *pSendbeaconParams)
7009{
7010 WDI_Status status = WDI_STATUS_SUCCESS ;
7011 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007013 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7015 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7016 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7017 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7019 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307020 /* p2pIeOffset should be atleast greater than timIeOffset */
7021 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7022 (pSendbeaconParams->p2pIeOffset <
7023 pSendbeaconParams->timIeOffset))
7024 {
7025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7026 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7027 VOS_ASSERT( 0 );
7028 return WDI_STATUS_E_FAILURE;
7029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7031 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 /* Copy the beacon template to local buffer */
7033 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7034 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7035 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7036
Jeff Johnson295189b2012-06-20 16:38:30 -07007037 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7038 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 if(IS_WDI_STATUS_FAILURE(status))
7040 {
7041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7042 "Failure in SEND BEACON REQ Params WDI API" );
7043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 vos_mem_free(pSendbeaconParams);
7045 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007046}
Jeff Johnson295189b2012-06-20 16:38:30 -07007047/*
7048 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7049 * No need to send any response to PE in this case
7050 */
7051void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7052{
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007054 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 return ;
7056}
7057
Jeff Johnson295189b2012-06-20 16:38:30 -07007058/*
7059 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7060 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7061 * send probe response
7062 */
7063VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7064 tSendProbeRespParams *pSendProbeRspParams)
7065{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007066 WDI_Status status = WDI_STATUS_SUCCESS;
7067 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7068 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007070 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007071
7072 if (!wdiSendProbeRspParam)
7073 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7074
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007076 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007078 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 /* Copy the Probe Response template to local buffer */
7081 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007082 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 pSendProbeRspParams->pProbeRespTemplate,
7084 pSendProbeRspParams->probeRespTemplateLen);
7085 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007086 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7088 WDI_PROBE_REQ_BITMAP_IE_LEN);
7089
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007090 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007091
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007092 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 if(IS_WDI_STATUS_FAILURE(status))
7095 {
7096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7097 "Failure in SEND Probe RSP Params WDI API" );
7098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007100 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007102}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007103#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007104/*
7105 * FUNCTION: WDA_SetMaxTxPowerCallBack
7106 * send the response to PE with power value received from WDI
7107 */
7108void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7109 void* pUserData)
7110{
7111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7112 tWDA_CbContext *pWDA = NULL;
7113 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7114
7115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007116 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 if(NULL == pWdaParams)
7118 {
7119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007120 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 VOS_ASSERT(0) ;
7122 return ;
7123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7125 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 if( NULL == pMaxTxPowerParams )
7127 {
7128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007129 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007130 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7132 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 return ;
7134 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007135
Jeff Johnson295189b2012-06-20 16:38:30 -07007136
7137 /*need to free memory for the pointers used in the
7138 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7140 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007142
Jeff Johnson295189b2012-06-20 16:38:30 -07007143
7144 /* send response to UMAC*/
7145 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7146
7147 return;
7148}
Jeff Johnson295189b2012-06-20 16:38:30 -07007149/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007150 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 * Request to WDI to send set Max Tx Power Request
7152 */
7153 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7154 tMaxTxPowerParams *MaxTxPowerParams)
7155{
7156 WDI_Status status = WDI_STATUS_SUCCESS;
7157 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7158 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007159
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007161 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007162
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7164 sizeof(WDI_SetMaxTxPowerParamsType));
7165 if(NULL == wdiSetMaxTxPowerParams)
7166 {
7167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 VOS_ASSERT(0);
7170 return VOS_STATUS_E_NOMEM;
7171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7173 if(NULL == pWdaParams)
7174 {
7175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 vos_mem_free(wdiSetMaxTxPowerParams);
7178 VOS_ASSERT(0);
7179 return VOS_STATUS_E_NOMEM;
7180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 /* Copy.Max.Tx.Power Params to WDI structure */
7182 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7183 MaxTxPowerParams->bssId,
7184 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7186 MaxTxPowerParams->selfStaMacAddr,
7187 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7189 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 pWdaParams->pWdaContext = pWDA;
7192 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 /* store Params pass it to WDI */
7194 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7196 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 if(IS_WDI_STATUS_FAILURE(status))
7198 {
7199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7200 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7201 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7202 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007203 /* send response to UMAC*/
7204 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 }
7206 return CONVERT_WDI2VOS_STATUS(status);
7207
7208}
Jeff Johnson295189b2012-06-20 16:38:30 -07007209#endif
schang86c22c42013-03-13 18:41:24 -07007210
7211/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007212 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7213 * send the response to PE with power value received from WDI
7214 */
7215void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7216 *pwdiSetMaxTxPowerPerBandRsp,
7217 void* pUserData)
7218{
7219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7220 tWDA_CbContext *pWDA = NULL;
7221 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7222
7223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7224 "<------ %s ", __func__);
7225 if (NULL == pWdaParams)
7226 {
7227 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7228 "%s: pWdaParams received NULL", __func__);
7229 VOS_ASSERT(0);
7230 return ;
7231 }
7232 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7233 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7234 if ( NULL == pMxTxPwrPerBandParams )
7235 {
7236 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7237 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7238 VOS_ASSERT(0);
7239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7240 vos_mem_free(pWdaParams);
7241 return;
7242 }
7243
7244 /*need to free memory for the pointers used in the
7245 WDA Process.Set Max Tx Power Req function*/
7246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7247 vos_mem_free(pWdaParams);
7248 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7249
7250 /* send response to UMAC*/
7251 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7252 pMxTxPwrPerBandParams, 0);
7253
7254 return;
7255}
7256
7257/*
7258 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7259 * Request to WDI to send set Max Tx Power Per band Request
7260 */
7261 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7262 tMaxTxPowerPerBandParams
7263 *MaxTxPowerPerBandParams)
7264{
7265 WDI_Status status = WDI_STATUS_SUCCESS;
7266 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7267 tWDA_ReqParams *pWdaParams = NULL;
7268
7269 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7270 "------> %s ", __func__);
7271
7272 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7273 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7274
7275 if (NULL == wdiSetMxTxPwrPerBandParams)
7276 {
7277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7278 "%s: VOS MEM Alloc Failure", __func__);
7279 VOS_ASSERT(0);
7280 return VOS_STATUS_E_NOMEM;
7281 }
7282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7283 if (NULL == pWdaParams)
7284 {
7285 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7286 "%s: VOS MEM Alloc Failure", __func__);
7287 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7288 VOS_ASSERT(0);
7289 return VOS_STATUS_E_NOMEM;
7290 }
7291 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7292 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7293 MaxTxPowerPerBandParams->bandInfo;
7294 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7295 MaxTxPowerPerBandParams->power;
7296 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7297 pWdaParams->pWdaContext = pWDA;
7298 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7299 /* store Params pass it to WDI */
7300 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7301 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7302 WDA_SetMaxTxPowerPerBandCallBack,
7303 pWdaParams);
7304 if (IS_WDI_STATUS_FAILURE(status))
7305 {
7306 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7307 "Failure in SET MAX TX Power REQ Params WDI API,"
7308 " free all the memory");
7309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7310 vos_mem_free(pWdaParams);
7311 /* send response to UMAC*/
7312 WDA_SendMsg(pWDA,
7313 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7314 MaxTxPowerPerBandParams, 0);
7315 }
7316 return CONVERT_WDI2VOS_STATUS(status);
7317}
7318
7319/*
schang86c22c42013-03-13 18:41:24 -07007320 * FUNCTION: WDA_SetTxPowerCallBack
7321 * send the response to PE with power value received from WDI
7322 */
7323void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7324 void* pUserData)
7325{
7326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7327 tWDA_CbContext *pWDA = NULL;
7328 tSirSetTxPowerReq *pTxPowerParams = NULL;
7329
7330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7331 "<------ %s ", __func__);
7332 if(NULL == pWdaParams)
7333 {
7334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7335 "%s: pWdaParams received NULL", __func__);
7336 VOS_ASSERT(0) ;
7337 return ;
7338 }
7339 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7340 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7341 if(NULL == pTxPowerParams)
7342 {
7343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7344 "%s: pTxPowerParams received NULL " ,__func__);
7345 VOS_ASSERT(0);
7346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7347 vos_mem_free(pWdaParams);
7348 return ;
7349 }
7350
7351 /*need to free memory for the pointers used in the
7352 WDA Process.Set Max Tx Power Req function*/
7353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7354 vos_mem_free(pWdaParams);
7355
7356 /* send response to UMAC*/
7357 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7358 return;
7359}
7360
7361/*
7362 * FUNCTION: WDA_ProcessSetTxPowerReq
7363 * Request to WDI to send set Tx Power Request
7364 */
7365 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7366 tSirSetTxPowerReq *txPowerParams)
7367{
7368 WDI_Status status = WDI_STATUS_SUCCESS;
7369 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7370 tWDA_ReqParams *pWdaParams = NULL;
7371
7372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7373 "------> %s ", __func__);
7374
7375 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7376 sizeof(WDI_SetTxPowerParamsType));
7377 if(NULL == wdiSetTxPowerParams)
7378 {
7379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7380 "%s: VOS MEM Alloc Failure", __func__);
7381 VOS_ASSERT(0);
7382 return VOS_STATUS_E_NOMEM;
7383 }
7384 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7385 if(NULL == pWdaParams)
7386 {
7387 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7388 "%s: VOS MEM Alloc Failure", __func__);
7389 vos_mem_free(wdiSetTxPowerParams);
7390 VOS_ASSERT(0);
7391 return VOS_STATUS_E_NOMEM;
7392 }
7393 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7394 txPowerParams->bssIdx;
7395 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7396 txPowerParams->mwPower;
7397 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7398 pWdaParams->pWdaContext = pWDA;
7399 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7400 /* store Params pass it to WDI */
7401 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7402 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7403 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7404 if(IS_WDI_STATUS_FAILURE(status))
7405 {
7406 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7407 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7409 vos_mem_free(pWdaParams);
7410 /* send response to UMAC*/
7411 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7412 }
7413 return CONVERT_WDI2VOS_STATUS(status);
7414}
7415
Jeff Johnson295189b2012-06-20 16:38:30 -07007416/*
7417 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7418 * Free the memory. No need to send any response to PE in this case
7419 */
7420void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7421{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7423
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007426
7427 if(NULL == pWdaParams)
7428 {
7429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007430 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007431 VOS_ASSERT(0) ;
7432 return ;
7433 }
7434
7435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7436 vos_mem_free(pWdaParams->wdaMsgParam) ;
7437 vos_mem_free(pWdaParams);
7438
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 /*
7440 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7441 * so just free the request param here
7442 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 return ;
7444}
7445
Jeff Johnson295189b2012-06-20 16:38:30 -07007446/*
7447 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7448 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7449 */
7450VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7451 tP2pPsParams *pP2pPsConfigParams)
7452{
7453 WDI_Status status = WDI_STATUS_SUCCESS ;
7454 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7455 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7456 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007457 tWDA_ReqParams *pWdaParams = NULL;
7458
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007460 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 if(NULL == wdiSetP2PGONOAReqParam)
7462 {
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_ASSERT(0);
7466 return VOS_STATUS_E_NOMEM;
7467 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007468
7469 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7470 if(NULL == pWdaParams)
7471 {
7472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007473 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007474 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007475 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007476 VOS_ASSERT(0);
7477 return VOS_STATUS_E_NOMEM;
7478 }
7479
Jeff Johnson295189b2012-06-20 16:38:30 -07007480 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7481 pP2pPsConfigParams->opp_ps;
7482 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7483 pP2pPsConfigParams->ctWindow;
7484 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7485 pP2pPsConfigParams->count;
7486 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7487 pP2pPsConfigParams->duration;
7488 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7489 pP2pPsConfigParams->interval;
7490 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7491 pP2pPsConfigParams->single_noa_duration;
7492 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7493 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007494
Jeff Johnson295189b2012-06-20 16:38:30 -07007495 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7496 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007497 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7498
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007500 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7501 pWdaParams->pWdaContext = pWDA;
7502
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007504 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7505
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 if(IS_WDI_STATUS_FAILURE(status))
7507 {
7508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7509 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7511 vos_mem_free(pWdaParams->wdaMsgParam);
7512 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 return CONVERT_WDI2VOS_STATUS(status);
7515
Jeff Johnson295189b2012-06-20 16:38:30 -07007516}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307517
7518#ifdef FEATURE_WLAN_TDLS
7519/*
7520 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7521 * Free the memory. No need to send any response to PE in this case
7522 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307523void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7524 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307525{
7526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7527 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307528 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307529
7530
7531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7532 "<------ %s " ,__func__);
7533 if(NULL == pWdaParams)
7534 {
7535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7536 "%s: pWdaParams received NULL", __func__);
7537 VOS_ASSERT(0) ;
7538 return ;
7539 }
7540 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7541
7542 if(NULL == pWdaParams)
7543 {
7544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7545 "%s: pWdaParams received NULL", __func__);
7546 VOS_ASSERT(0) ;
7547 return ;
7548 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307549 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7550 if( NULL == pTdlsLinkEstablishParams )
7551 {
7552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7553 "%s: pTdlsLinkEstablishParams "
7554 "received NULL " ,__func__);
7555 VOS_ASSERT(0);
7556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7557 vos_mem_free(pWdaParams);
7558 return ;
7559 }
7560 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7561 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307563 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307564 /* send response to UMAC*/
7565 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7566
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307567 return ;
7568}
7569
7570VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7571 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7572{
7573 WDI_Status status = WDI_STATUS_SUCCESS ;
7574 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7575 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7576 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7577 tWDA_ReqParams *pWdaParams = NULL;
7578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7579 "------> %s " ,__func__);
7580 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7581 {
7582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7583 "%s: VOS MEM Alloc Failure", __func__);
7584 VOS_ASSERT(0);
7585 return VOS_STATUS_E_NOMEM;
7586 }
7587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7588 if(NULL == pWdaParams)
7589 {
7590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7591 "%s: VOS MEM Alloc Failure", __func__);
7592 vos_mem_free(pTdlsLinkEstablishParams);
7593 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7594 VOS_ASSERT(0);
7595 return VOS_STATUS_E_NOMEM;
7596 }
7597 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307598 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307599 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307600 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307601 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307602 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307603 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307604 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307605 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307606 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307607 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7608 pTdlsLinkEstablishParams->isOffChannelSupported;
7609
7610 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7611 pTdlsLinkEstablishParams->validChannels,
7612 pTdlsLinkEstablishParams->validChannelsLen);
7613
7614 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7615 pTdlsLinkEstablishParams->validChannelsLen;
7616
7617 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7618 pTdlsLinkEstablishParams->validOperClasses,
7619 pTdlsLinkEstablishParams->validOperClassesLen);
7620 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7621 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307622
7623 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7624 /* Store msg pointer from PE, as this will be used for response */
7625 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7626 /* store Params pass it to WDI */
7627 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7628 pWdaParams->pWdaContext = pWDA;
7629
7630 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7631 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7632 WDA_SetTDLSLinkEstablishReqParamsCallback,
7633 pWdaParams);
7634 if(IS_WDI_STATUS_FAILURE(status))
7635 {
7636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7637 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7639 vos_mem_free(pWdaParams->wdaMsgParam);
7640 vos_mem_free(pWdaParams);
7641 }
7642 return CONVERT_WDI2VOS_STATUS(status);
7643}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307644
7645// tdlsoffchan
7646void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7647 void* pUserData)
7648{
7649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7650 tWDA_CbContext *pWDA = NULL;
7651 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7652
7653
7654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7655 "<------ %s " ,__func__);
7656 if(NULL == pWdaParams)
7657 {
7658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7659 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307660 VOS_ASSERT(0) ;
7661 return ;
7662 }
7663 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7664
Atul Mittal60bd4292014-08-14 12:19:27 +05307665 if(NULL == pWdaParams)
7666 {
7667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7668 "%s: pWdaParams received NULL", __func__);
7669 VOS_ASSERT(0) ;
7670 return ;
7671 }
Atul Mittalc0f739f2014-07-31 13:47:47 +05307672 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307673 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307674 {
7675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7676 "%s: pTdlsChanSwitchParams "
7677 "received NULL " ,__func__);
7678 VOS_ASSERT(0);
7679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7680 vos_mem_free(pWdaParams);
7681 return ;
7682 }
7683 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7684 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7686 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307687 /* send response to UMAC*/
7688 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307689
7690 return ;
7691}
7692VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7693 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7694{
7695 WDI_Status status = WDI_STATUS_SUCCESS ;
7696 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7697 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7698 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7699 tWDA_ReqParams *pWdaParams = NULL;
7700
7701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7702 "Enter: %s ",__func__);
7703 if(NULL == wdiSetTDLSChanSwitchReqParam)
7704 {
7705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7706 "%s: VOS MEM Alloc Failure", __func__);
7707 VOS_ASSERT(0);
7708 return VOS_STATUS_E_NOMEM;
7709 }
7710
7711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7712 if(NULL == pWdaParams)
7713 {
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7715 "%s: VOS MEM Alloc Failure", __func__);
7716 vos_mem_free(pTdlsChanSwitchParams);
7717 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7718 VOS_ASSERT(0);
7719 return VOS_STATUS_E_NOMEM;
7720 }
7721 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7722 pTdlsChanSwitchParams->staIdx;
7723 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7724 pTdlsChanSwitchParams->tdlsSwMode;
7725 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7726 pTdlsChanSwitchParams->operClass;
7727 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7728 pTdlsChanSwitchParams->tdlsOffCh;
7729 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7730 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7731
7732
7733 /* Store msg pointer from PE, as this will be used for response */
7734 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7735 /* store Params pass it to WDI */
7736 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7737 pWdaParams->pWdaContext = pWDA;
7738 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7739 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7740 WDA_SetTDLSChanSwitchReqParamsCallback,
7741 pWdaParams);
7742 if(IS_WDI_STATUS_FAILURE(status))
7743 {
7744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7745 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7747 vos_mem_free(pWdaParams->wdaMsgParam);
7748 vos_mem_free(pWdaParams);
7749 }
7750 return CONVERT_WDI2VOS_STATUS(status);
7751}
7752#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307753
7754
Jeff Johnson295189b2012-06-20 16:38:30 -07007755#ifdef WLAN_FEATURE_VOWIFI_11R
7756/*
7757 * FUNCTION: WDA_AggrAddTSReqCallback
7758 * send ADD AGGREGATED TS RSP back to PE
7759 */
7760void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7761{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7763 tWDA_CbContext *pWDA;
7764 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007767 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007768 if(NULL == pWdaParams)
7769 {
7770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007771 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007772 VOS_ASSERT(0) ;
7773 return ;
7774 }
7775
7776 pWDA = pWdaParams->pWdaContext;
7777 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007778
7779 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7780 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007781 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007784
7785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7786 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 return ;
7788}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007789/*
7790 * FUNCTION: WDA_ProcessAddTSReq
7791 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7792 */
7793VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7794 tAggrAddTsParams *pAggrAddTsReqParams)
7795{
7796 WDI_Status status = WDI_STATUS_SUCCESS ;
7797 int i;
7798 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007799 tWDA_ReqParams *pWdaParams = NULL;
7800
7801
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007803 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7805 sizeof(WDI_AggrAddTSReqParamsType)) ;
7806 if(NULL == wdiAggrAddTSReqParam)
7807 {
7808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 VOS_ASSERT(0);
7811 return VOS_STATUS_E_NOMEM;
7812 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007813
7814
7815 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7816 if(NULL == pWdaParams)
7817 {
7818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007819 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007820 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007821 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007822 VOS_ASSERT(0);
7823 return VOS_STATUS_E_NOMEM;
7824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7826 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7827 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7829 {
7830 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7831 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7832 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007833 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7834 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7835 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7836 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7837 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7838 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7839 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7840 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7841 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7842 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7843 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7844 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7845 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7846 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7847 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7848 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7850 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7852 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7853 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7854 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7855 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7856 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7857 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7858 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7859 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7860 pAggrAddTsReqParams->tspec[i].inactInterval;
7861 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7862 pAggrAddTsReqParams->tspec[i].suspendInterval;
7863 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7864 pAggrAddTsReqParams->tspec[i].svcStartTime;
7865 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7866 pAggrAddTsReqParams->tspec[i].minDataRate;
7867 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7868 pAggrAddTsReqParams->tspec[i].meanDataRate;
7869 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7870 pAggrAddTsReqParams->tspec[i].peakDataRate;
7871 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7872 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7873 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7874 pAggrAddTsReqParams->tspec[i].delayBound;
7875 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7876 pAggrAddTsReqParams->tspec[i].minPhyRate;
7877 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7878 pAggrAddTsReqParams->tspec[i].surplusBw;
7879 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7880 pAggrAddTsReqParams->tspec[i].mediumTime;
7881 }
7882
7883 /* TODO: tAggrAddTsParams doesn't have the following fields */
7884#if 0
7885 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7886 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7887 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7888 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7889#endif
7890 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7891
7892 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007893 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007895 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7896
7897 pWdaParams->pWdaContext = pWDA;
7898
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007900 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7901
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 if(IS_WDI_STATUS_FAILURE(status))
7903 {
7904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7905 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7907 vos_mem_free(pWdaParams);
7908
7909 /* send the failure response back to PE*/
7910 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7911 {
7912 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7913 }
7914
7915 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7916 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 return CONVERT_WDI2VOS_STATUS(status) ;
7919}
7920#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007921/*
Mihir Shetea4306052014-03-25 00:02:54 +05307922 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 * send Enter IMPS RSP back to PE
7924 */
Mihir Shetea4306052014-03-25 00:02:54 +05307925void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007926{
Mihir Shetea4306052014-03-25 00:02:54 +05307927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7928 tWDA_CbContext *pWDA;
7929
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307931 "<------ %s status=%d" ,__func__,status);
7932 if(NULL == pWdaParams)
7933 {
7934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7935 "%s: pWdaParams received NULL", __func__);
7936 VOS_ASSERT(0);
7937 return;
7938 }
7939
7940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7941
7942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7943 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007944 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 return ;
7946}
Mihir Shetea4306052014-03-25 00:02:54 +05307947
7948
7949/*
7950 * FUNCTION: WDA_EnterImpsReqCallback
7951 * Free memory and send Enter IMPS RSP back to PE.
7952 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7953 */
7954void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7955{
7956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7957 tWDA_CbContext *pWDA;
7958
7959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7960 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7961
7962 if(NULL == pWdaParams)
7963 {
7964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7965 "%s: pWdaParams received NULL", __func__);
7966 VOS_ASSERT(0);
7967 return;
7968 }
7969
7970 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7971
7972 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7973 {
7974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7975 vos_mem_free(pWdaParams);
7976 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7977 CONVERT_WDI2SIR_STATUS(wdiStatus));
7978 }
7979
7980 return;
7981}
Jeff Johnson295189b2012-06-20 16:38:30 -07007982/*
7983 * FUNCTION: WDA_ProcessEnterImpsReq
7984 * Request to WDI to Enter IMPS power state.
7985 */
7986VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7987{
7988 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307989 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7990 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007992 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307993
7994
7995 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7996 if (NULL == wdiEnterImpsReqParams)
7997 {
7998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7999 "%s: VOS MEM Alloc Failure", __func__);
8000 VOS_ASSERT(0);
8001 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8002 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8003 return VOS_STATUS_E_NOMEM;
8004 }
8005
8006 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8007 if (NULL == pWdaParams)
8008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8010 "%s: VOS MEM Alloc Failure", __func__);
8011 VOS_ASSERT(0);
8012 vos_mem_free(wdiEnterImpsReqParams);
8013 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8014 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8015 return VOS_STATUS_E_NOMEM;
8016 }
8017
8018 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8019 wdiEnterImpsReqParams->pUserData = pWdaParams;
8020
8021 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8022 pWdaParams->wdaMsgParam = NULL;
8023 pWdaParams->pWdaContext = pWDA;
8024
8025 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8026 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8027 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 if(IS_WDI_STATUS_FAILURE(status))
8029 {
8030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8031 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308032 vos_mem_free(wdiEnterImpsReqParams);
8033 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008034 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 return CONVERT_WDI2VOS_STATUS(status) ;
8037}
Jeff Johnson295189b2012-06-20 16:38:30 -07008038/*
8039 * FUNCTION: WDA_ExitImpsReqCallback
8040 * send Exit IMPS RSP back to PE
8041 */
8042void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8043{
8044 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008046 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008047 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 return ;
8049}
Jeff Johnson295189b2012-06-20 16:38:30 -07008050/*
8051 * FUNCTION: WDA_ProcessExitImpsReq
8052 * Request to WDI to Exit IMPS power state.
8053 */
8054VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8055{
8056 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008058 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008060 if(IS_WDI_STATUS_FAILURE(status))
8061 {
c_hpothue80fad42014-11-10 16:53:39 +05308062 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8063 {
8064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8065 FL("reload wlan driver"));
8066 wpalWlanReload();
8067 }
8068 else
8069 {
8070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson295189b2012-06-20 16:38:30 -07008071 "Failure in Exit IMPS REQ WDI API, free all the memory " );
c_hpothue80fad42014-11-10 16:53:39 +05308072 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
8073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 return CONVERT_WDI2VOS_STATUS(status) ;
8076}
Jeff Johnson295189b2012-06-20 16:38:30 -07008077/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008078 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 * send Enter BMPS RSP back to PE
8080 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008081void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008082{
8083 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8084 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008085 tEnterBmpsParams *pEnterBmpsRspParams;
8086
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008088 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 if(NULL == pWdaParams)
8090 {
8091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008092 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 VOS_ASSERT(0) ;
8094 return ;
8095 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008096
8097 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8098 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8099
8100 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008101 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008102
8103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008104 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008105 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8106
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 return ;
8108}
Jeff Johnson295189b2012-06-20 16:38:30 -07008109/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008110 * FUNCTION: WDA_EnterBmpsReqCallback
8111 * Free memory and send Enter BMPS RSP back to PE.
8112 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8113 */
8114void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8115{
8116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8117 tWDA_CbContext *pWDA;
8118 tEnterBmpsParams *pEnterBmpsRspParams;
8119
8120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8121 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8122
8123 if(NULL == pWdaParams)
8124 {
8125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8126 "%s: pWdaParams received NULL", __func__);
8127 VOS_ASSERT(0);
8128 return;
8129 }
8130
8131 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8132 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8133 pEnterBmpsRspParams->status = wdiStatus;
8134
8135 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8136 {
8137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8138 vos_mem_free(pWdaParams);
8139 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8140 }
8141
8142 return;
8143}
8144/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 * FUNCTION: WDA_ProcessEnterBmpsReq
8146 * Request to WDI to Enter BMPS power state.
8147 */
8148VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8149 tEnterBmpsParams *pEnterBmpsReqParams)
8150{
8151 WDI_Status status = WDI_STATUS_SUCCESS;
8152 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8153 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008155 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008156 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8157 {
8158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008159 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008160 VOS_ASSERT(0);
8161 return VOS_STATUS_E_FAILURE;
8162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008163 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8164 if (NULL == wdiEnterBmpsReqParams)
8165 {
8166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008169 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8170 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 return VOS_STATUS_E_NOMEM;
8172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008173 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8174 if (NULL == pWdaParams)
8175 {
8176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008177 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 VOS_ASSERT(0);
8179 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008180 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8181 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 return VOS_STATUS_E_NOMEM;
8183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008184 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8185 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8186 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8187 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008188 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008189 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8190 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8191 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008192 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8193 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008194
Jeff Johnson295189b2012-06-20 16:38:30 -07008195 /* Store param pointer as passed in by caller */
8196 /* store Params pass it to WDI */
8197 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008198 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008200 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008201 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008202 if (IS_WDI_STATUS_FAILURE(status))
8203 {
8204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8205 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008207 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008208 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008209 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008210 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008211 return CONVERT_WDI2VOS_STATUS(status);
8212}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008213
8214
8215static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8216 WDI_Status wdiStatus,
8217 tExitBmpsParams *pExitBmpsReqParams)
8218{
8219 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8220
8221 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8222}
8223
8224
Jeff Johnson295189b2012-06-20 16:38:30 -07008225/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008226 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008227 * send Exit BMPS RSP back to PE
8228 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008229void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008230{
8231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8232 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008233 tExitBmpsParams *pExitBmpsRspParams;
8234
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008236 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 if(NULL == pWdaParams)
8238 {
8239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008240 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 VOS_ASSERT(0) ;
8242 return ;
8243 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008244
8245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8246 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8247
8248 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008249 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008250
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8252 vos_mem_free(pWdaParams) ;
8253
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008254 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 return ;
8256}
Jeff Johnson295189b2012-06-20 16:38:30 -07008257/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008258 * FUNCTION: WDA_ExitBmpsReqCallback
8259 * Free memory and send Exit BMPS RSP back to PE.
8260 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8261 */
8262void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8263{
8264 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8265 tWDA_CbContext *pWDA;
8266 tExitBmpsParams *pExitBmpsRspParams;
8267
8268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8269 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8270
8271 if(NULL == pWdaParams)
8272 {
8273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8274 "%s: pWdaParams received NULL", __func__);
8275 VOS_ASSERT(0);
8276 return;
8277 }
8278
8279 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8280 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8281 pExitBmpsRspParams->status = wdiStatus;
8282
8283 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8284 {
8285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8286 vos_mem_free(pWdaParams);
8287 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8288 }
8289
8290 return;
8291}
8292/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008293 * FUNCTION: WDA_ProcessExitBmpsReq
8294 * Request to WDI to Exit BMPS power state.
8295 */
8296VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8297 tExitBmpsParams *pExitBmpsReqParams)
8298{
8299 WDI_Status status = WDI_STATUS_SUCCESS ;
8300 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8301 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8302 sizeof(WDI_ExitBmpsReqParamsType)) ;
8303 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 if(NULL == wdiExitBmpsReqParams)
8307 {
8308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008311 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 return VOS_STATUS_E_NOMEM;
8313 }
8314 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8315 if(NULL == pWdaParams)
8316 {
8317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008318 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008319 VOS_ASSERT(0);
8320 vos_mem_free(wdiExitBmpsReqParams);
8321 return VOS_STATUS_E_NOMEM;
8322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008324
8325 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8326
Yue Ma7f44bbe2013-04-12 11:47:39 -07008327 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8328 wdiExitBmpsReqParams->pUserData = pWdaParams;
8329
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 /* Store param pointer as passed in by caller */
8331 /* store Params pass it to WDI */
8332 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8333 pWdaParams->pWdaContext = pWDA;
8334 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008336 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 if(IS_WDI_STATUS_FAILURE(status))
8338 {
8339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8340 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8342 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008343 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 return CONVERT_WDI2VOS_STATUS(status) ;
8346}
Jeff Johnson295189b2012-06-20 16:38:30 -07008347/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008348 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 * send Enter UAPSD RSP back to PE
8350 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008351void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008352{
8353 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8354 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008355 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008357 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 if(NULL == pWdaParams)
8359 {
8360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008361 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008362 VOS_ASSERT(0) ;
8363 return ;
8364 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008365
8366 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8367 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8368
8369 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008370 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008371
Jeff Johnson295189b2012-06-20 16:38:30 -07008372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8373 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008374 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 return ;
8376}
Jeff Johnson295189b2012-06-20 16:38:30 -07008377/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008378 * FUNCTION: WDA_EnterUapsdReqCallback
8379 * Free memory and send Enter UAPSD RSP back to PE.
8380 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8381 */
8382void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8383{
8384 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8385 tWDA_CbContext *pWDA;
8386 tUapsdParams *pEnterUapsdRsqParams;
8387
8388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8389 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8390
8391 if(NULL == pWdaParams)
8392 {
8393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8394 "%s: pWdaParams received NULL", __func__);
8395 VOS_ASSERT(0);
8396 return;
8397 }
8398
8399 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8400 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8401 pEnterUapsdRsqParams->status = wdiStatus;
8402
8403 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8404 {
8405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8406 vos_mem_free(pWdaParams);
8407 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8408 }
8409
8410 return;
8411}
8412/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008413 * FUNCTION: WDA_ProcessEnterUapsdReq
8414 * Request to WDI to Enter UAPSD power state.
8415 */
8416VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8417 tUapsdParams *pEnterUapsdReqParams)
8418{
8419 WDI_Status status = WDI_STATUS_SUCCESS ;
8420 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8421 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8422 sizeof(WDI_EnterUapsdReqParamsType)) ;
8423 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008425 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008426 if(NULL == wdiEnterUapsdReqParams)
8427 {
8428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 VOS_ASSERT(0);
8431 return VOS_STATUS_E_NOMEM;
8432 }
8433 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8434 if(NULL == pWdaParams)
8435 {
8436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008437 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 VOS_ASSERT(0);
8439 vos_mem_free(wdiEnterUapsdReqParams);
8440 return VOS_STATUS_E_NOMEM;
8441 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008442 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8443 pEnterUapsdReqParams->beDeliveryEnabled;
8444 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8445 pEnterUapsdReqParams->beTriggerEnabled;
8446 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8447 pEnterUapsdReqParams->bkDeliveryEnabled;
8448 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8449 pEnterUapsdReqParams->bkTriggerEnabled;
8450 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8451 pEnterUapsdReqParams->viDeliveryEnabled;
8452 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8453 pEnterUapsdReqParams->viTriggerEnabled;
8454 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8455 pEnterUapsdReqParams->voDeliveryEnabled;
8456 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8457 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008458 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008459
Yue Ma7f44bbe2013-04-12 11:47:39 -07008460 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8461 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008462
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 /* Store param pointer as passed in by caller */
8464 /* store Params pass it to WDI */
8465 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8466 pWdaParams->pWdaContext = pWDA;
8467 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008468 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008469 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 if(IS_WDI_STATUS_FAILURE(status))
8471 {
8472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8473 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8474 vos_mem_free(pWdaParams->wdaMsgParam) ;
8475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8476 vos_mem_free(pWdaParams) ;
8477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008478 return CONVERT_WDI2VOS_STATUS(status) ;
8479}
Jeff Johnson295189b2012-06-20 16:38:30 -07008480/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008481 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 * send Exit UAPSD RSP back to PE
8483 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008484void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008485{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008486
8487 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8488 tWDA_CbContext *pWDA;
8489 tExitUapsdParams *pExitUapsdRspParams;
8490
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008492 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008493 if(NULL == pWdaParams)
8494 {
8495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008496 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008497 VOS_ASSERT(0);
8498 return;
8499 }
8500
8501 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8502 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8503
8504 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008505 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008506
8507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8508 vos_mem_free(pWdaParams) ;
8509
8510 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 return ;
8512}
Jeff Johnson295189b2012-06-20 16:38:30 -07008513/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008514 * FUNCTION: WDA_ExitUapsdReqCallback
8515 * Free memory and send Exit UAPSD RSP back to PE.
8516 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8517 */
8518void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8519{
8520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8521 tWDA_CbContext *pWDA;
8522 tExitUapsdParams *pExitUapsdRspParams;
8523
8524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8525 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8526
8527 if(NULL == pWdaParams)
8528 {
8529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8530 "%s: pWdaParams received NULL", __func__);
8531 VOS_ASSERT(0);
8532 return;
8533 }
8534
8535 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8536 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8537 pExitUapsdRspParams->status = wdiStatus;
8538
8539 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8540 {
8541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8542 vos_mem_free(pWdaParams);
8543 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8544 }
8545
8546 return;
8547}
8548/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 * FUNCTION: WDA_ProcessExitUapsdReq
8550 * Request to WDI to Exit UAPSD power state.
8551 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008552VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8553 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008554{
8555 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008556 tWDA_ReqParams *pWdaParams ;
8557 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8558 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8559 sizeof(WDI_ExitUapsdReqParamsType)) ;
8560
Jeff Johnson295189b2012-06-20 16:38:30 -07008561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008562 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008563
8564 if(NULL == wdiExitUapsdReqParams)
8565 {
8566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008567 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008568 VOS_ASSERT(0);
8569 return VOS_STATUS_E_NOMEM;
8570 }
8571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8572 if(NULL == pWdaParams)
8573 {
8574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008575 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008576 VOS_ASSERT(0);
8577 vos_mem_free(wdiExitUapsdReqParams);
8578 return VOS_STATUS_E_NOMEM;
8579 }
8580
8581 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008582 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8583 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008584
8585 /* Store param pointer as passed in by caller */
8586 /* store Params pass it to WDI */
8587 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8588 pWdaParams->pWdaContext = pWDA;
8589 pWdaParams->wdaMsgParam = pExitUapsdParams;
8590
Yue Ma7f44bbe2013-04-12 11:47:39 -07008591 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 if(IS_WDI_STATUS_FAILURE(status))
8593 {
8594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8595 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008596 vos_mem_free(pWdaParams->wdaMsgParam) ;
8597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8598 vos_mem_free(pWdaParams) ;
8599
Jeff Johnson295189b2012-06-20 16:38:30 -07008600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 return CONVERT_WDI2VOS_STATUS(status) ;
8602}
8603
Jeff Johnson295189b2012-06-20 16:38:30 -07008604/*
8605 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8606 *
8607 */
8608void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8609{
8610 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008612 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008613 if(NULL == pWdaParams)
8614 {
8615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008616 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 VOS_ASSERT(0) ;
8618 return ;
8619 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 if( pWdaParams != NULL )
8621 {
8622 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8623 {
8624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8625 }
8626 if( pWdaParams->wdaMsgParam != NULL )
8627 {
8628 vos_mem_free(pWdaParams->wdaMsgParam) ;
8629 }
8630 vos_mem_free(pWdaParams) ;
8631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 return ;
8633}
Jeff Johnson295189b2012-06-20 16:38:30 -07008634/*
8635 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8636 * Request to WDI to set the power save params at start.
8637 */
8638VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8639 tSirPowerSaveCfg *pPowerSaveCfg)
8640{
8641 WDI_Status status = WDI_STATUS_SUCCESS ;
8642 tHalCfg *tlvStruct = NULL ;
8643 tANI_U8 *tlvStructStart = NULL ;
8644 v_PVOID_t *configParam;
8645 tANI_U32 configParamSize;
8646 tANI_U32 *configDataValue;
8647 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8648 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008650 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008651 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8652 {
8653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008654 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008656 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008657 return VOS_STATUS_E_FAILURE;
8658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8660 if (NULL == wdiPowerSaveCfg)
8661 {
8662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008664 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008665 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 return VOS_STATUS_E_NOMEM;
8667 }
8668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8669 if(NULL == pWdaParams)
8670 {
8671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008672 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008673 VOS_ASSERT(0);
8674 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008675 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008676 return VOS_STATUS_E_NOMEM;
8677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008678 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8679 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 if(NULL == configParam)
8681 {
8682 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008683 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008684 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008685 vos_mem_free(pWdaParams);
8686 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008687 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008688 return VOS_STATUS_E_NOMEM;
8689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 vos_mem_set(configParam, configParamSize, 0);
8691 wdiPowerSaveCfg->pConfigBuffer = configParam;
8692 tlvStruct = (tHalCfg *)configParam;
8693 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008694 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8695 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8696 tlvStruct->length = sizeof(tANI_U32);
8697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8698 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008699 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8700 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008701 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8702 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8703 tlvStruct->length = sizeof(tANI_U32);
8704 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8705 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008706 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8707 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8709 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8710 tlvStruct->length = sizeof(tANI_U32);
8711 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8712 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008713 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8714 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008715 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8716 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8717 tlvStruct->length = sizeof(tANI_U32);
8718 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8719 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008722 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8723 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8724 tlvStruct->length = sizeof(tANI_U32);
8725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8726 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008727 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8728 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8730 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8731 tlvStruct->length = sizeof(tANI_U32);
8732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8733 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8735 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008736 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8737 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8738 tlvStruct->length = sizeof(tANI_U32);
8739 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8740 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8742 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008743 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8744 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8745 tlvStruct->length = sizeof(tANI_U32);
8746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8747 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8748 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8749 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8751 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8752 tlvStruct->length = sizeof(tANI_U32);
8753 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8754 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8755 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8756 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008757 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8758 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8759 tlvStruct->length = sizeof(tANI_U32);
8760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8761 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008762 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8763 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8765 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8766 tlvStruct->length = sizeof(tANI_U32);
8767 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8768 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8770 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008771 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 /* store Params pass it to WDI */
8774 pWdaParams->wdaMsgParam = configParam;
8775 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8776 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8778 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 if(IS_WDI_STATUS_FAILURE(status))
8780 {
8781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8782 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8783 vos_mem_free(pWdaParams->wdaMsgParam);
8784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8785 vos_mem_free(pWdaParams);
8786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008787 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 return CONVERT_WDI2VOS_STATUS(status);
8789}
Jeff Johnson295189b2012-06-20 16:38:30 -07008790/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008791 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 *
8793 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008794void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008795{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8797
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008799 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008800
8801 if(NULL == pWdaParams)
8802 {
8803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8804 "%s: pWdaParams received NULL", __func__);
8805 VOS_ASSERT(0);
8806 return ;
8807 }
8808
8809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 vos_mem_free(pWdaParams);
8811
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 return ;
8813}
Jeff Johnson295189b2012-06-20 16:38:30 -07008814/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008815 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8816 * Free memory.
8817 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8818 */
8819void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8820{
8821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8822
8823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8824 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8825
8826 if(NULL == pWdaParams)
8827 {
8828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8829 "%s: pWdaParams received NULL", __func__);
8830 VOS_ASSERT(0);
8831 return;
8832 }
8833
8834 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8835 {
8836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8837 vos_mem_free(pWdaParams);
8838 }
8839
8840 return;
8841}
8842/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 * FUNCTION: WDA_SetUapsdAcParamsReq
8844 * Request to WDI to set the UAPSD params for an ac (sta mode).
8845 */
8846VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8847 tUapsdInfo *pUapsdInfo)
8848{
8849 WDI_Status status = WDI_STATUS_SUCCESS;
8850 tWDA_CbContext *pWDA = NULL ;
8851 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8852 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8853 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8854 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008856 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008857 if(NULL == wdiUapsdParams)
8858 {
8859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008860 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008861 VOS_ASSERT(0);
8862 return VOS_STATUS_E_NOMEM;
8863 }
8864 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8865 if(NULL == pWdaParams)
8866 {
8867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008868 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 VOS_ASSERT(0);
8870 vos_mem_free(wdiUapsdParams);
8871 return VOS_STATUS_E_NOMEM;
8872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008873 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8874 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8875 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8876 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8877 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8878 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008879 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8880 wdiUapsdParams->pUserData = pWdaParams;
8881
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008883 pWdaParams->pWdaContext = pWDA;
8884 /* Store param pointer as passed in by caller */
8885 pWdaParams->wdaMsgParam = pUapsdInfo;
8886 /* store Params pass it to WDI */
8887 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008888 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008889 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008891 if(IS_WDI_STATUS_FAILURE(status))
8892 {
8893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8894 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8896 vos_mem_free(pWdaParams);
8897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008898 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8899 return VOS_STATUS_SUCCESS;
8900 else
8901 return VOS_STATUS_E_FAILURE;
8902
Jeff Johnson295189b2012-06-20 16:38:30 -07008903}
8904/*
8905 * FUNCTION: WDA_ClearUapsdAcParamsReq
8906 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8907 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8908 * and again enter the UPASD with the modified params. Hence the disable
8909 * function was kept empty.
8910 *
8911 */
8912VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8913{
8914 /* do nothing */
8915 return VOS_STATUS_SUCCESS;
8916}
Jeff Johnson295189b2012-06-20 16:38:30 -07008917/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008918 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 *
8920 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008921void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008922{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8924
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008926 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008927
8928 if(NULL == pWdaParams)
8929 {
8930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008931 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008932 VOS_ASSERT(0) ;
8933 return ;
8934 }
8935
8936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8937 vos_mem_free(pWdaParams->wdaMsgParam);
8938 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008939
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 //print a msg, nothing else to do
8941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008942 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008943 return ;
8944}
Jeff Johnson295189b2012-06-20 16:38:30 -07008945/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008946 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8947 * Free memory.
8948 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8949 */
8950void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8951{
8952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8953
8954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8955 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8956
8957 if(NULL == pWdaParams)
8958 {
8959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8960 "%s: pWdaParams received NULL", __func__);
8961 VOS_ASSERT(0);
8962 return;
8963 }
8964
8965 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8966 {
8967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8968 vos_mem_free(pWdaParams->wdaMsgParam);
8969 vos_mem_free(pWdaParams);
8970 }
8971
8972 return;
8973}
8974/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008975 * FUNCTION: WDA_UpdateUapsdParamsReq
8976 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8977 */
8978VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8979 tUpdateUapsdParams* pUpdateUapsdInfo)
8980{
8981 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008982 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8984 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8985 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008986 tWDA_ReqParams *pWdaParams = NULL;
8987
Jeff Johnson295189b2012-06-20 16:38:30 -07008988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008989 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 if(NULL == wdiUpdateUapsdParams)
8991 {
8992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 VOS_ASSERT(0);
8995 return VOS_STATUS_E_NOMEM;
8996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8998 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8999 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009000 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9001 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009002
9003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9004 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 {
9006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009008 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009009 vos_mem_free(pUpdateUapsdInfo);
9010 vos_mem_free(wdiUpdateUapsdParams);
9011 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009014 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009015 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009016 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9017 pWdaParams->pWdaContext = pWDA;
9018
Jeff Johnson43971f52012-07-17 12:26:56 -07009019 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009020 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009021 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009022
Jeff Johnson43971f52012-07-17 12:26:56 -07009023 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009024 {
9025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9026 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009027 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9029 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009030 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009031 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009032 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009033}
Jeff Johnson295189b2012-06-20 16:38:30 -07009034/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009035 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 *
9037 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009038void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009039{
9040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009042 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009043 if(WDI_STATUS_SUCCESS != wdiStatus)
9044 {
9045 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009046 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 if(NULL == pWdaParams)
9049 {
9050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009051 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 VOS_ASSERT(0) ;
9053 return ;
9054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9056 vos_mem_free(pWdaParams->wdaMsgParam);
9057 vos_mem_free(pWdaParams);
9058 return ;
9059}
Jeff Johnson295189b2012-06-20 16:38:30 -07009060/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009061 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9062 * Free memory.
9063 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9064 */
9065void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9066{
9067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9068
9069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9070 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9071
9072 if(NULL == pWdaParams)
9073 {
9074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9075 "%s: pWdaParams received NULL", __func__);
9076 VOS_ASSERT(0);
9077 return;
9078 }
9079
9080 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9081 {
9082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9083 vos_mem_free(pWdaParams->wdaMsgParam);
9084 vos_mem_free(pWdaParams);
9085 }
9086
9087 return;
9088}
9089/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009090 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9091 *
9092 */
9093VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9094 tSirWlanSetRxpFilters *pWlanSuspendParam)
9095{
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009097 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309098 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009099 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309100 /* Sanity Check
9101 * This is very unlikely and add assert to collect more info next time */
9102 if(NULL == pWlanSuspendParam)
9103 {
9104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9105 "%s: pWlanSuspendParam received NULL", __func__);
9106 VOS_ASSERT(0) ;
9107 return VOS_STATUS_E_FAULT;
9108 }
9109 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9110 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009113 if(NULL == wdiRxpFilterParams)
9114 {
9115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 VOS_ASSERT(0);
9118 vos_mem_free(pWlanSuspendParam);
9119 return VOS_STATUS_E_NOMEM;
9120 }
9121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9122 if(NULL == pWdaParams)
9123 {
9124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 VOS_ASSERT(0);
9127 vos_mem_free(wdiRxpFilterParams);
9128 vos_mem_free(pWlanSuspendParam);
9129 return VOS_STATUS_E_NOMEM;
9130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009131 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9132 pWlanSuspendParam->setMcstBcstFilter;
9133 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9134 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9135
Yue Ma7f44bbe2013-04-12 11:47:39 -07009136 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9137 wdiRxpFilterParams->pUserData = pWdaParams;
9138
Jeff Johnson295189b2012-06-20 16:38:30 -07009139 pWdaParams->pWdaContext = pWDA;
9140 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9141 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009142 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009143 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009144 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009145 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 {
9147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9148 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009149 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9151 vos_mem_free(pWdaParams->wdaMsgParam);
9152 vos_mem_free(pWdaParams);
9153 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009154 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009155}
Jeff Johnson295189b2012-06-20 16:38:30 -07009156/*
9157 * FUNCTION: WDA_WdiIndicationCallback
9158 *
9159 */
9160void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9161 void* pUserData)
9162{
9163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009164 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009165}
Jeff Johnson295189b2012-06-20 16:38:30 -07009166/*
9167 * FUNCTION: WDA_ProcessWlanSuspendInd
9168 *
9169 */
9170VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9171 tSirWlanSuspendParam *pWlanSuspendParam)
9172{
9173 WDI_Status wdiStatus;
9174 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009176 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009177 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9178 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9179 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9180 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9183 if(WDI_STATUS_PENDING == wdiStatus)
9184 {
9185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009186 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009187 }
9188 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9189 {
9190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009191 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 vos_mem_free(pWlanSuspendParam);
9194 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9195}
9196
Chet Lanctot186b5732013-03-18 10:26:30 -07009197#ifdef WLAN_FEATURE_11W
9198/*
9199 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9200 *
9201 */
9202VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9203 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9204{
9205 WDI_Status wdiStatus;
9206 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9208 "------> %s ", __func__);
9209
9210 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9211 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9212 sizeof(tSirMacAddr));
9213
9214 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9215 wdiExclUnencryptParams.pUserData = pWDA;
9216
9217 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9218 if(WDI_STATUS_PENDING == wdiStatus)
9219 {
9220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9221 "Pending received for %s:%d ", __func__, __LINE__ );
9222 }
9223 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9224 {
9225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9226 "Failure in %s:%d ", __func__, __LINE__ );
9227 }
9228 vos_mem_free(pExclUnencryptParam);
9229 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9230}
9231#endif
9232
Jeff Johnson295189b2012-06-20 16:38:30 -07009233/*
9234 * FUNCTION: WDA_ProcessWlanResumeCallback
9235 *
9236 */
9237void WDA_ProcessWlanResumeCallback(
9238 WDI_SuspendResumeRspParamsType *resumeRspParams,
9239 void* pUserData)
9240{
9241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009243 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009244 if(NULL == pWdaParams)
9245 {
9246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009247 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 VOS_ASSERT(0) ;
9249 return ;
9250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009251 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9252 {
9253 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009254 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9257 vos_mem_free(pWdaParams->wdaMsgParam);
9258 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 return ;
9260}
Jeff Johnson295189b2012-06-20 16:38:30 -07009261/*
9262 * FUNCTION: WDA_ProcessWlanResumeReq
9263 *
9264 */
9265VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9266 tSirWlanResumeParam *pWlanResumeParam)
9267{
9268 WDI_Status wdiStatus;
9269 WDI_ResumeParamsType *wdiResumeParams =
9270 (WDI_ResumeParamsType *)vos_mem_malloc(
9271 sizeof(WDI_ResumeParamsType) ) ;
9272 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009274 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009275 if(NULL == wdiResumeParams)
9276 {
9277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009278 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 VOS_ASSERT(0);
9280 return VOS_STATUS_E_NOMEM;
9281 }
9282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9283 if(NULL == pWdaParams)
9284 {
9285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 VOS_ASSERT(0);
9288 vos_mem_free(wdiResumeParams);
9289 return VOS_STATUS_E_NOMEM;
9290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009291 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9292 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009294 wdiResumeParams->wdiReqStatusCB = NULL;
9295 pWdaParams->wdaMsgParam = pWlanResumeParam;
9296 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9297 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9299 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9300 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009301 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9302 {
9303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9304 "Failure in Host Resume REQ WDI API, free all the memory " );
9305 VOS_ASSERT(0);
9306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9307 vos_mem_free(pWdaParams->wdaMsgParam);
9308 vos_mem_free(pWdaParams);
9309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009310 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9311}
9312
Jeff Johnson295189b2012-06-20 16:38:30 -07009313/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009314 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 *
9316 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009317void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009318{
9319 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009321 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 if(NULL == pWdaParams)
9323 {
9324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009325 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 VOS_ASSERT(0) ;
9327 return ;
9328 }
9329
9330 vos_mem_free(pWdaParams->wdaMsgParam) ;
9331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9332 vos_mem_free(pWdaParams) ;
9333 /*
9334 * No respone required for SetBeaconFilter req so just free the request
9335 * param here
9336 */
9337
Jeff Johnson295189b2012-06-20 16:38:30 -07009338 return ;
9339}
Jeff Johnson295189b2012-06-20 16:38:30 -07009340/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009341 * FUNCTION: WDA_SetBeaconFilterReqCallback
9342 * Free memory.
9343 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9344 */
9345void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9346{
9347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9348
9349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9350 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9351
9352 if(NULL == pWdaParams)
9353 {
9354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9355 "%s: pWdaParams received NULL", __func__);
9356 VOS_ASSERT(0);
9357 return;
9358 }
9359
9360 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9361 {
9362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9363 vos_mem_free(pWdaParams->wdaMsgParam);
9364 vos_mem_free(pWdaParams);
9365 }
9366
9367 return;
9368}
9369/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009370 * FUNCTION: WDA_SetBeaconFilterReq
9371 * Request to WDI to send the beacon filtering related information.
9372 */
9373VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9374 tBeaconFilterMsg* pBeaconFilterInfo)
9375{
9376 WDI_Status status = WDI_STATUS_SUCCESS;
9377 tANI_U8 *dstPtr, *srcPtr;
9378 tANI_U8 filterLength;
9379 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9380 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9381 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9382 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009384 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 if(NULL == wdiBeaconFilterInfo)
9386 {
9387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009388 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009389 VOS_ASSERT(0);
9390 return VOS_STATUS_E_NOMEM;
9391 }
9392 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9393 if(NULL == pWdaParams)
9394 {
9395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009397 VOS_ASSERT(0);
9398 vos_mem_free(wdiBeaconFilterInfo);
9399 return VOS_STATUS_E_NOMEM;
9400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9402 pBeaconFilterInfo->beaconInterval;
9403 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9404 pBeaconFilterInfo->capabilityInfo;
9405 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9406 pBeaconFilterInfo->capabilityMask;
9407 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009408
9409 //Fill the BssIdx
9410 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9411
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 //Fill structure with info contained in the beaconFilterTable
9413 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9414 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9415 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9416 if(WDI_BEACON_FILTER_LEN < filterLength)
9417 {
9418 filterLength = WDI_BEACON_FILTER_LEN;
9419 }
9420 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009421 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9422 wdiBeaconFilterInfo->pUserData = pWdaParams;
9423
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 /* Store param pointer as passed in by caller */
9425 /* store Params pass it to WDI */
9426 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9427 pWdaParams->pWdaContext = pWDA;
9428 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9429
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009431 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009432 if(IS_WDI_STATUS_FAILURE(status))
9433 {
9434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9435 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9436 vos_mem_free(pWdaParams->wdaMsgParam) ;
9437 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9438 vos_mem_free(pWdaParams) ;
9439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 return CONVERT_WDI2VOS_STATUS(status) ;
9441}
Jeff Johnson295189b2012-06-20 16:38:30 -07009442/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009443 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 *
9445 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009446void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009447{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009448 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9449
Jeff Johnson295189b2012-06-20 16:38:30 -07009450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009451 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009452
9453 if(NULL == pWdaParams)
9454 {
9455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009456 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009457 VOS_ASSERT(0) ;
9458 return ;
9459 }
9460
9461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9462 vos_mem_free(pWdaParams->wdaMsgParam);
9463 vos_mem_free(pWdaParams);
9464
Jeff Johnson295189b2012-06-20 16:38:30 -07009465 //print a msg, nothing else to do
9466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009467 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009468 return ;
9469}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009470/*
9471 * FUNCTION: WDA_RemBeaconFilterReqCallback
9472 * Free memory.
9473 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9474 */
9475void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9476{
9477 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9478
9479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9480 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9481
9482 if(NULL == pWdaParams)
9483 {
9484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9485 "%s: pWdaParams received NULL", __func__);
9486 VOS_ASSERT(0);
9487 return;
9488 }
9489
9490 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9491 {
9492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9493 vos_mem_free(pWdaParams->wdaMsgParam);
9494 vos_mem_free(pWdaParams);
9495 }
9496
9497 return;
9498}
Jeff Johnson295189b2012-06-20 16:38:30 -07009499 // TODO: PE does not have this feature for now implemented,
9500 // but the support for removing beacon filter exists between
9501 // HAL and FW. This function can be called whenever PE defines
9502 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009503/*
9504 * FUNCTION: WDA_RemBeaconFilterReq
9505 * Request to WDI to send the removal of beacon filtering related information.
9506 */
9507VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9508 tRemBeaconFilterMsg* pBeaconFilterInfo)
9509{
9510 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009511 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009512 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9513 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9514 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009515 tWDA_ReqParams *pWdaParams ;
9516
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009518 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009519 if(NULL == wdiBeaconFilterInfo)
9520 {
9521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009522 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009523 VOS_ASSERT(0);
9524 return VOS_STATUS_E_NOMEM;
9525 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009526 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9527 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 {
9529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009530 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009531 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009532 vos_mem_free(wdiBeaconFilterInfo);
9533 vos_mem_free(pBeaconFilterInfo);
9534 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009535 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009536
9537 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9538 pBeaconFilterInfo->ucIeCount;
9539 //Fill structure with info contained in the ucRemIeId
9540 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9541 pBeaconFilterInfo->ucRemIeId,
9542 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9543 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9544 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009545
9546 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009547 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009548 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009549 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9550
9551 pWdaParams->pWdaContext = pWDA;
9552
Jeff Johnson43971f52012-07-17 12:26:56 -07009553 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009554 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009555 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009556 {
9557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9558 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009559 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9561 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009562 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009564 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009565}
Jeff Johnson295189b2012-06-20 16:38:30 -07009566/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009567 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 *
9569 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009570void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009571{
9572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009574 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009575 if(NULL == pWdaParams)
9576 {
9577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009578 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009579 VOS_ASSERT(0) ;
9580 return ;
9581 }
9582
9583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9584 vos_mem_free(pWdaParams) ;
9585
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 return ;
9587}
Jeff Johnson295189b2012-06-20 16:38:30 -07009588/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009589 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9590 * Free memory.
9591 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9592 */
9593void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9594{
9595 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9596
9597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9598 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9599
9600 if(NULL == pWdaParams)
9601 {
9602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9603 "%s: pWdaParams received NULL", __func__);
9604 VOS_ASSERT(0);
9605 return;
9606 }
9607
9608 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9609 {
9610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9611 vos_mem_free(pWdaParams);
9612 }
9613
9614 return;
9615}
9616/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009617 * FUNCTION: WDA_SetRSSIThresholdsReq
9618 * Request to WDI to set the RSSI thresholds (sta mode).
9619 */
9620VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9621{
9622 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009623 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009624 tWDA_CbContext *pWDA = NULL ;
9625 v_PVOID_t pVosContext = NULL;
9626 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9627 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9628 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9629 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009631 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009632 if(NULL == wdiRSSIThresholdsInfo)
9633 {
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009635 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009636 VOS_ASSERT(0);
9637 return VOS_STATUS_E_NOMEM;
9638 }
9639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9640 if(NULL == pWdaParams)
9641 {
9642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009644 VOS_ASSERT(0);
9645 vos_mem_free(wdiRSSIThresholdsInfo);
9646 return VOS_STATUS_E_NOMEM;
9647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009648 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009649 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9650 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9651 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009652 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9653 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9654 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009655 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9656 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9657 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009658 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9659 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009660 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9661 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9662
Jeff Johnson295189b2012-06-20 16:38:30 -07009663 /* Store param pointer as passed in by caller */
9664 /* store Params pass it to WDI */
9665 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9666 pWdaParams->pWdaContext = pWDA;
9667 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009668 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009669 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009670 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009671 {
9672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9673 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009674 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9676 vos_mem_free(pWdaParams) ;
9677 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009678 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009679
9680}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009681/*
Yue Madb90ac12013-04-04 13:39:13 -07009682 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009683 *
9684 */
Yue Madb90ac12013-04-04 13:39:13 -07009685void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009686{
9687 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9688
9689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009690 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009691 if(NULL == pWdaParams)
9692 {
9693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009694 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009695 VOS_ASSERT(0) ;
9696 return ;
9697 }
9698
9699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9700 vos_mem_free(pWdaParams->wdaMsgParam);
9701 vos_mem_free(pWdaParams) ;
9702
9703 //print a msg, nothing else to do
9704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009705 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009706 return ;
9707}
Jeff Johnson295189b2012-06-20 16:38:30 -07009708/*
Yue Madb90ac12013-04-04 13:39:13 -07009709 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009710 * Free memory.
9711 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009712 */
9713void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9714{
9715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9716
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9718 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9719
9720 if(NULL == pWdaParams)
9721 {
9722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9723 "%s: Invalid pWdaParams pointer", __func__);
9724 VOS_ASSERT(0);
9725 return;
9726 }
9727
9728 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9729 {
9730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9731 vos_mem_free(pWdaParams->wdaMsgParam);
9732 vos_mem_free(pWdaParams);
9733 }
9734
9735 return;
9736}
9737/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 * FUNCTION: WDA_ProcessHostOffloadReq
9739 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9740 * to broadcast traffic (sta mode).
9741 */
9742VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9743 tSirHostOffloadReq *pHostOffloadParams)
9744{
9745 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009746 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009747 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9748 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9749 sizeof(WDI_HostOffloadReqParamsType)) ;
9750 tWDA_ReqParams *pWdaParams ;
9751
9752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009753 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009754
9755 if(NULL == wdiHostOffloadInfo)
9756 {
9757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009759 VOS_ASSERT(0);
9760 return VOS_STATUS_E_NOMEM;
9761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009762 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9763 if(NULL == pWdaParams)
9764 {
9765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009767 VOS_ASSERT(0);
9768 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009769 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009770 return VOS_STATUS_E_NOMEM;
9771 }
9772
9773 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9774 pHostOffloadParams->offloadType;
9775 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9776 pHostOffloadParams->enableOrDisable;
9777
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009778 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9779 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9780
Jeff Johnson295189b2012-06-20 16:38:30 -07009781 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9782 {
9783 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9784 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9785 pHostOffloadParams->params.hostIpv4Addr,
9786 4);
9787 break;
9788 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9789 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9790 pHostOffloadParams->params.hostIpv6Addr,
9791 16);
9792 break;
9793 case SIR_IPV6_NS_OFFLOAD:
9794 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9795 pHostOffloadParams->params.hostIpv6Addr,
9796 16);
9797
9798#ifdef WLAN_NS_OFFLOAD
9799 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9800 {
9801 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9802 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9803 16);
9804 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9805 }
9806 else
9807 {
9808 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9809 }
9810
9811 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9812 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9813 16);
9814 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9815 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9816 6);
9817
9818 //Only two are supported so let's go through them without a loop
9819 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9820 {
9821 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9822 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9823 16);
9824 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9825 }
9826 else
9827 {
9828 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9829 }
9830
9831 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9832 {
9833 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9834 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9835 16);
9836 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9837 }
9838 else
9839 {
9840 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9841 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309842 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9843 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009844 break;
9845#endif //WLAN_NS_OFFLOAD
9846 default:
9847 {
9848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9849 "No Handling for Offload Type %x in WDA "
9850 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9851 //WDA_VOS_ASSERT(0) ;
9852 }
9853 }
Yue Madb90ac12013-04-04 13:39:13 -07009854 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9855 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009856
Jeff Johnson295189b2012-06-20 16:38:30 -07009857 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009858 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009859 /* store Params pass it to WDI */
9860 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9861 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009862
Jeff Johnson295189b2012-06-20 16:38:30 -07009863
Jeff Johnson43971f52012-07-17 12:26:56 -07009864 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009865 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009866
Jeff Johnson43971f52012-07-17 12:26:56 -07009867 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009868 {
9869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +05309870 "Failure in host offload REQ WDI API, free all the memory %d",
9871 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -07009872 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9874 vos_mem_free(pWdaParams->wdaMsgParam);
9875 vos_mem_free(pWdaParams) ;
9876 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009877 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009878
9879}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009880/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009881 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 *
9883 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009884void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009885{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9887
Jeff Johnson295189b2012-06-20 16:38:30 -07009888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009889 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009890
9891 if(NULL == pWdaParams)
9892 {
9893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009894 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009895 VOS_ASSERT(0) ;
9896 return ;
9897 }
9898
9899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9900 vos_mem_free(pWdaParams->wdaMsgParam);
9901 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009902
Jeff Johnson295189b2012-06-20 16:38:30 -07009903 //print a msg, nothing else to do
9904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009905 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009906 return ;
9907}
Jeff Johnson295189b2012-06-20 16:38:30 -07009908/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009909 * FUNCTION: WDA_KeepAliveReqCallback
9910 * Free memory.
9911 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9912 */
9913void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9914{
9915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9916
9917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9918 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9919
9920 if(NULL == pWdaParams)
9921 {
9922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9923 "%s: pWdaParams received NULL", __func__);
9924 VOS_ASSERT(0);
9925 return;
9926 }
9927
9928 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9929 {
9930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9931 vos_mem_free(pWdaParams->wdaMsgParam);
9932 vos_mem_free(pWdaParams);
9933 }
9934
9935 return;
9936}
9937/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 * FUNCTION: WDA_ProcessKeepAliveReq
9939 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9940 * wakeup due to broadcast traffic (sta mode).
9941 */
9942VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9943 tSirKeepAliveReq *pKeepAliveParams)
9944{
9945 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009946 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9948 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9949 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009950 tWDA_ReqParams *pWdaParams;
9951
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009953 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 if(NULL == wdiKeepAliveInfo)
9955 {
9956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009957 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009959 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 return VOS_STATUS_E_NOMEM;
9961 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009962
9963 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9964 if(NULL == pWdaParams)
9965 {
9966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009967 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009968 VOS_ASSERT(0);
9969 vos_mem_free(wdiKeepAliveInfo);
9970 vos_mem_free(pKeepAliveParams);
9971 return VOS_STATUS_E_NOMEM;
9972 }
9973
Jeff Johnson295189b2012-06-20 16:38:30 -07009974 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9975 pKeepAliveParams->packetType;
9976 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9977 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009978
9979 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9980 pKeepAliveParams->bssId,
9981 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009982
9983 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9984 {
9985 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9986 pKeepAliveParams->hostIpv4Addr,
9987 SIR_IPV4_ADDR_LEN);
9988 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9989 pKeepAliveParams->destIpv4Addr,
9990 SIR_IPV4_ADDR_LEN);
9991 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9992 pKeepAliveParams->destMacAddr,
9993 SIR_MAC_ADDR_LEN);
9994 }
9995 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9996 {
9997 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9998 SIR_IPV4_ADDR_LEN,
9999 0);
10000 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10001 SIR_IPV4_ADDR_LEN,
10002 0);
10003 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10004 SIR_MAC_ADDR_LEN,
10005 0);
10006 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010007 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10008 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010009
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010011 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010012 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010013 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10014 pWdaParams->pWdaContext = pWDA;
10015
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10017 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10018 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10019 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10020 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10022 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10023 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10024 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10025 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10027 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10028 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10029 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10030 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10031 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10032 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10033 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10035 "TimePeriod %d PacketType %d",
10036 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10037 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010038 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010039 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010040
Jeff Johnson43971f52012-07-17 12:26:56 -070010041 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 {
10043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10044 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010045 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10047 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010048 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010049 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010050 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010051
10052}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010053/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010054 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010055 *
10056 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010057void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010058 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10059 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010060{
10061 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010063 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 if(NULL == pWdaParams)
10065 {
10066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010067 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010068 VOS_ASSERT(0) ;
10069 return ;
10070 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10072 vos_mem_free(pWdaParams->wdaMsgParam);
10073 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 return ;
10075}
Jeff Johnson295189b2012-06-20 16:38:30 -070010076/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010077 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10078 * Free memory.
10079 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10080 */
10081void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10082{
10083 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10084
10085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10086 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10087
10088 if(NULL == pWdaParams)
10089 {
10090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10091 "%s: pWdaParams received NULL", __func__);
10092 VOS_ASSERT(0);
10093 return;
10094 }
10095
10096 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10097 {
10098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10099 vos_mem_free(pWdaParams->wdaMsgParam);
10100 vos_mem_free(pWdaParams);
10101 }
10102
10103 return;
10104}
10105
10106/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010107 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10108 * Request to WDI to add WOWL Bcast pattern
10109 */
10110VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10111 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10112{
10113 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010114 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10116 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10117 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10118 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010120 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010121 if(NULL == wdiWowlAddBcPtrnInfo)
10122 {
10123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010125 VOS_ASSERT(0);
10126 return VOS_STATUS_E_NOMEM;
10127 }
10128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10129 if(NULL == pWdaParams)
10130 {
10131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010133 VOS_ASSERT(0);
10134 vos_mem_free(wdiWowlAddBcPtrnInfo);
10135 return VOS_STATUS_E_NOMEM;
10136 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010137 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10138 pWowlAddBcPtrnParams->ucPatternId;
10139 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10140 pWowlAddBcPtrnParams->ucPatternByteOffset;
10141 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10142 pWowlAddBcPtrnParams->ucPatternMaskSize;
10143 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10144 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10146 {
10147 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10148 pWowlAddBcPtrnParams->ucPattern,
10149 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10150 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10151 pWowlAddBcPtrnParams->ucPatternMask,
10152 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10153 }
10154 else
10155 {
10156 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10157 pWowlAddBcPtrnParams->ucPattern,
10158 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10159 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10160 pWowlAddBcPtrnParams->ucPatternMask,
10161 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10162
10163 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10164 pWowlAddBcPtrnParams->ucPatternExt,
10165 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10166 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10167 pWowlAddBcPtrnParams->ucPatternMaskExt,
10168 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10169 }
10170
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010171 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10172 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10173
Yue Ma7f44bbe2013-04-12 11:47:39 -070010174 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10175 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 /* Store param pointer as passed in by caller */
10177 /* store Params pass it to WDI */
10178 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10179 pWdaParams->pWdaContext = pWDA;
10180 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010181 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010182 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010183 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 {
10185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10186 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010187 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 vos_mem_free(pWdaParams->wdaMsgParam) ;
10189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10190 vos_mem_free(pWdaParams) ;
10191 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010192 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010193
10194}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010195/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010196 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010197 *
10198 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010199void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010200 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10201 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010202{
10203 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010205 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010206 if(NULL == pWdaParams)
10207 {
10208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010209 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 VOS_ASSERT(0) ;
10211 return ;
10212 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10214 vos_mem_free(pWdaParams->wdaMsgParam);
10215 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 return ;
10217}
Jeff Johnson295189b2012-06-20 16:38:30 -070010218/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010219 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10220 * Free memory.
10221 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10222 */
10223void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10224{
10225 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10226
10227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10228 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10229
10230 if(NULL == pWdaParams)
10231 {
10232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10233 "%s: pWdaParams received NULL", __func__);
10234 VOS_ASSERT(0);
10235 return;
10236 }
10237
10238 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10239 {
10240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10241 vos_mem_free(pWdaParams->wdaMsgParam);
10242 vos_mem_free(pWdaParams);
10243 }
10244
10245 return;
10246}
10247/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010248 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10249 * Request to WDI to delete WOWL Bcast pattern
10250 */
10251VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10252 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10253{
10254 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010255 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10257 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10258 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10259 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010261 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 if(NULL == wdiWowlDelBcPtrnInfo)
10263 {
10264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 VOS_ASSERT(0);
10267 return VOS_STATUS_E_NOMEM;
10268 }
10269 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10270 if(NULL == pWdaParams)
10271 {
10272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010273 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 VOS_ASSERT(0);
10275 vos_mem_free(wdiWowlDelBcPtrnInfo);
10276 return VOS_STATUS_E_NOMEM;
10277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10279 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010280
10281 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10282 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10283
Yue Ma7f44bbe2013-04-12 11:47:39 -070010284 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10285 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010286 /* Store param pointer as passed in by caller */
10287 /* store Params pass it to WDI */
10288 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10289 pWdaParams->pWdaContext = pWDA;
10290 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010291 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010292 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010293 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 {
10295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10296 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010297 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 vos_mem_free(pWdaParams->wdaMsgParam) ;
10299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10300 vos_mem_free(pWdaParams) ;
10301 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010302 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010303
10304}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010305/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010306 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 *
10308 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010309void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010310{
10311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10312 tWDA_CbContext *pWDA;
10313 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010316 if(NULL == pWdaParams)
10317 {
10318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010319 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010320 VOS_ASSERT(0) ;
10321 return ;
10322 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10324 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10325
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010326 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10327
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10329 vos_mem_free(pWdaParams) ;
10330
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010331 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010332 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 return ;
10335}
Jeff Johnson295189b2012-06-20 16:38:30 -070010336/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010337 * FUNCTION: WDA_WowlEnterReqCallback
10338 * Free memory and send WOWL Enter RSP back to PE.
10339 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10340 */
10341void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10342{
10343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10344 tWDA_CbContext *pWDA;
10345 tSirHalWowlEnterParams *pWowlEnterParams;
10346
10347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10348 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10349
10350 if(NULL == pWdaParams)
10351 {
10352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10353 "%s: pWdaParams received NULL", __func__);
10354 VOS_ASSERT(0);
10355 return;
10356 }
10357
10358 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10359 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10360 pWowlEnterParams->status = wdiStatus;
10361
10362 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10363 {
10364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10365 vos_mem_free(pWdaParams);
10366 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10367 }
10368
10369 return;
10370}
10371/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010372 * FUNCTION: WDA_ProcessWowlEnterReq
10373 * Request to WDI to enter WOWL
10374 */
10375VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10376 tSirHalWowlEnterParams *pWowlEnterParams)
10377{
10378 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010379 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010380 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10381 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10382 sizeof(WDI_WowlEnterReqParamsType)) ;
10383 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010385 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010386 if(NULL == wdiWowlEnterInfo)
10387 {
10388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 VOS_ASSERT(0);
10391 return VOS_STATUS_E_NOMEM;
10392 }
10393 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10394 if(NULL == pWdaParams)
10395 {
10396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010397 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 VOS_ASSERT(0);
10399 vos_mem_free(wdiWowlEnterInfo);
10400 return VOS_STATUS_E_NOMEM;
10401 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010402
10403 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10404
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10406 pWowlEnterParams->magicPtrn,
10407 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10409 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010410 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10411 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010412 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10413 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010414 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10415 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10417 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010418 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10419 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010420 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10421 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10423 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010424#ifdef WLAN_WAKEUP_EVENTS
10425 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10426 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10427
10428 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10429 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10430
10431 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10432 pWowlEnterParams->ucWowNetScanOffloadMatch;
10433
10434 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10435 pWowlEnterParams->ucWowGTKRekeyError;
10436
10437 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10438 pWowlEnterParams->ucWoWBSSConnLoss;
10439#endif // WLAN_WAKEUP_EVENTS
10440
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010441 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10442 pWowlEnterParams->bssIdx;
10443
Yue Ma7f44bbe2013-04-12 11:47:39 -070010444 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10445 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010446 /* Store param pointer as passed in by caller */
10447 /* store Params pass it to WDI */
10448 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10449 pWdaParams->pWdaContext = pWDA;
10450 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010451 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010452 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010453 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010454 {
10455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10456 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010457 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010458 vos_mem_free(pWdaParams->wdaMsgParam) ;
10459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10460 vos_mem_free(pWdaParams) ;
10461 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010462 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010463
10464}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010465/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010466 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010467 *
10468 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010469void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010470{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010471 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10472 tWDA_CbContext *pWDA;
10473 tSirHalWowlExitParams *pWowlExitParams;
10474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010475 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010476 if(NULL == pWdaParams)
10477 {
10478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010479 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010480 VOS_ASSERT(0) ;
10481 return ;
10482 }
10483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10484 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10485
10486 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010487 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010488
10489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10490 vos_mem_free(pWdaParams) ;
10491
Jeff Johnson295189b2012-06-20 16:38:30 -070010492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010493 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010494 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010495 return ;
10496}
Jeff Johnson295189b2012-06-20 16:38:30 -070010497/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010498 * FUNCTION: WDA_WowlExitReqCallback
10499 * Free memory and send WOWL Exit RSP back to PE.
10500 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10501 */
10502void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10503{
10504 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10505 tWDA_CbContext *pWDA;
10506 tSirHalWowlExitParams *pWowlExitParams;
10507
10508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10509 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10510
10511 if(NULL == pWdaParams)
10512 {
10513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10514 "%s: pWdaParams received NULL", __func__);
10515 VOS_ASSERT(0);
10516 return;
10517 }
10518
10519 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10520 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10521 pWowlExitParams->status = wdiStatus;
10522
10523 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10524 {
10525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10526 vos_mem_free(pWdaParams);
10527 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10528 }
10529
10530 return;
10531}
10532/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010533 * FUNCTION: WDA_ProcessWowlExitReq
10534 * Request to WDI to add WOWL Bcast pattern
10535 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010536VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10537 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010538{
10539 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010540 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010541 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10542 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10543 sizeof(WDI_WowlExitReqParamsType)) ;
10544 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010546 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010547 if(NULL == wdiWowlExitInfo)
10548 {
10549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010550 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010551 VOS_ASSERT(0);
10552 return VOS_STATUS_E_NOMEM;
10553 }
10554 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10555 if(NULL == pWdaParams)
10556 {
10557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010558 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010559 VOS_ASSERT(0);
10560 vos_mem_free(wdiWowlExitInfo);
10561 return VOS_STATUS_E_NOMEM;
10562 }
10563
10564 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10565 pWowlExitParams->bssIdx;
10566
Yue Ma7f44bbe2013-04-12 11:47:39 -070010567 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10568 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010569
10570 /* Store param pointer as passed in by caller */
10571 /* store Params pass it to WDI */
10572 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10573 pWdaParams->pWdaContext = pWDA;
10574 pWdaParams->wdaMsgParam = pWowlExitParams;
10575
10576 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010577 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010578
Jeff Johnson43971f52012-07-17 12:26:56 -070010579 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 {
10581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10582 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010583 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10585 vos_mem_free(pWdaParams->wdaMsgParam);
10586 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010587 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010588 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010589}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010590/*
10591 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10592 * Request to WDI to determine whether a given station is capable of
10593 * using HW-based frame translation
10594 */
10595v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10596 tANI_U8 staIdx)
10597{
10598 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10599}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010600
10601/*
10602 * FUNCTION: WDA_IsSelfSTA
10603 * Request to WDI to determine whether a given STAID is self station
10604 * index.
10605 */
10606v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10607{
10608
10609 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10610
Girish Gowli05cf44e2014-06-12 21:53:37 +053010611 if (NULL != pWDA)
10612 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10613 else
10614 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010615}
Jeff Johnson295189b2012-06-20 16:38:30 -070010616/*
10617 * FUNCTION: WDA_NvDownloadReqCallback
10618 * send NV Download RSP back to PE
10619 */
10620void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10621 void* pUserData)
10622{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010623
10624 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10625 tWDA_CbContext *pWDA;
10626
Jeff Johnson295189b2012-06-20 16:38:30 -070010627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010628 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010629
10630 if(NULL == pWdaParams)
10631 {
10632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010633 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010634 VOS_ASSERT(0) ;
10635 return ;
10636 }
10637
10638 pWDA = pWdaParams->pWdaContext;
10639
Jeff Johnson295189b2012-06-20 16:38:30 -070010640 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10642 vos_mem_free(pWdaParams);
10643
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010645 return ;
10646}
Jeff Johnson295189b2012-06-20 16:38:30 -070010647/*
10648 * FUNCTION: WDA_ProcessNvDownloadReq
10649 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10650 */
10651VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10652{
10653 /* Initialize the local Variables*/
10654 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10655 v_VOID_t *pNvBuffer=NULL;
10656 v_SIZE_t bufferSize = 0;
10657 WDI_Status status = WDI_STATUS_E_FAILURE;
10658 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010659 tWDA_ReqParams *pWdaParams ;
10660
Jeff Johnson295189b2012-06-20 16:38:30 -070010661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010662 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010663 if(NULL == pWDA)
10664 {
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010666 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010667 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 return VOS_STATUS_E_FAILURE;
10669 }
10670
10671 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010672 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10673
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10675 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 if(NULL == wdiNvDownloadReqParam)
10677 {
10678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010679 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010680 VOS_ASSERT(0);
10681 return VOS_STATUS_E_NOMEM;
10682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 /* Copy Params to wdiNvDownloadReqParam*/
10684 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10685 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010686
10687 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10688 if(NULL == pWdaParams)
10689 {
10690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010691 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010692 VOS_ASSERT(0);
10693 vos_mem_free(wdiNvDownloadReqParam);
10694 return VOS_STATUS_E_NOMEM;
10695 }
10696
Jeff Johnson295189b2012-06-20 16:38:30 -070010697 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010698 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10699 pWdaParams->wdaMsgParam = NULL;
10700 pWdaParams->pWdaContext = pWDA;
10701
10702
Jeff Johnson295189b2012-06-20 16:38:30 -070010703 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010704
Jeff Johnson295189b2012-06-20 16:38:30 -070010705 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010706 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10707
Jeff Johnson295189b2012-06-20 16:38:30 -070010708 if(IS_WDI_STATUS_FAILURE(status))
10709 {
10710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10711 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10713 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010714 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010715 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010716}
10717/*
10718 * FUNCTION: WDA_FlushAcReqCallback
10719 * send Flush AC RSP back to TL
10720 */
10721void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10722{
10723 vos_msg_t wdaMsg = {0} ;
10724 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10725 tFlushACReq *pFlushACReqParams;
10726 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010728 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 if(NULL == pWdaParams)
10730 {
10731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010732 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010733 VOS_ASSERT(0) ;
10734 return ;
10735 }
10736
10737 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10738 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10739 if(NULL == pFlushACRspParams)
10740 {
10741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010742 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010744 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010745 return ;
10746 }
10747 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10748 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10749 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10750 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10751 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010752 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010753 vos_mem_free(pWdaParams->wdaMsgParam) ;
10754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10755 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010756 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10757 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10758 // POST message to TL
10759 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10760
Jeff Johnson295189b2012-06-20 16:38:30 -070010761 return ;
10762}
Jeff Johnson295189b2012-06-20 16:38:30 -070010763/*
10764 * FUNCTION: WDA_ProcessFlushAcReq
10765 * Request to WDI to Update the DELBA REQ params.
10766 */
10767VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10768 tFlushACReq *pFlushAcReqParams)
10769{
10770 WDI_Status status = WDI_STATUS_SUCCESS ;
10771 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10772 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10773 sizeof(WDI_FlushAcReqParamsType)) ;
10774 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010775 if(NULL == wdiFlushAcReqParam)
10776 {
10777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 VOS_ASSERT(0);
10780 return VOS_STATUS_E_NOMEM;
10781 }
10782 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10783 if(NULL == pWdaParams)
10784 {
10785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010787 VOS_ASSERT(0);
10788 vos_mem_free(wdiFlushAcReqParam);
10789 return VOS_STATUS_E_NOMEM;
10790 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010792 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010793 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10794 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10795 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10796 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 /* Store Flush AC pointer, as this will be used for response */
10798 /* store Params pass it to WDI */
10799 pWdaParams->pWdaContext = pWDA;
10800 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10801 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010802 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10803 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010804 if(IS_WDI_STATUS_FAILURE(status))
10805 {
10806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10807 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10808 vos_mem_free(pWdaParams->wdaMsgParam) ;
10809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10810 vos_mem_free(pWdaParams) ;
10811 //TODO: respond to TL with failure
10812 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010814}
Jeff Johnson295189b2012-06-20 16:38:30 -070010815/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010816 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010817 *
10818 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010819void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010820{
10821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10822 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010823 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010824
10825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010826 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 if(NULL == pWdaParams)
10828 {
10829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010830 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010831 VOS_ASSERT(0) ;
10832 return ;
10833 }
10834 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10835 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10836 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10837 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10838 {
10839 pWDA->wdaAmpSessionOn = VOS_FALSE;
10840 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 vos_mem_free(pWdaParams->wdaMsgParam) ;
10842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10843 vos_mem_free(pWdaParams) ;
10844 /*
10845 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10846 * param here
10847 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010848 return ;
10849}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010850/*
10851 * FUNCTION: WDA_BtAmpEventReqCallback
10852 * Free memory.
10853 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10854 */
10855void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10856{
10857 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10858 tWDA_CbContext *pWDA;
10859 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010860
Yue Ma7f44bbe2013-04-12 11:47:39 -070010861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10862 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10863
10864 if(NULL == pWdaParams)
10865 {
10866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10867 "%s: pWdaParams received NULL", __func__);
10868 VOS_ASSERT(0);
10869 return;
10870 }
10871
10872 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10873 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10874
10875 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10876 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10877 {
10878 pWDA->wdaAmpSessionOn = VOS_FALSE;
10879 }
10880
10881 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10882 {
10883 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10884 vos_mem_free(pWdaParams->wdaMsgParam);
10885 vos_mem_free(pWdaParams);
10886 }
10887
10888 return;
10889}
Jeff Johnson295189b2012-06-20 16:38:30 -070010890/*
10891 * FUNCTION: WDA_ProcessBtAmpEventReq
10892 * Request to WDI to Update with BT AMP events.
10893 */
10894VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10895 tSmeBtAmpEvent *pBtAmpEventParams)
10896{
10897 WDI_Status status = WDI_STATUS_SUCCESS ;
10898 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10899 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10900 sizeof(WDI_BtAmpEventParamsType)) ;
10901 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010903 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010904 if(NULL == wdiBtAmpEventParam)
10905 {
10906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010908 VOS_ASSERT(0);
10909 return VOS_STATUS_E_NOMEM;
10910 }
10911 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10912 if(NULL == pWdaParams)
10913 {
10914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 VOS_ASSERT(0);
10917 vos_mem_free(wdiBtAmpEventParam);
10918 return VOS_STATUS_E_NOMEM;
10919 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010920 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10921 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010922 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10923 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010924 /* Store BT AMP event pointer, as this will be used for response */
10925 /* store Params pass it to WDI */
10926 pWdaParams->pWdaContext = pWDA;
10927 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10928 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010930 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010931 if(IS_WDI_STATUS_FAILURE(status))
10932 {
10933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10934 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10935 vos_mem_free(pWdaParams->wdaMsgParam) ;
10936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10937 vos_mem_free(pWdaParams) ;
10938 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010939 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10940 {
10941 pWDA->wdaAmpSessionOn = VOS_TRUE;
10942 }
10943 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010944}
10945
Jeff Johnson295189b2012-06-20 16:38:30 -070010946/*
10947 * FUNCTION: WDA_FTMCommandReqCallback
10948 * Handle FTM CMD response came from HAL
10949 * Route responce to HDD FTM
10950 */
10951void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10952 void *usrData)
10953{
10954 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010955 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10956 {
10957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010958 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010959 return;
10960 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010961 /* Release Current FTM Command Request */
10962 vos_mem_free(pWDA->wdaFTMCmdReq);
10963 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 /* Post FTM Responce to HDD FTM */
10965 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010966 return;
10967}
Jeff Johnson295189b2012-06-20 16:38:30 -070010968/*
10969 * FUNCTION: WDA_ProcessFTMCommand
10970 * Send FTM command to WDI
10971 */
10972VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10973 tPttMsgbuffer *pPTTFtmCmd)
10974{
10975 WDI_Status status = WDI_STATUS_SUCCESS;
10976 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 ftmCMDReq = (WDI_FTMCommandReqType *)
10978 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10979 if(NULL == ftmCMDReq)
10980 {
10981 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10982 "WDA FTM Command buffer alloc fail");
10983 return VOS_STATUS_E_NOMEM;
10984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010985 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10986 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010988 /* Send command to WDI */
10989 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 return status;
10991}
Jeff Johnsone7245742012-09-05 17:12:55 -070010992#ifdef FEATURE_OEM_DATA_SUPPORT
10993/*
10994 * FUNCTION: WDA_StartOemDataReqCallback
10995 *
10996 */
10997void WDA_StartOemDataReqCallback(
10998 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10999 void* pUserData)
11000{
11001 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011002 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11003 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070011004 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011005
Jeff Johnsone7245742012-09-05 17:12:55 -070011006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011007 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011008
11009 if(NULL == pWdaParams)
11010 {
11011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011012 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011013 VOS_ASSERT(0) ;
11014 return ;
11015 }
11016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11017
Jeff Johnsone7245742012-09-05 17:12:55 -070011018 if(NULL == pWDA)
11019 {
11020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011021 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011022 VOS_ASSERT(0);
11023 return ;
11024 }
11025
11026 /*
11027 * Allocate memory for response params sent to PE
11028 */
11029 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11030
11031 // Check if memory is allocated for OemdataMeasRsp Params.
11032 if(NULL == pOemDataRspParams)
11033 {
11034 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11035 "OEM DATA WDA callback alloc fail");
11036 VOS_ASSERT(0) ;
11037 return;
11038 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011039
Jeff Johnsone7245742012-09-05 17:12:55 -070011040 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11042 vos_mem_free(pWdaParams->wdaMsgParam);
11043 vos_mem_free(pWdaParams) ;
11044
Jeff Johnsone7245742012-09-05 17:12:55 -070011045 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011046 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011047 * Also, here success always means that we have atleast one BSSID.
11048 */
11049 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11050
11051 //enable Tx
11052 status = WDA_ResumeDataTx(pWDA);
11053 if(status != VOS_STATUS_SUCCESS)
11054 {
11055 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11056 }
11057 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11058 return ;
11059}
11060/*
11061 * FUNCTION: WDA_ProcessStartOemDataReq
11062 * Send Start Oem Data Req to WDI
11063 */
11064VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11065 tStartOemDataReq *pOemDataReqParams)
11066{
11067 WDI_Status status = WDI_STATUS_SUCCESS;
11068 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011069 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011070
11071 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11072
11073 if(NULL == wdiOemDataReqParams)
11074 {
11075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011077 VOS_ASSERT(0);
11078 return VOS_STATUS_E_NOMEM;
11079 }
11080
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011081 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11082 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11083 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11084 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011085
11086 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11087
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011088 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11089 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011093 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011094 vos_mem_free(pOemDataReqParams);
11095 VOS_ASSERT(0);
11096 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011097 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011098
Bernald44a1ae2013-01-09 08:30:39 -080011099 pWdaParams->pWdaContext = (void*)pWDA;
11100 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11101 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011102
11103 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11104 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011105
11106 if(IS_WDI_STATUS_FAILURE(status))
11107 {
11108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11109 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11111 vos_mem_free(pWdaParams->wdaMsgParam);
11112 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011113 }
11114 return CONVERT_WDI2VOS_STATUS(status) ;
11115}
11116#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011117/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011118 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011119 *
11120 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011121void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011122{
11123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011125 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011126 if(NULL == pWdaParams)
11127 {
11128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011129 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011130 VOS_ASSERT(0) ;
11131 return ;
11132 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011133
11134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11135 vos_mem_free(pWdaParams->wdaMsgParam);
11136 vos_mem_free(pWdaParams);
11137
11138 return ;
11139}
11140/*
11141 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11142 * Free memory.
11143 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11144 */
11145void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11146{
11147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11148
11149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11150 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11151
11152 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11155 "%s: pWdaParams received NULL", __func__);
11156 VOS_ASSERT(0);
11157 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011158 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011159
11160 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 {
11162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011163 vos_mem_free(pWdaParams->wdaMsgParam);
11164 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011165 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011166
11167 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011168}
Jeff Johnson295189b2012-06-20 16:38:30 -070011169#ifdef WLAN_FEATURE_GTK_OFFLOAD
11170/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011171 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011172 *
11173 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011174void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011175 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011176{
11177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11178
11179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011180 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011181 if(NULL == pWdaParams)
11182 {
11183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11184 "%s: pWdaParams received NULL", __func__);
11185 VOS_ASSERT(0);
11186 return;
11187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011188
Jeff Johnson295189b2012-06-20 16:38:30 -070011189 vos_mem_free(pWdaParams->wdaMsgParam) ;
11190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11191 vos_mem_free(pWdaParams) ;
11192
11193 //print a msg, nothing else to do
11194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011195 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011196
11197 return ;
11198}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011199/*
11200 * FUNCTION: WDA_GTKOffloadReqCallback
11201 * Free memory.
11202 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11203 */
11204void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11205{
11206 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011207
Yue Ma7f44bbe2013-04-12 11:47:39 -070011208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11209 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11210
11211 if(NULL == pWdaParams)
11212 {
11213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11214 "%s: pWdaParams received NULL", __func__);
11215 VOS_ASSERT(0);
11216 return;
11217 }
11218
11219 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11220 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011221 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11222 sizeof(WDI_GtkOffloadReqMsg));
11223 vos_mem_zero(pWdaParams->wdaMsgParam,
11224 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11226 vos_mem_free(pWdaParams->wdaMsgParam);
11227 vos_mem_free(pWdaParams);
11228 }
11229
11230 return;
11231}
Jeff Johnson295189b2012-06-20 16:38:30 -070011232/*
11233 * FUNCTION: WDA_ProcessGTKOffloadReq
11234 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11235 * to broadcast traffic (sta mode).
11236 */
11237VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11238 tpSirGtkOffloadParams pGtkOffloadParams)
11239{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011240 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011241 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11242 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11243 sizeof(WDI_GtkOffloadReqMsg)) ;
11244 tWDA_ReqParams *pWdaParams ;
11245
11246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011248
11249 if(NULL == wdiGtkOffloadReqMsg)
11250 {
11251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011252 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011253 VOS_ASSERT(0);
11254 return VOS_STATUS_E_NOMEM;
11255 }
11256
11257 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11258 if(NULL == pWdaParams)
11259 {
11260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011261 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011262 VOS_ASSERT(0);
11263 vos_mem_free(wdiGtkOffloadReqMsg);
11264 return VOS_STATUS_E_NOMEM;
11265 }
11266
11267 //
11268 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11269 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011270
11271 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011272 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011273
Jeff Johnson295189b2012-06-20 16:38:30 -070011274 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11275 // Copy KCK
11276 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11277 // Copy KEK
11278 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11279 // Copy KeyReplayCounter
11280 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11281 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11282
Yue Ma7f44bbe2013-04-12 11:47:39 -070011283 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11284 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011285
Jeff Johnson295189b2012-06-20 16:38:30 -070011286
11287 /* Store Params pass it to WDI */
11288 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11289 pWdaParams->pWdaContext = pWDA;
11290 /* Store param pointer as passed in by caller */
11291 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11292
Yue Ma7f44bbe2013-04-12 11:47:39 -070011293 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011294
11295 if(IS_WDI_STATUS_FAILURE(status))
11296 {
11297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11298 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011299 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11300 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11302 vos_mem_free(pWdaParams->wdaMsgParam);
11303 vos_mem_free(pWdaParams);
11304 }
11305
11306 return CONVERT_WDI2VOS_STATUS(status) ;
11307}
11308
11309/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011310 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011311 *
11312 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011313void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011314 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011315{
11316 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11317 tWDA_CbContext *pWDA;
11318 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011319 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 vos_msg_t vosMsg;
11321
11322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011323 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011324
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011325 if(NULL == pWdaParams)
11326 {
11327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11328 "%s: pWdaParams received NULL", __func__);
11329 VOS_ASSERT(0);
11330 return;
11331 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011332
Nirav Shah374de6e2014-02-13 16:40:01 +053011333 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11334 if(NULL == pGtkOffloadGetInfoRsp)
11335 {
11336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11337 "%s: vos_mem_malloc failed ", __func__);
11338 VOS_ASSERT(0);
11339 return;
11340 }
11341
Jeff Johnson295189b2012-06-20 16:38:30 -070011342 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11343 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11344
11345 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11346 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11347
11348 /* Message Header */
11349 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011350 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011351
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011352 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11353 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11354 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11355 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11356 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011357
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011358 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11359 pwdiGtkOffloadGetInfoRsparams->bssId,
11360 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011361 /* VOS message wrapper */
11362 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11363 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11364 vosMsg.bodyval = 0;
11365
11366 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11367 {
11368 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011369 vos_mem_zero(pGtkOffloadGetInfoRsp,
11370 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11372 }
11373
11374 vos_mem_free(pWdaParams->wdaMsgParam) ;
11375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11376 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011377
11378 return;
11379}
11380/*
11381 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11382 * Free memory and send RSP back to SME.
11383 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11384 */
11385void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11386{
11387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11388 vos_msg_t vosMsg;
11389
11390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11391 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11392
11393 if(NULL == pWdaParams)
11394 {
11395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11396 "%s: pWdaParams received NULL", __func__);
11397 VOS_ASSERT(0);
11398 return;
11399 }
11400
11401 /* VOS message wrapper */
11402 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11403 vosMsg.bodyptr = NULL;
11404 vosMsg.bodyval = 0;
11405
11406 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11407 {
11408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11409 vos_mem_free(pWdaParams->wdaMsgParam);
11410 vos_mem_free(pWdaParams);
11411 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11412 }
11413
11414 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011415}
11416#endif
11417
11418/*
11419 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11420 * Request to WDI to set Tx Per Tracking configurations
11421 */
11422VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11423{
11424 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011425 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11427 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11428 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11429 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011431 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 if(NULL == pwdiSetTxPerTrackingReqParams)
11433 {
11434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 vos_mem_free(pTxPerTrackingParams);
11437 VOS_ASSERT(0);
11438 return VOS_STATUS_E_NOMEM;
11439 }
11440 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11441 if(NULL == pWdaParams)
11442 {
11443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11446 vos_mem_free(pTxPerTrackingParams);
11447 VOS_ASSERT(0);
11448 return VOS_STATUS_E_NOMEM;
11449 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011450 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11451 pTxPerTrackingParams->ucTxPerTrackingEnable;
11452 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11453 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11454 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11455 pTxPerTrackingParams->ucTxPerTrackingRatio;
11456 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11457 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011458 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11459 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011460 /* Store param pointer as passed in by caller */
11461 /* store Params pass it to WDI
11462 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11463 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11464 pWdaParams->pWdaContext = pWDA;
11465 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011466 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011467 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011468 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011469 {
11470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11471 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011472 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 vos_mem_free(pWdaParams->wdaMsgParam) ;
11474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11475 vos_mem_free(pWdaParams) ;
11476 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011477 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011478
11479}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011480/*
11481 * FUNCTION: WDA_HALDumpCmdCallback
11482 * Send the VOS complete .
11483 */
11484void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11485 void* pUserData)
11486{
11487 tANI_U8 *buffer = NULL;
11488 tWDA_CbContext *pWDA = NULL;
11489 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 if(NULL == pWdaParams)
11491 {
11492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011493 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011494 VOS_ASSERT(0) ;
11495 return ;
11496 }
11497
11498 pWDA = pWdaParams->pWdaContext;
11499 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011500 if(wdiRspParams->usBufferLen > 0)
11501 {
11502 /*Copy the Resp data to UMAC supplied buffer*/
11503 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11506 vos_mem_free(pWdaParams);
11507
11508 /* Indicate VOSS about the start complete */
11509 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 return ;
11511}
11512
Jeff Johnson295189b2012-06-20 16:38:30 -070011513/*
11514 * FUNCTION: WDA_ProcessHALDumpCmdReq
11515 * Send Dump command to WDI
11516 */
11517VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11518 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11519 tANI_U32 arg4, tANI_U8 *pBuffer)
11520{
11521 WDI_Status status = WDI_STATUS_SUCCESS;
11522 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11523 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11524 tWDA_ReqParams *pWdaParams ;
11525 pVosContextType pVosContext = NULL;
11526 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011527 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11528 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011529 if(pVosContext)
11530 {
11531 if (pVosContext->isLogpInProgress)
11532 {
11533 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11534 "%s:LOGP in Progress. Ignore!!!", __func__);
11535 return VOS_STATUS_E_BUSY;
11536 }
11537 }
11538 else
11539 {
11540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11541 "%s: VOS Context Null", __func__);
11542 return VOS_STATUS_E_RESOURCES;
11543 }
11544
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11546 if(NULL == pWdaParams)
11547 {
11548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011550 return VOS_STATUS_E_NOMEM;
11551 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011552 /* Allocate memory WDI request structure*/
11553 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11554 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11555 if(NULL == wdiHALDumpCmdReqParam)
11556 {
11557 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11558 "WDA HAL DUMP Command buffer alloc fail");
11559 vos_mem_free(pWdaParams);
11560 return WDI_STATUS_E_FAILURE;
11561 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011562 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011563 /* Extract the arguments */
11564 wdiHalDumpCmdInfo->command = cmd;
11565 wdiHalDumpCmdInfo->argument1 = arg1;
11566 wdiHalDumpCmdInfo->argument2 = arg2;
11567 wdiHalDumpCmdInfo->argument3 = arg3;
11568 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011570 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11571
11572 /* Response message will be passed through the buffer */
11573 pWdaParams->wdaMsgParam = (void *)pBuffer;
11574
11575 /* store Params pass it to WDI */
11576 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011577 /* Send command to WDI */
11578 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011579 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011580 if ( vStatus != VOS_STATUS_SUCCESS )
11581 {
11582 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11583 {
11584 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011585 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011586 }
11587 else
11588 {
11589 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011590 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011591 }
11592 VOS_ASSERT(0);
11593 }
11594 return status;
11595}
Jeff Johnson295189b2012-06-20 16:38:30 -070011596#ifdef WLAN_FEATURE_GTK_OFFLOAD
11597/*
11598 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11599 * Request to WDI to get GTK Offload Information
11600 */
11601VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11602 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11603{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011604 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011605 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11606 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11607 tWDA_ReqParams *pWdaParams ;
11608
11609 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11610 {
11611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011613 VOS_ASSERT(0);
11614 return VOS_STATUS_E_NOMEM;
11615 }
11616
11617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11618 if(NULL == pWdaParams)
11619 {
11620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 VOS_ASSERT(0);
11623 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11624 return VOS_STATUS_E_NOMEM;
11625 }
11626
Yue Ma7f44bbe2013-04-12 11:47:39 -070011627 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11628 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011629
Jeff Johnson295189b2012-06-20 16:38:30 -070011630 /* Store Params pass it to WDI */
11631 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11632 pWdaParams->pWdaContext = pWDA;
11633 /* Store param pointer as passed in by caller */
11634 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11635
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011636 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011637 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011638
Yue Ma7f44bbe2013-04-12 11:47:39 -070011639 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011640
11641 if(IS_WDI_STATUS_FAILURE(status))
11642 {
11643 /* failure returned by WDI API */
11644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11645 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11647 vos_mem_free(pWdaParams) ;
11648 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11649 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11650 }
11651
11652 return CONVERT_WDI2VOS_STATUS(status) ;
11653}
11654#endif // WLAN_FEATURE_GTK_OFFLOAD
11655
11656/*
Yue Mab9c86f42013-08-14 15:59:08 -070011657 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11658 *
11659 */
11660VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11661 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11662{
11663 WDI_Status wdiStatus;
11664 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11665
11666 addPeriodicTxPtrnParams =
11667 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11668
11669 if (NULL == addPeriodicTxPtrnParams)
11670 {
11671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11672 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11673 __func__);
11674
11675 return VOS_STATUS_E_NOMEM;
11676 }
11677
11678 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11679 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11680
11681 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11682 addPeriodicTxPtrnParams->pUserData = pWDA;
11683
11684 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11685
11686 if (WDI_STATUS_PENDING == wdiStatus)
11687 {
11688 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11689 "Pending received for %s:%d", __func__, __LINE__ );
11690 }
11691 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11692 {
11693 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11694 "Failure in %s:%d", __func__, __LINE__ );
11695 }
11696
11697 vos_mem_free(addPeriodicTxPtrnParams);
11698
11699 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11700}
11701
11702/*
11703 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11704 *
11705 */
11706VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11707 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11708{
11709 WDI_Status wdiStatus;
11710 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11711
11712 delPeriodicTxPtrnParams =
11713 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11714
11715 if (NULL == delPeriodicTxPtrnParams)
11716 {
11717 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11718 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11719 __func__);
11720
11721 return VOS_STATUS_E_NOMEM;
11722 }
11723
11724 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11725 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11726
11727 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11728 delPeriodicTxPtrnParams->pUserData = pWDA;
11729
11730 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11731
11732 if (WDI_STATUS_PENDING == wdiStatus)
11733 {
11734 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11735 "Pending received for %s:%d", __func__, __LINE__ );
11736 }
11737 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11738 {
11739 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11740 "Failure in %s:%d", __func__, __LINE__ );
11741 }
11742
11743 vos_mem_free(delPeriodicTxPtrnParams);
11744
11745 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11746}
11747
Rajeev79dbe4c2013-10-05 11:03:42 +053011748#ifdef FEATURE_WLAN_BATCH_SCAN
11749/*
11750 * FUNCTION: WDA_ProcessStopBatchScanInd
11751 *
11752 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11753 *
11754 * PARAM:
11755 * pWDA: pointer to WDA context
11756 * pReq: pointer to stop batch scan request
11757 */
11758VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11759 tSirStopBatchScanInd *pReq)
11760{
11761 WDI_Status wdiStatus;
11762 WDI_StopBatchScanIndType wdiReq;
11763
11764 wdiReq.param = pReq->param;
11765
11766 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11767
11768 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11769 {
11770 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11771 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11772 }
11773
11774 vos_mem_free(pReq);
11775
11776 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11777}
11778/*==========================================================================
11779 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11780
11781 DESCRIPTION
11782 API to pull batch scan result from FW
11783
11784 PARAMETERS
11785 pWDA: Pointer to WDA context
11786 pGetBatchScanReq: Pointer to get batch scan result indication
11787
11788 RETURN VALUE
11789 NONE
11790
11791===========================================================================*/
11792VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11793 tSirTriggerBatchScanResultInd *pReq)
11794{
11795 WDI_Status wdiStatus;
11796 WDI_TriggerBatchScanResultIndType wdiReq;
11797
11798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11799 "------> %s " ,__func__);
11800
11801 wdiReq.param = pReq->param;
11802
11803 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11804
11805 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11806 {
11807 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11808 "Trigger batch scan result ind failed %s:%d",
11809 __func__, wdiStatus);
11810 }
11811
11812 vos_mem_free(pReq);
11813
11814 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11815}
11816
11817/*==========================================================================
11818 FUNCTION WDA_SetBatchScanRespCallback
11819
11820 DESCRIPTION
11821 API to process set batch scan response from FW
11822
11823 PARAMETERS
11824 pRsp: Pointer to set batch scan response
11825 pUserData: Pointer to user data
11826
11827 RETURN VALUE
11828 NONE
11829
11830===========================================================================*/
11831void WDA_SetBatchScanRespCallback
11832(
11833 WDI_SetBatchScanRspType *pRsp,
11834 void* pUserData
11835)
11836{
11837 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11838 tpAniSirGlobal pMac;
11839 void *pCallbackContext;
11840 tWDA_CbContext *pWDA = NULL ;
11841 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11842
11843
11844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11845 "<------ %s " ,__func__);
11846 if (NULL == pWdaParams)
11847 {
11848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11849 "%s: pWdaParams received NULL", __func__);
11850 VOS_ASSERT(0) ;
11851 return ;
11852 }
11853
11854 /*extract WDA context*/
11855 pWDA = pWdaParams->pWdaContext;
11856 if (NULL == pWDA)
11857 {
11858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11859 "%s:pWDA is NULL can't invole HDD callback",
11860 __func__);
11861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11862 vos_mem_free(pWdaParams->wdaMsgParam);
11863 vos_mem_free(pWdaParams);
11864 VOS_ASSERT(0);
11865 return;
11866 }
11867
11868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11869 vos_mem_free(pWdaParams->wdaMsgParam);
11870 vos_mem_free(pWdaParams);
11871
11872 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11873 if (NULL == pMac)
11874 {
11875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11876 "%s:pMac is NULL", __func__);
11877 VOS_ASSERT(0);
11878 return;
11879 }
11880
11881 pHddSetBatchScanRsp =
11882 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11883 if (NULL == pHddSetBatchScanRsp)
11884 {
11885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11886 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11887 VOS_ASSERT(0);
11888 return;
11889 }
11890
11891 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11892
11893 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11894 /*call hdd callback with set batch scan response data*/
11895 if(pMac->pmc.setBatchScanReqCallback)
11896 {
11897 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11898 }
11899 else
11900 {
11901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11902 "%s:HDD callback is null", __func__);
11903 VOS_ASSERT(0);
11904 }
11905
11906 vos_mem_free(pHddSetBatchScanRsp);
11907 return ;
11908}
11909
11910/*==========================================================================
11911 FUNCTION WDA_ProcessSetBatchScanReq
11912
11913 DESCRIPTION
11914 API to send set batch scan request to WDI
11915
11916 PARAMETERS
11917 pWDA: Pointer to WDA context
11918 pSetBatchScanReq: Pointer to set batch scan req
11919
11920 RETURN VALUE
11921 NONE
11922
11923===========================================================================*/
11924VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11925 tSirSetBatchScanReq *pSetBatchScanReq)
11926{
11927 WDI_Status status;
11928 tWDA_ReqParams *pWdaParams ;
11929 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11930
11931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11932 "------> %s " ,__func__);
11933
11934 pWdiSetBatchScanReq =
11935 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11936 if (NULL == pWdiSetBatchScanReq)
11937 {
11938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11939 "%s: VOS MEM Alloc Failure", __func__);
11940 vos_mem_free(pSetBatchScanReq);
11941 VOS_ASSERT(0);
11942 return VOS_STATUS_E_NOMEM;
11943 }
11944
11945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11946 if (NULL == pWdaParams)
11947 {
11948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11949 "%s: VOS MEM Alloc Failure", __func__);
11950 VOS_ASSERT(0);
11951 vos_mem_free(pSetBatchScanReq);
11952 vos_mem_free(pWdiSetBatchScanReq);
11953 return VOS_STATUS_E_NOMEM;
11954 }
11955
11956 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11957 pWdiSetBatchScanReq->numberOfScansToBatch =
11958 pSetBatchScanReq->numberOfScansToBatch;
11959 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11960 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11961 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11962
11963 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11964 pWdaParams->pWdaContext = pWDA;
11965 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11966
11967 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11968 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11969 if (IS_WDI_STATUS_FAILURE(status))
11970 {
11971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11972 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11974 vos_mem_free(pWdaParams->wdaMsgParam);
11975 vos_mem_free(pWdaParams);
11976 }
11977 return CONVERT_WDI2VOS_STATUS(status);
11978}
11979
11980#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011981/*
11982 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11983 *
11984 * DESCRIPTION: This function sends start/update OBSS scan
11985 * inidcation message to WDI
11986 *
11987 * PARAM:
11988 * pWDA: pointer to WDA context
11989 * pReq: pointer to start OBSS scan request
11990 */
11991VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11992 tSirHT40OBSSScanInd *pReq)
11993{
11994 WDI_Status status;
11995 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11996 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011997
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11999 "------> %s " ,__func__);
12000 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12001 wdiOBSSScanParams.pUserData = pWDA;
12002
12003 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12004 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12005 pWdiOBSSScanInd->scanType = pReq->scanType;
12006 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12007 pReq->OBSSScanActiveDwellTime;
12008 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12009 pReq->OBSSScanPassiveDwellTime;
12010 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12011 pReq->BSSChannelWidthTriggerScanInterval;
12012 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12013 pReq->BSSWidthChannelTransitionDelayFactor;
12014 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12015 pReq->OBSSScanActiveTotalPerChannel;
12016 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12017 pReq->OBSSScanPassiveTotalPerChannel;
12018 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12019 pReq->OBSSScanActivityThreshold;
12020 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12021 vos_mem_copy(pWdiOBSSScanInd->channels,
12022 pReq->channels,
12023 pReq->channelCount);
12024 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12025 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12026 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12027 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12028 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12029
12030 vos_mem_copy(pWdiOBSSScanInd->ieField,
12031 pReq->ieField,
12032 pReq->ieFieldLen);
12033
12034 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12035 if (WDI_STATUS_PENDING == status)
12036 {
12037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12038 "Pending received for %s:%d ",__func__,__LINE__ );
12039 }
12040 else if (WDI_STATUS_SUCCESS_SYNC != status)
12041 {
12042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12043 "Failure in %s:%d ",__func__,__LINE__ );
12044 }
12045 return CONVERT_WDI2VOS_STATUS(status) ;
12046}
12047/*
12048 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12049 *
12050 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12051 *
12052 * PARAM:
12053 * pWDA: pointer to WDA context
12054 * pReq: pointer to stop batch scan request
12055 */
12056VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12057 tANI_U8 *bssIdx)
12058{
12059 WDI_Status status;
12060
12061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12062 "------> %s " ,__func__);
12063
12064 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12065 if (WDI_STATUS_PENDING == status)
12066 {
12067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12068 "Pending received for %s:%d ",__func__,__LINE__ );
12069 }
12070 else if (WDI_STATUS_SUCCESS_SYNC != status)
12071 {
12072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12073 "Failure in %s:%d ",__func__,__LINE__ );
12074 }
12075 return CONVERT_WDI2VOS_STATUS(status) ;
12076}
Yue Mab9c86f42013-08-14 15:59:08 -070012077/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012078 * FUNCTION: WDA_ProcessRateUpdateInd
12079 *
12080 */
12081VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12082 tSirRateUpdateInd *pRateUpdateParams)
12083{
12084 WDI_Status wdiStatus;
12085 WDI_RateUpdateIndParams rateUpdateParams;
12086
12087 vos_mem_copy(rateUpdateParams.bssid,
12088 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12089
12090 rateUpdateParams.ucastDataRateTxFlag =
12091 pRateUpdateParams->ucastDataRateTxFlag;
12092 rateUpdateParams.reliableMcastDataRateTxFlag =
12093 pRateUpdateParams->reliableMcastDataRateTxFlag;
12094 rateUpdateParams.mcastDataRate24GHzTxFlag =
12095 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12096 rateUpdateParams.mcastDataRate5GHzTxFlag =
12097 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12098
12099 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12100 rateUpdateParams.reliableMcastDataRate =
12101 pRateUpdateParams->reliableMcastDataRate;
12102 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12103 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12104
12105 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12106 rateUpdateParams.pUserData = pWDA;
12107
12108 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12109
12110 if (WDI_STATUS_PENDING == wdiStatus)
12111 {
12112 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12113 "Pending received for %s:%d", __func__, __LINE__ );
12114 }
12115 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12116 {
12117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12118 "Failure in %s:%d", __func__, __LINE__ );
12119 }
12120
12121 vos_mem_free(pRateUpdateParams);
12122
12123 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12124}
12125
12126/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012127 * -------------------------------------------------------------------------
12128 * DATA interface with WDI for Mgmt Frames
12129 * -------------------------------------------------------------------------
12130 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012131/*
12132 * FUNCTION: WDA_TxComplete
12133 * Callback function for the WDA_TxPacket
12134 */
12135VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12136 VOS_STATUS status )
12137{
12138
12139 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12140 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012141 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012142
12143 if(NULL == wdaContext)
12144 {
12145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12146 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012147 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012148 VOS_ASSERT(0);
12149 return VOS_STATUS_E_FAILURE;
12150 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012151
12152 /*Check if frame was timed out or not*/
12153 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12154 (v_PVOID_t)&uUserData);
12155
12156 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12157 {
12158 /*Discard frame - no further processing is needed*/
12159 vos_pkt_return_packet(pData);
12160 return VOS_STATUS_SUCCESS;
12161 }
12162
Jeff Johnson295189b2012-06-20 16:38:30 -070012163 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12164 if( NULL!=wdaContext->pTxCbFunc)
12165 {
12166 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012167 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012168 {
12169 wdaContext->pTxCbFunc(pMac, pData);
12170 }
12171 else
12172 {
12173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012174 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012175 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012176 //Return from here since we reaching here because the packet already timeout
12177 return status;
12178 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012179 }
12180
12181 /*
12182 * Trigger the event to bring the HAL TL Tx complete function to come
12183 * out of wait
12184 * Let the coe above to complete the packet first. When this event is set,
12185 * the thread waiting for the event may run and set Vospacket_freed causing the original
12186 * packet not being freed.
12187 */
12188 status = vos_event_set(&wdaContext->txFrameEvent);
12189 if(!VOS_IS_STATUS_SUCCESS(status))
12190 {
12191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012192 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012193 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012194 return status;
12195}
Jeff Johnson295189b2012-06-20 16:38:30 -070012196/*
12197 * FUNCTION: WDA_TxPacket
12198 * Forward TX management frame to WDI
12199 */
12200VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12201 void *pFrmBuf,
12202 tANI_U16 frmLen,
12203 eFrameType frmType,
12204 eFrameTxDir txDir,
12205 tANI_U8 tid,
12206 pWDATxRxCompFunc pCompFunc,
12207 void *pData,
12208 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012209 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012210{
12211 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12212 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12213 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12214 tANI_U8 eventIdx = 0;
12215 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12216 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012217 if((NULL == pWDA)||(NULL == pFrmBuf))
12218 {
12219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012220 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012221 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012222 VOS_ASSERT(0);
12223 return VOS_STATUS_E_FAILURE;
12224 }
12225
12226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012227 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012228 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12229 if(NULL == pMac)
12230 {
12231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012232 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012233 VOS_ASSERT(0);
12234 return VOS_STATUS_E_FAILURE;
12235 }
12236
12237
12238
12239 /* store the call back function in WDA context */
12240 pWDA->pTxCbFunc = pCompFunc;
12241 /* store the call back for the function of ackTxComplete */
12242 if( pAckTxComp )
12243 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012244 if( NULL != pWDA->pAckTxCbFunc )
12245 {
12246 /* Already TxComp is active no need to active again */
12247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012248 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012249 pWDA->pAckTxCbFunc( pMac, 0);
12250 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012251
Jeff Johnsone7245742012-09-05 17:12:55 -070012252 if( VOS_STATUS_SUCCESS !=
12253 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12254 {
12255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12256 "Tx Complete timeout Timer Stop Failed ");
12257 }
12258 else
12259 {
12260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012261 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012262 }
12263 }
12264
12265 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12266 pWDA->pAckTxCbFunc = pAckTxComp;
12267 if( VOS_STATUS_SUCCESS !=
12268 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12269 {
12270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12271 "Tx Complete Timer Start Failed ");
12272 pWDA->pAckTxCbFunc = NULL;
12273 return eHAL_STATUS_FAILURE;
12274 }
12275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012276 /* Reset the event to be not signalled */
12277 status = vos_event_reset(&pWDA->txFrameEvent);
12278 if(!VOS_IS_STATUS_SUCCESS(status))
12279 {
12280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012281 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12283 if( pAckTxComp )
12284 {
12285 pWDA->pAckTxCbFunc = NULL;
12286 if( VOS_STATUS_SUCCESS !=
12287 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12288 {
12289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12290 "Tx Complete timeout Timer Stop Failed ");
12291 }
12292 }
12293 return VOS_STATUS_E_FAILURE;
12294 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012295
12296 /* If Peer Sta mask is set don't overwrite to self sta */
12297 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012298 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012299 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012300 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012301 else
12302 {
Ganesh K08bce952012-12-13 15:04:41 -080012303 /* Get system role, use the self station if in unknown role or STA role */
12304 systemRole = wdaGetGlobalSystemRole(pMac);
12305 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12306 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012307#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012308 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012309#endif
Ganesh K08bce952012-12-13 15:04:41 -080012310 ))
12311 {
12312 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12313 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012314 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012315
Jeff Johnsone7245742012-09-05 17:12:55 -070012316 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12317 disassoc frame reaches the HW, HAL has already deleted the peer station */
12318 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012319 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012320 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012321 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012322 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012323 /*Send Probe request frames on self sta idx*/
12324 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012325 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012326 /* Since we donot want probe responses to be retried, send probe responses
12327 through the NO_ACK queues */
12328 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12329 {
12330 //probe response is sent out using self station and no retries options.
12331 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12332 }
12333 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12334 {
12335 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12336 }
12337 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012338 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012339
12340 /*Set frame tag to 0
12341 We will use the WDA user data in order to tag a frame as expired*/
12342 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12343 (v_PVOID_t)0);
12344
12345
12346 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12347 frmLen, ucTypeSubType, tid,
12348 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12349 {
12350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012351 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012352 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012353 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 -070012354 if( pAckTxComp )
12355 {
12356 pWDA->pAckTxCbFunc = NULL;
12357 if( VOS_STATUS_SUCCESS !=
12358 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12359 {
12360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12361 "Tx Complete timeout Timer Stop Failed ");
12362 }
12363 }
12364 return VOS_STATUS_E_FAILURE;
12365 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012366 /*
12367 * Wait for the event to be set by the TL, to get the response of TX
12368 * complete, this event should be set by the Callback function called by TL
12369 */
12370 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12371 &eventIdx);
12372 if(!VOS_IS_STATUS_SUCCESS(status))
12373 {
12374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12375 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012376 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012377 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12378 after the packet gets completed(packet freed once)*/
12379
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012380 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012381 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012382
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012383 /*Tag Frame as timed out for later deletion*/
12384 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12385 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
12386
Jeff Johnson295189b2012-06-20 16:38:30 -070012387 /* check whether the packet was freed already,so need not free again when
12388 * TL calls the WDA_Txcomplete routine
12389 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012390 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12391 /*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 -070012392 {
12393 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012394 } */
12395
Jeff Johnson295189b2012-06-20 16:38:30 -070012396 if( pAckTxComp )
12397 {
12398 pWDA->pAckTxCbFunc = NULL;
12399 if( VOS_STATUS_SUCCESS !=
12400 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12401 {
12402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12403 "Tx Complete timeout Timer Stop Failed ");
12404 }
12405 }
12406 status = VOS_STATUS_E_FAILURE;
12407 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012408#ifdef WLAN_DUMP_MGMTFRAMES
12409 if (VOS_IS_STATUS_SUCCESS(status))
12410 {
12411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12412 "%s() TX packet : SubType %d", __func__,pFc->subType);
12413 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12414 pData, frmLen);
12415 }
12416#endif
12417
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012418 if (VOS_IS_STATUS_SUCCESS(status))
12419 {
12420 if (pMac->fEnableDebugLog & 0x1)
12421 {
12422 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12423 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12424 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12425 {
12426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12427 pFc->type, pFc->subType);
12428 }
12429 }
12430 }
12431
12432
Jeff Johnson295189b2012-06-20 16:38:30 -070012433 return status;
12434}
Jeff Johnson295189b2012-06-20 16:38:30 -070012435/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012436 * FUNCTION: WDA_ProcessDHCPStartInd
12437 * Forward DHCP Start to WDI
12438 */
12439static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12440 tAniDHCPInd *dhcpStartInd)
12441{
12442 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012443 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012444
c_hpothu0b0cab72014-02-13 21:52:40 +053012445 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12446 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012447 sizeof(tSirMacAddr));
12448
c_hpothu0b0cab72014-02-13 21:52:40 +053012449 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012450
c_hpothu0b0cab72014-02-13 21:52:40 +053012451 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012452 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12454 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012455 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012456 else if (WDI_STATUS_SUCCESS_SYNC != status)
12457 {
12458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12459 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12460 }
12461
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012462 vos_mem_free(dhcpStartInd);
12463 return CONVERT_WDI2VOS_STATUS(status) ;
12464}
12465
12466 /*
12467 * FUNCTION: WDA_ProcessDHCPStopInd
12468 * Forward DHCP Stop to WDI
12469 */
12470 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12471 tAniDHCPInd *dhcpStopInd)
12472 {
12473 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012474 WDI_DHCPInd wdiDHCPInd;
12475
12476 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12477 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12478
12479 status = WDI_dhcpStopInd(&wdiDHCPInd);
12480
12481 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012482 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12484 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012485 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012486 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012487 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12489 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012490 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012491
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012492 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012493
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012494 return CONVERT_WDI2VOS_STATUS(status) ;
12495 }
12496
12497/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012498 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12499 *
12500 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12501 *
12502 * PARAM:
12503 * pWDA: pointer to WDA context
12504 * pReq: pointer to stop batch scan request
12505 */
12506VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12507 tpSpoofMacAddrReqParams pReq)
12508{
12509 WDI_Status wdiStatus;
12510 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12511 tWDA_ReqParams *pWdaParams;
12512
12513 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12514 sizeof(WDI_SpoofMacAddrInfoType));
12515 if(NULL == WDI_SpoofMacAddrInfoParams) {
12516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12517 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12518 VOS_ASSERT(0);
12519 return VOS_STATUS_E_NOMEM;
12520 }
12521 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12522 if(NULL == pWdaParams) {
12523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12524 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012525 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012526 VOS_ASSERT(0);
12527 return VOS_STATUS_E_NOMEM;
12528 }
12529
12530 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12531 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12532
12533 pWdaParams->pWdaContext = pWDA;
12534 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012535 pWdaParams->wdaMsgParam = (void *)pReq;
12536
12537 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12538 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12539
Siddharth Bhal171788a2014-09-29 21:02:40 +053012540 /* store Params pass it to WDI */
12541 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12542
12543 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012544 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12545 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012546
12547 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12548 {
12549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12550 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12552 vos_mem_free(pWdaParams->wdaMsgParam);
12553 vos_mem_free(pWdaParams);
12554 }
12555
12556 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12557}
12558
12559/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012560 * FUNCTION: WDA_McProcessMsg
12561 * Trigger DAL-AL to start CFG download
12562 */
12563VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12564{
12565 VOS_STATUS status = VOS_STATUS_SUCCESS;
12566 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012567 if(NULL == pMsg)
12568 {
12569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012570 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012571 VOS_ASSERT(0);
12572 return VOS_STATUS_E_FAILURE;
12573 }
12574
12575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012576 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012577
12578 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12579 if(NULL == pWDA )
12580 {
12581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012582 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012583 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012584 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012585 return VOS_STATUS_E_FAILURE;
12586 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012587 /* Process all the WDA messages.. */
12588 switch( pMsg->type )
12589 {
12590 case WNI_CFG_DNLD_REQ:
12591 {
12592 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012593 /* call WDA complete event if config download success */
12594 if( VOS_IS_STATUS_SUCCESS(status) )
12595 {
12596 vos_WDAComplete_cback(pVosContext);
12597 }
12598 else
12599 {
12600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12601 "WDA Config Download failure" );
12602 }
12603 break ;
12604 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012605 /*
12606 * Init SCAN request from PE, convert it into DAL format
12607 * and send it to DAL
12608 */
12609 case WDA_INIT_SCAN_REQ:
12610 {
12611 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12612 break ;
12613 }
12614 /* start SCAN request from PE */
12615 case WDA_START_SCAN_REQ:
12616 {
12617 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12618 break ;
12619 }
12620 /* end SCAN request from PE */
12621 case WDA_END_SCAN_REQ:
12622 {
12623 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12624 break ;
12625 }
12626 /* end SCAN request from PE */
12627 case WDA_FINISH_SCAN_REQ:
12628 {
12629 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12630 break ;
12631 }
12632 /* join request from PE */
12633 case WDA_CHNL_SWITCH_REQ:
12634 {
12635 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12636 {
12637 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12638 }
12639 else
12640 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012641 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12642 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12643 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12644 {
12645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12646 "call ProcessChannelSwitchReq_V1" );
12647 WDA_ProcessChannelSwitchReq_V1(pWDA,
12648 (tSwitchChannelParams*)pMsg->bodyptr) ;
12649 }
12650 else
12651 {
12652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12653 "call ProcessChannelSwitchReq" );
12654 WDA_ProcessChannelSwitchReq(pWDA,
12655 (tSwitchChannelParams*)pMsg->bodyptr) ;
12656 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012657 }
12658 break ;
12659 }
12660 /* ADD BSS request from PE */
12661 case WDA_ADD_BSS_REQ:
12662 {
12663 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12664 break ;
12665 }
12666 case WDA_ADD_STA_REQ:
12667 {
12668 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12669 break ;
12670 }
12671 case WDA_DELETE_BSS_REQ:
12672 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012673 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12674 break ;
12675 }
12676 case WDA_DELETE_STA_REQ:
12677 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012678 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12679 break ;
12680 }
12681 case WDA_CONFIG_PARAM_UPDATE_REQ:
12682 {
12683 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12684 break ;
12685 }
12686 case WDA_SET_BSSKEY_REQ:
12687 {
12688 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12689 break ;
12690 }
12691 case WDA_SET_STAKEY_REQ:
12692 {
12693 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12694 break ;
12695 }
12696 case WDA_SET_STA_BCASTKEY_REQ:
12697 {
12698 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12699 break ;
12700 }
12701 case WDA_REMOVE_BSSKEY_REQ:
12702 {
12703 WDA_ProcessRemoveBssKeyReq(pWDA,
12704 (tRemoveBssKeyParams *)pMsg->bodyptr);
12705 break ;
12706 }
12707 case WDA_REMOVE_STAKEY_REQ:
12708 {
12709 WDA_ProcessRemoveStaKeyReq(pWDA,
12710 (tRemoveStaKeyParams *)pMsg->bodyptr);
12711 break ;
12712 }
12713 case WDA_REMOVE_STA_BCASTKEY_REQ:
12714 {
12715 /* TODO: currently UMAC is not sending this request, Add the code for
12716 handling this request when UMAC supports */
12717 break;
12718 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012719#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012720 case WDA_TSM_STATS_REQ:
12721 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012722 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012723 break;
12724 }
12725#endif
12726 case WDA_UPDATE_EDCA_PROFILE_IND:
12727 {
12728 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12729 break;
12730 }
12731 case WDA_ADD_TS_REQ:
12732 {
12733 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12734 break;
12735 }
12736 case WDA_DEL_TS_REQ:
12737 {
12738 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12739 break;
12740 }
12741 case WDA_ADDBA_REQ:
12742 {
12743 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12744 break;
12745 }
12746 case WDA_DELBA_IND:
12747 {
12748 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12749 break;
12750 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012751 case WDA_UPDATE_CHAN_LIST_REQ:
12752 {
12753 WDA_ProcessUpdateChannelList(pWDA,
12754 (tSirUpdateChanList *)pMsg->bodyptr);
12755 break;
12756 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012757 case WDA_SET_LINK_STATE:
12758 {
12759 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12760 break;
12761 }
12762 case WDA_GET_STATISTICS_REQ:
12763 {
12764 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12765 break;
12766 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012767#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012768 case WDA_GET_ROAM_RSSI_REQ:
12769 {
12770 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12771 break;
12772 }
12773#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012774 case WDA_PWR_SAVE_CFG:
12775 {
12776 if(pWDA->wdaState == WDA_READY_STATE)
12777 {
12778 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12779 }
12780 else
12781 {
12782 if(NULL != pMsg->bodyptr)
12783 {
12784 vos_mem_free(pMsg->bodyptr);
12785 }
12786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12787 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12788 }
12789 break;
12790 }
12791 case WDA_ENTER_IMPS_REQ:
12792 {
12793 if(pWDA->wdaState == WDA_READY_STATE)
12794 {
12795 WDA_ProcessEnterImpsReq(pWDA);
12796 }
12797 else
12798 {
12799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12800 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12801 }
12802 break;
12803 }
12804 case WDA_EXIT_IMPS_REQ:
12805 {
12806 if(pWDA->wdaState == WDA_READY_STATE)
12807 {
12808 WDA_ProcessExitImpsReq(pWDA);
12809 }
12810 else
12811 {
12812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12813 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12814 }
12815 break;
12816 }
12817 case WDA_ENTER_BMPS_REQ:
12818 {
12819 if(pWDA->wdaState == WDA_READY_STATE)
12820 {
12821 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12822 }
12823 else
12824 {
12825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12826 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12827 }
12828 break;
12829 }
12830 case WDA_EXIT_BMPS_REQ:
12831 {
12832 if(pWDA->wdaState == WDA_READY_STATE)
12833 {
12834 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12835 }
12836 else
12837 {
12838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12839 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12840 }
12841 break;
12842 }
12843 case WDA_ENTER_UAPSD_REQ:
12844 {
12845 if(pWDA->wdaState == WDA_READY_STATE)
12846 {
12847 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12848 }
12849 else
12850 {
12851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12852 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12853 }
12854 break;
12855 }
12856 case WDA_EXIT_UAPSD_REQ:
12857 {
12858 if(pWDA->wdaState == WDA_READY_STATE)
12859 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012860 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012861 }
12862 else
12863 {
12864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12865 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12866 }
12867 break;
12868 }
12869 case WDA_UPDATE_UAPSD_IND:
12870 {
12871 if(pWDA->wdaState == WDA_READY_STATE)
12872 {
12873 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12874 }
12875 else
12876 {
12877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12878 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12879 }
12880 break;
12881 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012882 case WDA_REGISTER_PE_CALLBACK :
12883 {
12884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12885 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12886 /*TODO: store the PE callback */
12887 /* Do Nothing? MSG Body should be freed at here */
12888 if(NULL != pMsg->bodyptr)
12889 {
12890 vos_mem_free(pMsg->bodyptr);
12891 }
12892 break;
12893 }
12894 case WDA_SYS_READY_IND :
12895 {
12896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12897 "Handling msg type WDA_SYS_READY_IND " );
12898 pWDA->wdaState = WDA_READY_STATE;
12899 if(NULL != pMsg->bodyptr)
12900 {
12901 vos_mem_free(pMsg->bodyptr);
12902 }
12903 break;
12904 }
12905 case WDA_BEACON_FILTER_IND :
12906 {
12907 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12908 break;
12909 }
12910 case WDA_BTC_SET_CFG:
12911 {
12912 /*TODO: handle this while dealing with BTC */
12913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12914 "Handling msg type WDA_BTC_SET_CFG " );
12915 /* Do Nothing? MSG Body should be freed at here */
12916 if(NULL != pMsg->bodyptr)
12917 {
12918 vos_mem_free(pMsg->bodyptr);
12919 }
12920 break;
12921 }
12922 case WDA_SIGNAL_BT_EVENT:
12923 {
12924 /*TODO: handle this while dealing with BTC */
12925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12926 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12927 /* Do Nothing? MSG Body should be freed at here */
12928 if(NULL != pMsg->bodyptr)
12929 {
12930 vos_mem_free(pMsg->bodyptr);
12931 }
12932 break;
12933 }
12934 case WDA_CFG_RXP_FILTER_REQ:
12935 {
12936 WDA_ProcessConfigureRxpFilterReq(pWDA,
12937 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12938 break;
12939 }
12940 case WDA_SET_HOST_OFFLOAD:
12941 {
12942 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12943 break;
12944 }
12945 case WDA_SET_KEEP_ALIVE:
12946 {
12947 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12948 break;
12949 }
12950#ifdef WLAN_NS_OFFLOAD
12951 case WDA_SET_NS_OFFLOAD:
12952 {
12953 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12954 break;
12955 }
12956#endif //WLAN_NS_OFFLOAD
12957 case WDA_ADD_STA_SELF_REQ:
12958 {
12959 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12960 break;
12961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012962 case WDA_DEL_STA_SELF_REQ:
12963 {
12964 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12965 break;
12966 }
12967 case WDA_WOWL_ADD_BCAST_PTRN:
12968 {
12969 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12970 break;
12971 }
12972 case WDA_WOWL_DEL_BCAST_PTRN:
12973 {
12974 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12975 break;
12976 }
12977 case WDA_WOWL_ENTER_REQ:
12978 {
12979 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12980 break;
12981 }
12982 case WDA_WOWL_EXIT_REQ:
12983 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012984 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012985 break;
12986 }
12987 case WDA_TL_FLUSH_AC_REQ:
12988 {
12989 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12990 break;
12991 }
12992 case WDA_SIGNAL_BTAMP_EVENT:
12993 {
12994 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12995 break;
12996 }
Abhishek Singh85b74712014-10-08 11:38:19 +053012997 case WDA_FW_STATS_GET_REQ:
12998 {
12999 WDA_ProcessFWStatsGetReq(pWDA,
13000 (tSirFWStatsGetReq *)pMsg->bodyptr);
13001 break;
13002 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013003#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13004 case WDA_LINK_LAYER_STATS_SET_REQ:
13005 {
13006 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13007 break;
13008 }
13009 case WDA_LINK_LAYER_STATS_GET_REQ:
13010 {
13011 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13012 break;
13013 }
13014 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13015 {
13016 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13017 break;
13018 }
13019#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013020#ifdef WLAN_FEATURE_EXTSCAN
13021 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13022 {
13023 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13024 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13025 break;
13026 }
13027 case WDA_EXTSCAN_START_REQ:
13028 {
13029 WDA_ProcessEXTScanStartReq(pWDA,
13030 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13031 break;
13032 }
13033 case WDA_EXTSCAN_STOP_REQ:
13034 {
13035 WDA_ProcessEXTScanStopReq(pWDA,
13036 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13037 break;
13038 }
13039 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13040 {
13041 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13042 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13043 break;
13044 }
13045 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13046 {
13047 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13048 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13049 break;
13050 }
13051 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13052 {
13053 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13054 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13055 break;
13056 }
13057 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13058 {
13059 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13060 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13061 break;
13062 }
13063 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13064 {
13065 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13066 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13067 break;
13068 }
13069#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013070#ifdef WDA_UT
13071 case WDA_WDI_EVENT_MSG:
13072 {
13073 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13074 break ;
13075 }
13076#endif
13077 case WDA_UPDATE_BEACON_IND:
13078 {
13079 WDA_ProcessUpdateBeaconParams(pWDA,
13080 (tUpdateBeaconParams *)pMsg->bodyptr);
13081 break;
13082 }
13083 case WDA_SEND_BEACON_REQ:
13084 {
13085 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13086 break;
13087 }
13088 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13089 {
13090 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13091 (tSendProbeRespParams *)pMsg->bodyptr);
13092 break;
13093 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013094#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013095 case WDA_SET_MAX_TX_POWER_REQ:
13096 {
13097 WDA_ProcessSetMaxTxPowerReq(pWDA,
13098 (tMaxTxPowerParams *)pMsg->bodyptr);
13099 break;
13100 }
13101#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013102 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13103 {
13104 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13105 pMsg->bodyptr);
13106 break;
13107 }
schang86c22c42013-03-13 18:41:24 -070013108 case WDA_SET_TX_POWER_REQ:
13109 {
13110 WDA_ProcessSetTxPowerReq(pWDA,
13111 (tSirSetTxPowerReq *)pMsg->bodyptr);
13112 break;
13113 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013114 case WDA_SET_P2P_GO_NOA_REQ:
13115 {
13116 WDA_ProcessSetP2PGONOAReq(pWDA,
13117 (tP2pPsParams *)pMsg->bodyptr);
13118 break;
13119 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013120 /* timer related messages */
13121 case WDA_TIMER_BA_ACTIVITY_REQ:
13122 {
13123 WDA_BaCheckActivity(pWDA) ;
13124 break ;
13125 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013126
13127 /* timer related messages */
13128 case WDA_TIMER_TRAFFIC_STATS_IND:
13129 {
13130 WDA_TimerTrafficStatsInd(pWDA);
13131 break;
13132 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013133#ifdef WLAN_FEATURE_VOWIFI_11R
13134 case WDA_AGGR_QOS_REQ:
13135 {
13136 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13137 break;
13138 }
13139#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013140 case WDA_FTM_CMD_REQ:
13141 {
13142 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13143 break ;
13144 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013145#ifdef FEATURE_OEM_DATA_SUPPORT
13146 case WDA_START_OEM_DATA_REQ:
13147 {
13148 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13149 break;
13150 }
13151#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013152 /* Tx Complete Time out Indication */
13153 case WDA_TX_COMPLETE_TIMEOUT_IND:
13154 {
13155 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13156 break;
13157 }
13158 case WDA_WLAN_SUSPEND_IND:
13159 {
13160 WDA_ProcessWlanSuspendInd(pWDA,
13161 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13162 break;
13163 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013164 case WDA_WLAN_RESUME_REQ:
13165 {
13166 WDA_ProcessWlanResumeReq(pWDA,
13167 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13168 break;
13169 }
13170
13171 case WDA_UPDATE_CF_IND:
13172 {
13173 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13174 pMsg->bodyptr = NULL;
13175 break;
13176 }
13177#ifdef FEATURE_WLAN_SCAN_PNO
13178 case WDA_SET_PNO_REQ:
13179 {
13180 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13181 break;
13182 }
13183 case WDA_UPDATE_SCAN_PARAMS_REQ:
13184 {
13185 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13186 break;
13187 }
13188 case WDA_SET_RSSI_FILTER_REQ:
13189 {
13190 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13191 break;
13192 }
13193#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013194#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013195 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013196 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013197 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013198 break;
13199 }
13200#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013201 case WDA_SET_TX_PER_TRACKING_REQ:
13202 {
13203 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13204 break;
13205 }
13206
13207#ifdef WLAN_FEATURE_PACKET_FILTERING
13208 case WDA_8023_MULTICAST_LIST_REQ:
13209 {
13210 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13211 break;
13212 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013213 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13214 {
13215 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13216 break;
13217 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013218 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13219 {
13220 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13221 break;
13222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013223 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13224 {
13225 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13226 break;
13227 }
13228#endif // WLAN_FEATURE_PACKET_FILTERING
13229
13230
13231 case WDA_TRANSMISSION_CONTROL_IND:
13232 {
13233 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13234 break;
13235 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013236 case WDA_SET_POWER_PARAMS_REQ:
13237 {
13238 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13239 break;
13240 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013241#ifdef WLAN_FEATURE_GTK_OFFLOAD
13242 case WDA_GTK_OFFLOAD_REQ:
13243 {
13244 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13245 break;
13246 }
13247
13248 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13249 {
13250 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13251 break;
13252 }
13253#endif //WLAN_FEATURE_GTK_OFFLOAD
13254
13255 case WDA_SET_TM_LEVEL_REQ:
13256 {
13257 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13258 break;
13259 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013260
Mohit Khanna4a70d262012-09-11 16:30:12 -070013261 case WDA_UPDATE_OP_MODE:
13262 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013263 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13264 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13265 {
13266 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13267 }
13268 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013269 {
13270 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13271 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13272 else
13273 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013274 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013275 }
13276 else
13277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013278 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013279 break;
13280 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013281#ifdef WLAN_FEATURE_11W
13282 case WDA_EXCLUDE_UNENCRYPTED_IND:
13283 {
13284 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13285 break;
13286 }
13287#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013288#ifdef FEATURE_WLAN_TDLS
13289 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13290 {
13291 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13292 break;
13293 }
13294#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013295 case WDA_DHCP_START_IND:
13296 {
13297 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13298 break;
13299 }
13300 case WDA_DHCP_STOP_IND:
13301 {
13302 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13303 break;
13304 }
Leo Chang9056f462013-08-01 19:21:11 -070013305#ifdef FEATURE_WLAN_LPHB
13306 case WDA_LPHB_CONF_REQ:
13307 {
13308 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13309 break;
13310 }
13311#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013312 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13313 {
13314 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13315 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13316 break;
13317 }
13318 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13319 {
13320 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13321 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13322 break;
13323 }
13324
Rajeev79dbe4c2013-10-05 11:03:42 +053013325#ifdef FEATURE_WLAN_BATCH_SCAN
13326 case WDA_SET_BATCH_SCAN_REQ:
13327 {
13328 WDA_ProcessSetBatchScanReq(pWDA,
13329 (tSirSetBatchScanReq *)pMsg->bodyptr);
13330 break;
13331 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013332 case WDA_RATE_UPDATE_IND:
13333 {
13334 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13335 break;
13336 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013337 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13338 {
13339 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13340 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13341 break;
13342 }
13343 case WDA_STOP_BATCH_SCAN_IND:
13344 {
13345 WDA_ProcessStopBatchScanInd(pWDA,
13346 (tSirStopBatchScanInd *)pMsg->bodyptr);
13347 break;
13348 }
c_hpothu92367912014-05-01 15:18:17 +053013349 case WDA_GET_BCN_MISS_RATE_REQ:
13350 WDA_ProcessGetBcnMissRateReq(pWDA,
13351 (tSirBcnMissRateReq *)pMsg->bodyptr);
13352 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013353#endif
13354
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013355 case WDA_HT40_OBSS_SCAN_IND:
13356 {
13357 WDA_ProcessHT40OBSSScanInd(pWDA,
13358 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13359 break;
13360 }
13361 case WDA_HT40_OBSS_STOP_SCAN_IND:
13362 {
13363 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13364 (tANI_U8*)pMsg->bodyptr);
13365 break;
13366 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013367// tdlsoffchan
13368#ifdef FEATURE_WLAN_TDLS
13369 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13370 {
13371 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13372 break;
13373 }
13374#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013375 case WDA_SPOOF_MAC_ADDR_REQ:
13376 {
13377 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13378 break;
13379 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053013380 case WDA_ENCRYPT_MSG_REQ:
13381 {
13382 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
13383 break;
13384 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013385 default:
13386 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013388 "No Handling for msg type %x in WDA "
13389 ,pMsg->type);
13390 /* Do Nothing? MSG Body should be freed at here */
13391 if(NULL != pMsg->bodyptr)
13392 {
13393 vos_mem_free(pMsg->bodyptr);
13394 }
13395 //WDA_VOS_ASSERT(0) ;
13396 }
13397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013398 return status ;
13399}
13400
Jeff Johnson295189b2012-06-20 16:38:30 -070013401/*
13402 * FUNCTION: WDA_LowLevelIndCallback
13403 * IND API callback from WDI, send Ind to PE
13404 */
13405void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13406 void* pUserData )
13407{
13408 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13409#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13410 tSirRSSINotification rssiNotification;
13411#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013412 if(NULL == pWDA)
13413 {
13414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013415 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013416 VOS_ASSERT(0);
13417 return ;
13418 }
13419
13420 switch(wdiLowLevelInd->wdiIndicationType)
13421 {
13422 case WDI_RSSI_NOTIFICATION_IND:
13423 {
13424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13425 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013426#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13427 rssiNotification.bReserved =
13428 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13429 rssiNotification.bRssiThres1NegCross =
13430 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13431 rssiNotification.bRssiThres1PosCross =
13432 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13433 rssiNotification.bRssiThres2NegCross =
13434 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13435 rssiNotification.bRssiThres2PosCross =
13436 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13437 rssiNotification.bRssiThres3NegCross =
13438 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13439 rssiNotification.bRssiThres3PosCross =
13440 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013441 rssiNotification.avgRssi = (v_S7_t)
13442 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013443 WLANTL_BMPSRSSIRegionChangedNotification(
13444 pWDA->pVosContext,
13445 &rssiNotification);
13446#endif
13447 break ;
13448 }
13449 case WDI_MISSED_BEACON_IND:
13450 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013451 tpSirSmeMissedBeaconInd pMissBeacInd =
13452 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13454 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013456 if(NULL == pMissBeacInd)
13457 {
13458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13459 "%s: VOS MEM Alloc Failure", __func__);
13460 break;
13461 }
13462 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13463 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13464 pMissBeacInd->bssIdx =
13465 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13466 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013467 break ;
13468 }
13469 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13470 {
13471 /* TODO: Decode Ind and send Ind to PE */
13472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13473 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13474 break ;
13475 }
13476
13477 case WDI_MIC_FAILURE_IND:
13478 {
13479 tpSirSmeMicFailureInd pMicInd =
13480 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13481
13482 if(NULL == pMicInd)
13483 {
13484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013486 break;
13487 }
13488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13489 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013490 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13491 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13492 vos_mem_copy(pMicInd->bssId,
13493 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13494 sizeof(tSirMacAddr));
13495 vos_mem_copy(pMicInd->info.srcMacAddr,
13496 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13497 sizeof(tSirMacAddr));
13498 vos_mem_copy(pMicInd->info.taMacAddr,
13499 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13500 sizeof(tSirMacAddr));
13501 vos_mem_copy(pMicInd->info.dstMacAddr,
13502 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13503 sizeof(tSirMacAddr));
13504 vos_mem_copy(pMicInd->info.rxMacAddr,
13505 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13506 sizeof(tSirMacAddr));
13507 pMicInd->info.multicast =
13508 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13509 pMicInd->info.keyId=
13510 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13511 pMicInd->info.IV1=
13512 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13513 vos_mem_copy(pMicInd->info.TSC,
13514 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013515 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13516 (void *)pMicInd , 0) ;
13517 break ;
13518 }
13519 case WDI_FATAL_ERROR_IND:
13520 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013521 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013522 /* TODO: Decode Ind and send Ind to PE */
13523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13524 "Received WDI_FATAL_ERROR_IND from WDI ");
13525 break ;
13526 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013527 case WDI_DEL_STA_IND:
13528 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013529 tpDeleteStaContext pDelSTACtx =
13530 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13531
13532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13533 "Received WDI_DEL_STA_IND from WDI ");
13534 if(NULL == pDelSTACtx)
13535 {
13536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013538 break;
13539 }
13540 vos_mem_copy(pDelSTACtx->addr2,
13541 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13542 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013543 vos_mem_copy(pDelSTACtx->bssId,
13544 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13545 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013546 pDelSTACtx->assocId =
13547 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13548 pDelSTACtx->reasonCode =
13549 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13550 pDelSTACtx->staId =
13551 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013552 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13553 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013554 break ;
13555 }
13556 case WDI_COEX_IND:
13557 {
13558 tANI_U32 index;
13559 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053013560 tSirSmeCoexInd *pSmeCoexInd;
13561
13562 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
13563 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
13564 {
13565 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
13566 {
13567 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13568 FL("Coex state: 0x%x coex feature: 0x%x"),
13569 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
13570 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
13571
13572 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
13573 {
13574 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
13575 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
13576 }
13577 }
13578 break;
13579 }
13580
13581 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013582 if(NULL == pSmeCoexInd)
13583 {
13584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013585 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013586 break;
13587 }
13588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13589 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013590 /* Message Header */
13591 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13592 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013593 /* Info from WDI Indication */
13594 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13595 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13596 {
13597 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13598 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 /* VOS message wrapper */
13600 vosMsg.type = eWNI_SME_COEX_IND;
13601 vosMsg.bodyptr = (void *)pSmeCoexInd;
13602 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013603 /* Send message to SME */
13604 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13605 {
13606 /* free the mem and return */
13607 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13608 }
13609 else
13610 {
13611 /* DEBUG */
13612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13613 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13614 pSmeCoexInd->coexIndType,
13615 pSmeCoexInd->coexIndData[0],
13616 pSmeCoexInd->coexIndData[1],
13617 pSmeCoexInd->coexIndData[2],
13618 pSmeCoexInd->coexIndData[3]);
13619 }
13620 break;
13621 }
13622 case WDI_TX_COMPLETE_IND:
13623 {
13624 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13625 /* Calling TxCompleteAck Indication from wda context*/
13626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13627 "Complete Indication received from HAL");
13628 if( pWDA->pAckTxCbFunc )
13629 {
13630 if( VOS_STATUS_SUCCESS !=
13631 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13632 {
13633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13634 "Tx Complete timeout Timer Stop Failed ");
13635 }
13636 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13637 pWDA->pAckTxCbFunc = NULL;
13638 }
13639 else
13640 {
13641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13642 "Tx Complete Indication is received after timeout ");
13643 }
13644 break;
13645 }
Viral Modid86bde22012-12-10 13:09:21 -080013646 case WDI_P2P_NOA_START_IND :
13647 {
13648 tSirP2PNoaStart *pP2pNoaStart =
13649 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13650
13651 if (NULL == pP2pNoaStart)
13652 {
13653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13654 "Memory allocation failure, "
13655 "WDI_P2P_NOA_START_IND not forwarded");
13656 break;
13657 }
13658 pP2pNoaStart->status =
13659 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13660 pP2pNoaStart->bssIdx =
13661 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13662 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13663 (void *)pP2pNoaStart , 0) ;
13664 break;
13665 }
13666
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013667#ifdef FEATURE_WLAN_TDLS
13668 case WDI_TDLS_IND :
13669 {
13670 tSirTdlsInd *pTdlsInd =
13671 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13672
13673 if (NULL == pTdlsInd)
13674 {
13675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13676 "Memory allocation failure, "
13677 "WDI_TDLS_IND not forwarded");
13678 break;
13679 }
13680 pTdlsInd->status =
13681 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13682 pTdlsInd->assocId =
13683 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13684 pTdlsInd->staIdx =
13685 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13686 pTdlsInd->reasonCode =
13687 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13688 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13689 (void *)pTdlsInd , 0) ;
13690 break;
13691 }
13692#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013693 case WDI_P2P_NOA_ATTR_IND :
13694 {
13695 tSirP2PNoaAttr *pP2pNoaAttr =
13696 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13698 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013699 if (NULL == pP2pNoaAttr)
13700 {
13701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13702 "Memory allocation failure, "
13703 "WDI_P2P_NOA_ATTR_IND not forwarded");
13704 break;
13705 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013706 pP2pNoaAttr->index =
13707 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13708 pP2pNoaAttr->oppPsFlag =
13709 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13710 pP2pNoaAttr->ctWin =
13711 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13712
13713 pP2pNoaAttr->uNoa1IntervalCnt =
13714 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13715 pP2pNoaAttr->uNoa1Duration =
13716 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13717 pP2pNoaAttr->uNoa1Interval =
13718 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13719 pP2pNoaAttr->uNoa1StartTime =
13720 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013721 pP2pNoaAttr->uNoa2IntervalCnt =
13722 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13723 pP2pNoaAttr->uNoa2Duration =
13724 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13725 pP2pNoaAttr->uNoa2Interval =
13726 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13727 pP2pNoaAttr->uNoa2StartTime =
13728 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13730 (void *)pP2pNoaAttr , 0) ;
13731 break;
13732 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013733#ifdef FEATURE_WLAN_SCAN_PNO
13734 case WDI_PREF_NETWORK_FOUND_IND:
13735 {
13736 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013737 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13738 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13739 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13740 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13741
Jeff Johnson295189b2012-06-20 16:38:30 -070013742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13743 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013744 if (NULL == pPrefNetworkFoundInd)
13745 {
13746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13747 "Memory allocation failure, "
13748 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013749 if (NULL !=
13750 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13751 {
13752 wpalMemoryFree(
13753 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13754 );
13755 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13756 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013757 break;
13758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013759 /* Message Header */
13760 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013761 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013762
13763 /* Info from WDI Indication */
13764 pPrefNetworkFoundInd->ssId.length =
13765 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013766 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013767 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13768 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13769 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013770 if (NULL !=
13771 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13772 {
13773 pPrefNetworkFoundInd->frameLength =
13774 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13775 vos_mem_copy( pPrefNetworkFoundInd->data,
13776 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13777 pPrefNetworkFoundInd->frameLength);
13778 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13779 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13780 }
13781 else
13782 {
13783 pPrefNetworkFoundInd->frameLength = 0;
13784 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013785 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013786 /* VOS message wrapper */
13787 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13788 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13789 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013790 /* Send message to SME */
13791 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13792 {
13793 /* free the mem and return */
13794 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013796 break;
13797 }
13798#endif // FEATURE_WLAN_SCAN_PNO
13799
13800#ifdef WLAN_WAKEUP_EVENTS
13801 case WDI_WAKE_REASON_IND:
13802 {
13803 vos_msg_t vosMsg;
13804 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13805 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13806 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13807
13808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053013809 "[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 -070013810 wdiLowLevelInd->wdiIndicationType,
13811 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13812 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13813 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13814
13815 if (NULL == pWakeReasonInd)
13816 {
13817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13818 "Memory allocation failure, "
13819 "WDI_WAKE_REASON_IND not forwarded");
13820 break;
13821 }
13822
13823 vos_mem_zero(pWakeReasonInd, allocSize);
13824
13825 /* Message Header */
13826 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13827 pWakeReasonInd->mesgLen = allocSize;
13828
13829 /* Info from WDI Indication */
13830 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13831 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13832 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13833 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13834 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13835 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13836 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13837 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13838
13839 /* VOS message wrapper */
13840 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13841 vosMsg.bodyptr = (void *) pWakeReasonInd;
13842 vosMsg.bodyval = 0;
13843
13844 /* Send message to SME */
13845 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13846 {
13847 /* free the mem and return */
13848 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13849 }
13850
13851 break;
13852 }
13853#endif // WLAN_WAKEUP_EVENTS
13854
13855 case WDI_TX_PER_HIT_IND:
13856 {
13857 vos_msg_t vosMsg;
13858 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13859 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13860 /* VOS message wrapper */
13861 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13862 vosMsg.bodyptr = NULL;
13863 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013864 /* Send message to SME */
13865 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13866 {
13867 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13868 }
13869 break;
13870 }
13871
Leo Chang9056f462013-08-01 19:21:11 -070013872#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013873 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013874 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013875 vos_msg_t vosMsg;
13876 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013877
Leo Changd9df8aa2013-09-26 13:32:26 -070013878 lphbInd =
13879 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13880 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013881 {
13882 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13883 "%s: LPHB IND buffer alloc Fail", __func__);
13884 return ;
13885 }
13886
Leo Changd9df8aa2013-09-26 13:32:26 -070013887 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013888 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013889 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013890 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013891 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013892 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13893
13894 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013895 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013896 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13897
Leo Changd9df8aa2013-09-26 13:32:26 -070013898 vosMsg.type = eWNI_SME_LPHB_IND;
13899 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013900 vosMsg.bodyval = 0;
13901 /* Send message to SME */
13902 if (VOS_STATUS_SUCCESS !=
13903 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13904 {
13905 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13906 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013907 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013908 }
13909 break;
13910 }
13911#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013912 case WDI_PERIODIC_TX_PTRN_FW_IND:
13913 {
13914 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13915 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13916 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13917 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13918 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13919 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13920 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13921
13922 break;
13923 }
Leo Chang9056f462013-08-01 19:21:11 -070013924
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013925 case WDI_IBSS_PEER_INACTIVITY_IND:
13926 {
13927 tSirIbssPeerInactivityInd *pIbssInd =
13928 (tSirIbssPeerInactivityInd *)
13929 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13930
13931 if (NULL == pIbssInd)
13932 {
13933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13934 "Memory allocation failure, "
13935 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13936 break;
13937 }
13938
13939 pIbssInd->bssIdx =
13940 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13941 pIbssInd->staIdx =
13942 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13943 vos_mem_copy(pIbssInd->peerAddr,
13944 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13945 sizeof(tSirMacAddr));
13946 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13947 break;
13948 }
13949
Rajeev79dbe4c2013-10-05 11:03:42 +053013950#ifdef FEATURE_WLAN_BATCH_SCAN
13951 case WDI_BATCH_SCAN_RESULT_IND:
13952 {
13953 void *pBatchScanResult;
13954 void *pCallbackContext;
13955 tpAniSirGlobal pMac;
13956
13957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13958 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13959
13960 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053013961 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053013962 {
13963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13964 "%s:pWDA is NULL", __func__);
13965 VOS_ASSERT(0);
13966 return;
13967 }
13968
13969 pBatchScanResult =
13970 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13971 if (NULL == pBatchScanResult)
13972 {
13973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13974 "%s:Batch scan result from FW is null can't invoke HDD callback",
13975 __func__);
13976 VOS_ASSERT(0);
13977 return;
13978 }
13979
13980 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13981 if (NULL == pMac)
13982 {
13983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13984 "%s:pMac is NULL", __func__);
13985 VOS_ASSERT(0);
13986 return;
13987 }
13988
13989 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13990 /*call hdd callback with set batch scan response data*/
13991 if(pMac->pmc.batchScanResultCallback)
13992 {
13993 pMac->pmc.batchScanResultCallback(pCallbackContext,
13994 pBatchScanResult);
13995 }
13996 else
13997 {
13998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13999 "%s:HDD callback is null", __func__);
14000 VOS_ASSERT(0);
14001 }
14002 break;
14003 }
14004#endif
14005
Leo Chang0b0e45a2013-12-15 15:18:55 -080014006#ifdef FEATURE_WLAN_CH_AVOID
14007 case WDI_CH_AVOID_IND:
14008 {
14009 vos_msg_t vosMsg;
14010 tSirChAvoidIndType *chAvoidInd;
14011
14012 chAvoidInd =
14013 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14014 if (NULL == chAvoidInd)
14015 {
14016 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14017 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14018 return ;
14019 }
14020
14021 chAvoidInd->avoidRangeCount =
14022 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14023 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14024 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14025 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14026
14027 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14028 "%s : WDA CH avoid notification", __func__);
14029
14030 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14031 vosMsg.bodyptr = chAvoidInd;
14032 vosMsg.bodyval = 0;
14033 /* Send message to SME */
14034 if (VOS_STATUS_SUCCESS !=
14035 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14036 {
14037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14038 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14039 vos_mem_free(chAvoidInd);
14040 }
14041 break;
14042 }
14043#endif /* FEATURE_WLAN_CH_AVOID */
14044
Sunil Duttbd736ed2014-05-26 21:19:41 +053014045#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14046 case WDI_LL_STATS_RESULTS_IND:
14047 {
14048 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014049 tpAniSirGlobal pMac;
14050
14051 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14052 "Received WDI_LL_STATS_RESULTS_IND from FW");
14053
14054 /*sanity check*/
14055 if (NULL == pWDA)
14056 {
14057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14058 "%s:pWDA is NULL", __func__);
14059 VOS_ASSERT(0);
14060 return;
14061 }
14062
14063 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014064 (void *)wdiLowLevelInd->
14065 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014066 if (NULL == pLinkLayerStatsInd)
14067 {
14068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14069 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14070 __func__);
14071 VOS_ASSERT(0);
14072 return;
14073 }
14074
14075 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14076 if (NULL == pMac)
14077 {
14078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14079 "%s:pMac is NULL", __func__);
14080 VOS_ASSERT(0);
14081 return;
14082 }
14083
Dino Mycled3d50022014-07-07 12:58:25 +053014084 /* call hdd callback with Link Layer Statistics.
14085 * vdev_id/ifacId in link_stats_results will be
14086 * used to retrieve the correct HDD context
14087 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014088 if (pMac->sme.pLinkLayerStatsIndCallback)
14089 {
Dino Mycled3d50022014-07-07 12:58:25 +053014090 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014091 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014092 pLinkLayerStatsInd,
14093 wdiLowLevelInd->
14094 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014095 }
14096 else
14097 {
14098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14099 "%s:HDD callback is null", __func__);
14100 }
14101 break;
14102 }
14103#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14104
Dino Mycle41bdc942014-06-10 11:30:24 +053014105#ifdef WLAN_FEATURE_EXTSCAN
14106 case WDI_EXTSCAN_PROGRESS_IND:
14107 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14108 case WDI_EXTSCAN_SCAN_RESULT_IND:
14109 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14110 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14111 {
14112 void *pEXTScanData;
14113 void *pCallbackContext;
14114 tpAniSirGlobal pMac;
14115 tANI_U16 indType;
14116
14117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14118 "Received WDI_EXTSCAN Indications from FW");
14119 /*sanity check*/
14120 if (NULL == pWDA)
14121 {
14122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14123 "%s:pWDA is NULL", __func__);
14124 VOS_ASSERT(0);
14125 return;
14126 }
14127 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14128 {
14129 indType = WDA_EXTSCAN_PROGRESS_IND;
14130
14131 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14132 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14133 }
14134 if (wdiLowLevelInd->wdiIndicationType ==
14135 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14136 {
14137 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14138
14139 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14140 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14141 }
14142 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14143 {
14144 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14145
14146 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14147 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14148 }
14149 if (wdiLowLevelInd->wdiIndicationType ==
14150 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14151 {
14152 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14153
14154 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14155 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14156 }
14157 if (wdiLowLevelInd->wdiIndicationType ==
14158 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14159 {
14160 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14161
14162 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14163 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14164 }
14165
14166 pEXTScanData =
14167 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14168 if (NULL == pEXTScanData)
14169 {
14170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14171 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14172 __func__);
14173 VOS_ASSERT(0);
14174 return;
14175 }
14176
14177 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14178 if (NULL == pMac)
14179 {
14180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14181 "%s:pMac is NULL", __func__);
14182 VOS_ASSERT(0);
14183 return;
14184 }
14185
14186 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14187
14188 if(pMac->sme.pEXTScanIndCb)
14189 {
14190 pMac->sme.pEXTScanIndCb(pCallbackContext,
14191 indType,
14192 pEXTScanData);
14193 }
14194 else
14195 {
14196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14197 "%s:HDD callback is null", __func__);
14198 }
14199 break;
14200 }
14201#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014202 case WDI_DEL_BA_IND:
14203 {
14204 tpBADeleteParams pDelBAInd =
14205 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14206
14207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14208 "Received WDI_DEL_BA_IND from WDI ");
14209 if(NULL == pDelBAInd)
14210 {
14211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14212 "%s: VOS MEM Alloc Failure", __func__);
14213 break;
14214 }
14215 vos_mem_copy(pDelBAInd->peerMacAddr,
14216 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14217 sizeof(tSirMacAddr));
14218 vos_mem_copy(pDelBAInd->bssId,
14219 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14220 sizeof(tSirMacAddr));
14221 pDelBAInd->staIdx =
14222 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14223 pDelBAInd->baTID =
14224 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14225 pDelBAInd->baDirection =
14226 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14227 pDelBAInd->reasonCode =
14228 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14229
14230 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14231 (void *)pDelBAInd , 0) ;
14232 break;
14233 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014234
Jeff Johnson295189b2012-06-20 16:38:30 -070014235 default:
14236 {
14237 /* TODO error */
14238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14239 "Received UNKNOWN Indication from WDI ");
14240 }
14241 }
14242 return ;
14243}
14244
Jeff Johnson295189b2012-06-20 16:38:30 -070014245/*
14246 * BA related processing in WDA.
14247 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014248void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14249 void* pUserData)
14250{
14251 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14252 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014253 if(NULL == pWdaParams)
14254 {
14255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014256 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014257 VOS_ASSERT(0) ;
14258 return ;
14259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014261 vos_mem_free(pWdaParams->wdaMsgParam) ;
14262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14263 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014265 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014266 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14267 {
14268 tANI_U8 i = 0 ;
14269 tBaActivityInd *baActivityInd = NULL ;
14270 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14271 tANI_U8 allocSize = sizeof(tBaActivityInd)
14272 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14273 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14274 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014275 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014276 if(NULL == baActivityInd)
14277 {
14278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014280 VOS_ASSERT(0) ;
14281 return;
14282 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014283 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14284 sizeof(tSirMacAddr)) ;
14285 baActivityInd->baCandidateCnt = baCandidateCount ;
14286
14287 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14288 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14289
14290 for(i = 0 ; i < baCandidateCount ; i++)
14291 {
14292 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014293 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14294 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014295 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14296 {
14297 baCandidate->baInfo[tid].fBaEnable =
14298 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14299 baCandidate->baInfo[tid].startingSeqNum =
14300 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14301 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014302 wdiBaCandidate++ ;
14303 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014304 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014305 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14306 }
14307 else
14308 {
14309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14310 "BA Trigger RSP with Failure received ");
14311 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014312 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014313}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014314
14315
14316/*
14317 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14318 * during MCC
14319 */
14320void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14321{
14322 wpt_uint32 enabled;
14323 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14324 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14325 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14326
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014327 if (NULL == pMac )
14328 {
14329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14330 "%s: Invoked with invalid MAC context ", __func__ );
14331 VOS_ASSERT(0);
14332 return;
14333 }
14334
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014335 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14336 != eSIR_SUCCESS)
14337 {
14338 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14339 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14340 return;
14341 }
14342
14343 if(!enabled)
14344 {
14345 return;
14346 }
14347
14348 if(NULL == pWDA)
14349 {
14350 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14351 "%s:WDA context is NULL", __func__);
14352 VOS_ASSERT(0);
14353 return;
14354 }
14355
14356 if(activate)
14357 {
14358 if( VOS_STATUS_SUCCESS !=
14359 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14360 {
14361 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14362 "Traffic Stats Timer Start Failed ");
14363 return;
14364 }
14365 WDI_DS_ActivateTrafficStats();
14366 }
14367 else
14368 {
14369 WDI_DS_DeactivateTrafficStats();
14370 WDI_DS_ClearTrafficStats();
14371
14372 if( VOS_STATUS_SUCCESS !=
14373 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14374 {
14375 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14376 "Traffic Stats Timer Stop Failed ");
14377 return;
14378 }
14379 }
14380}
14381
14382/*
14383 * Traffic Stats Timer handler
14384 */
14385void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14386{
14387 WDI_Status wdiStatus;
14388 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14389 WDI_TrafficStatsIndType trafficStatsIndParams;
14390 wpt_uint32 length, enabled;
14391 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14392
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014393 if (NULL == pMac )
14394 {
14395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14396 "%s: Invoked with invalid MAC context ", __func__ );
14397 VOS_ASSERT(0);
14398 return;
14399 }
14400
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014401 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14402 != eSIR_SUCCESS)
14403 {
14404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14405 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14406 return;
14407 }
14408
14409 if(!enabled)
14410 {
14411 WDI_DS_DeactivateTrafficStats();
14412 return;
14413 }
14414
14415 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14416
14417 if(pWdiTrafficStats != NULL)
14418 {
14419 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14420 trafficStatsIndParams.length = length;
14421 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014422 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014423 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14424 trafficStatsIndParams.pUserData = pWDA;
14425
14426 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14427
14428 if(WDI_STATUS_PENDING == wdiStatus)
14429 {
14430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14431 "Pending received for %s:%d ",__func__,__LINE__ );
14432 }
14433 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14434 {
14435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14436 "Failure in %s:%d ",__func__,__LINE__ );
14437 }
14438
14439 WDI_DS_ClearTrafficStats();
14440 }
14441 else
14442 {
14443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14444 "pWdiTrafficStats is Null");
14445 }
14446
14447 if( VOS_STATUS_SUCCESS !=
14448 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14449 {
14450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14451 "Traffic Stats Timer Start Failed ");
14452 return;
14453 }
14454}
14455
Jeff Johnson295189b2012-06-20 16:38:30 -070014456/*
14457 * BA Activity check timer handler
14458 */
14459void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14460{
14461 tANI_U8 curSta = 0 ;
14462 tANI_U8 tid = 0 ;
14463 tANI_U8 size = 0 ;
14464 tANI_U8 baCandidateCount = 0 ;
14465 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014466 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014467 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014468 tpAniSirGlobal pMac;
14469
Jeff Johnson295189b2012-06-20 16:38:30 -070014470 if(NULL == pWDA)
14471 {
14472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014473 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014474 VOS_ASSERT(0);
14475 return ;
14476 }
14477 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14478 {
14479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14480 "Inconsistent STA entries in WDA");
14481 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014482 }
14483 if(NULL == pWDA->pVosContext)
14484 {
14485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14486 "%s: pVosContext is NULL",__func__);
14487 VOS_ASSERT(0);
14488 return ;
14489 }
14490 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014491 if(NULL == pMac)
14492 {
14493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14494 "%s: pMac is NULL",__func__);
14495 VOS_ASSERT(0);
14496 return ;
14497 }
14498
Abhishek Singh0644e482014-10-06 18:38:23 +053014499 if (wlan_cfgGetInt(pMac,
14500 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14501 eSIR_SUCCESS)
14502 {
14503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14504 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14505 val = 0;
14506 }
14507
Jeff Johnson295189b2012-06-20 16:38:30 -070014508 /* walk through all STA entries and find out TX packet count */
14509 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14510 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014511 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014512#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014513 // We can only do BA on "hard" STAs.
14514 if (!(IS_HWSTA_IDX(curSta)))
14515 {
14516 continue;
14517 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014518#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014519 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14520 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014521 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014522 tANI_U32 txPktCount = 0 ;
14523 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014524 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014525 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14526 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014527 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14528 curSta, tid, &txPktCount)))
14529 {
14530#if 0
14531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14532 "************* %d:%d, %d ",curSta, txPktCount,
14533 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14534#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014535 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14536 (currentOperChan <= SIR_11B_CHANNEL_END)))
14537 {
14538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14539 "%s: BTC disabled aggregation - dont start "
14540 "TX ADDBA req",__func__);
14541 }
14542 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014543 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053014544 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
14545 pWDA->wdaGlobalSystemRole) && txPktCount )
14546 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14547 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 {
14549 /* get prepare for sending message to HAL */
14550 //baCandidate[baCandidateCount].staIdx = curSta ;
14551 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14552 newBaCandidate = WDA_ENABLE_BA ;
14553 }
14554 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14555 }
14556 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014557 /* fill the entry for all the sta with given TID's */
14558 if(WDA_ENABLE_BA == newBaCandidate)
14559 {
14560 /* move to next BA candidate */
14561 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14562 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14563 baCandidateCount++ ;
14564 newBaCandidate = WDA_DISABLE_BA ;
14565 }
14566 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014567 /* prepare and send message to hal */
14568 if( 0 < baCandidateCount)
14569 {
14570 WDI_Status status = WDI_STATUS_SUCCESS ;
14571 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14572 tWDA_ReqParams *pWdaParams =
14573 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014574 if(NULL == pWdaParams)
14575 {
14576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014578 VOS_ASSERT(0) ;
14579 return;
14580 }
14581 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14582 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14583 if(NULL == wdiTriggerBaReq)
14584 {
14585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014587 VOS_ASSERT(0) ;
14588 vos_mem_free(pWdaParams);
14589 return;
14590 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014591 do
14592 {
14593 WDI_TriggerBAReqinfoType *triggerBaInfo =
14594 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14595 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14596 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14597 * for each request */
14598 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14599 triggerBaInfo->ucBASessionID = 0;
14600 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14601 } while(0) ;
14602 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014604 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014605 pWdaParams->pWdaContext = pWDA;
14606 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14607 pWdaParams->wdaMsgParam = NULL;
14608 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14609 WDA_TriggerBaReqCallback, pWdaParams) ;
14610 if(IS_WDI_STATUS_FAILURE(status))
14611 {
14612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14613 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14614 vos_mem_free(pWdaParams->wdaMsgParam) ;
14615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14616 vos_mem_free(pWdaParams) ;
14617 }
14618 }
14619 else
14620 {
14621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14622 "There is no TID for initiating BA");
14623 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014624 if( VOS_STATUS_SUCCESS !=
14625 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14626 {
14627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14628 "BA Activity Timer Stop Failed ");
14629 return ;
14630 }
14631 if( VOS_STATUS_SUCCESS !=
14632 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14633 {
14634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14635 "BA Activity Timer Start Failed ");
14636 return;
14637 }
14638 return ;
14639}
Jeff Johnson295189b2012-06-20 16:38:30 -070014640/*
14641 * WDA common routine to create timer used by WDA.
14642 */
14643static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14644{
Jeff Johnson295189b2012-06-20 16:38:30 -070014645 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14646 tANI_U32 val = 0 ;
14647 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14648
14649 if(NULL == pMac)
14650 {
14651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014652 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014653 VOS_ASSERT(0);
14654 return VOS_STATUS_E_FAILURE;
14655 }
14656 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14657 != eSIR_SUCCESS)
14658 {
14659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14660 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14661 return VOS_STATUS_E_FAILURE;
14662 }
14663 val = SYS_MS_TO_TICKS(val) ;
14664
14665 /* BA activity check timer */
14666 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14667 "BA Activity Check timer", WDA_TimerHandler,
14668 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14669 if(status != TX_SUCCESS)
14670 {
14671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14672 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014673 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014674 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014675 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014676 /* Tx Complete Timeout timer */
14677 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14678 "Tx Complete Check timer", WDA_TimerHandler,
14679 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014680 if(status != TX_SUCCESS)
14681 {
14682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14683 "Unable to create Tx Complete Timeout timer");
14684 /* Destroy timer of BA activity check timer */
14685 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14686 if(status != TX_SUCCESS)
14687 {
14688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14689 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014690 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014691 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014692 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014693 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014694
14695 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14696
14697 /* Traffic Stats timer */
14698 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14699 "Traffic Stats timer", WDA_TimerHandler,
14700 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14701 if(status != TX_SUCCESS)
14702 {
14703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14704 "Unable to create traffic stats timer");
14705 /* Destroy timer of BA activity check timer */
14706 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14707 if(status != TX_SUCCESS)
14708 {
14709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14710 "Unable to Destroy BA activity timer");
14711 }
14712 /* Destroy timer of tx complete timer */
14713 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14714 if(status != TX_SUCCESS)
14715 {
14716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14717 "Unable to Tx complete timer");
14718 }
14719 return VOS_STATUS_E_FAILURE ;
14720 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014721 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014722}
Jeff Johnson295189b2012-06-20 16:38:30 -070014723/*
14724 * WDA common routine to destroy timer used by WDA.
14725 */
14726static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
14727{
14728 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014729 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14730 if(status != TX_SUCCESS)
14731 {
14732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14733 "Unable to Destroy Tx Complete Timeout timer");
14734 return eSIR_FAILURE ;
14735 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014736 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14737 if(status != TX_SUCCESS)
14738 {
14739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14740 "Unable to Destroy BA activity timer");
14741 return eSIR_FAILURE ;
14742 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014743 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
14744 if(status != TX_SUCCESS)
14745 {
14746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14747 "Unable to Destroy traffic stats timer");
14748 return eSIR_FAILURE ;
14749 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014750 return eSIR_SUCCESS ;
14751}
Jeff Johnson295189b2012-06-20 16:38:30 -070014752/*
14753 * WDA timer handler.
14754 */
14755void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
14756{
14757 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
14758 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014759 /*
14760 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
14761 */
14762 wdaMsg.type = timerInfo ;
14763 wdaMsg.bodyptr = NULL;
14764 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014765 /* post the message.. */
14766 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
14767 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
14768 {
14769 vosStatus = VOS_STATUS_E_BADMSG;
14770 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014771}
Jeff Johnson295189b2012-06-20 16:38:30 -070014772/*
14773 * WDA Tx Complete timeout Indication.
14774 */
14775void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
14776{
14777 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014778 if( pWDA->pAckTxCbFunc )
14779 {
14780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014781 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014782 pWDA->pAckTxCbFunc( pMac, 0);
14783 pWDA->pAckTxCbFunc = NULL;
14784 }
14785 else
14786 {
14787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014788 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014789 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014790}
Jeff Johnson295189b2012-06-20 16:38:30 -070014791/*
14792 * WDA Set REG Domain to VOS NV
14793 */
Abhishek Singha306a442013-11-07 18:39:01 +053014794eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
14795 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070014796{
Abhishek Singha306a442013-11-07 18:39:01 +053014797 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070014798 {
14799 return eHAL_STATUS_INVALID_PARAMETER;
14800 }
14801 return eHAL_STATUS_SUCCESS;
14802}
Jeff Johnson295189b2012-06-20 16:38:30 -070014803
Jeff Johnson295189b2012-06-20 16:38:30 -070014804#ifdef FEATURE_WLAN_SCAN_PNO
14805/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014806 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014807 *
14808 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014809void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014810{
14811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014812 tSirPNOScanReq *pPNOScanReqParams;
14813
Jeff Johnson295189b2012-06-20 16:38:30 -070014814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014815 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014816 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014817 {
14818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014819 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014820 VOS_ASSERT(0) ;
14821 return ;
14822 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014823
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014824 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14825 if(pPNOScanReqParams->statusCallback)
14826 {
14827 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14828 (status == WDI_STATUS_SUCCESS) ?
14829 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14830 }
14831
Yue Ma7f44bbe2013-04-12 11:47:39 -070014832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14833 vos_mem_free(pWdaParams->wdaMsgParam);
14834 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014835
14836 return ;
14837}
Jeff Johnson295189b2012-06-20 16:38:30 -070014838/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014839 * FUNCTION: WDA_PNOScanReqCallback
14840 * Free memory.
14841 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14842 */
14843void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014844{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014846 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014847
14848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14849 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14850
14851 if(NULL == pWdaParams)
14852 {
14853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14854 "%s: pWdaParams received NULL", __func__);
14855 VOS_ASSERT(0);
14856 return;
14857 }
14858
14859 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14860 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014861 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14862 if(pPNOScanReqParams->statusCallback)
14863 {
14864 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14865 VOS_STATUS_E_FAILURE);
14866 }
14867
Yue Ma7f44bbe2013-04-12 11:47:39 -070014868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14869 vos_mem_free(pWdaParams->wdaMsgParam);
14870 vos_mem_free(pWdaParams);
14871 }
14872
14873 return;
14874}
14875/*
14876 * FUNCTION: WDA_UpdateScanParamsRespCallback
14877 *
14878 */
14879void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14880{
14881 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014883 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014884 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014885 {
14886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014887 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014888 VOS_ASSERT(0) ;
14889 return ;
14890 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014891
14892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14893 vos_mem_free(pWdaParams->wdaMsgParam);
14894 vos_mem_free(pWdaParams);
14895
Jeff Johnson295189b2012-06-20 16:38:30 -070014896 return ;
14897}
Jeff Johnson295189b2012-06-20 16:38:30 -070014898/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014899 * FUNCTION: WDA_UpdateScanParamsReqCallback
14900 * Free memory.
14901 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14902 */
14903void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14904{
14905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14906
14907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14908 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14909
14910 if(NULL == pWdaParams)
14911 {
14912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14913 "%s: pWdaParams received NULL", __func__);
14914 VOS_ASSERT(0);
14915 return;
14916 }
14917
14918 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14919 {
14920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14921 vos_mem_free(pWdaParams->wdaMsgParam);
14922 vos_mem_free(pWdaParams);
14923 }
14924
14925 return;
14926}
14927/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014928 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14929 * Request to WDI to set Preferred Network List.Offload
14930 */
14931VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14932 tSirPNOScanReq *pPNOScanReqParams)
14933{
Jeff Johnson43971f52012-07-17 12:26:56 -070014934 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014935 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14936 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14937 tWDA_ReqParams *pWdaParams ;
14938 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014940 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014941 if(NULL == pwdiPNOScanReqInfo)
14942 {
14943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014945 VOS_ASSERT(0);
14946 return VOS_STATUS_E_NOMEM;
14947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014948 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14949 if(NULL == pWdaParams)
14950 {
14951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014953 VOS_ASSERT(0);
14954 vos_mem_free(pwdiPNOScanReqInfo);
14955 return VOS_STATUS_E_NOMEM;
14956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014957 //
14958 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14959 //
14960 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14961 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014962 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14963 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14964 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014965 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14966 {
14967 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14968 &pPNOScanReqParams->aNetworks[i],
14969 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14970 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014971 /*Scan timer intervals*/
14972 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14973 &pPNOScanReqParams->scanTimers,
14974 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014975 /*Probe template for 2.4GHz band*/
14976 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14977 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14978 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014979 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14980 pPNOScanReqParams->p24GProbeTemplate,
14981 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014982 /*Probe template for 5GHz band*/
14983 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14984 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14985 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014986 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14987 pPNOScanReqParams->p5GProbeTemplate,
14988 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014989 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14990 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014991
Jeff Johnson295189b2012-06-20 16:38:30 -070014992 /* Store Params pass it to WDI */
14993 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14994 pWdaParams->pWdaContext = pWDA;
14995 /* Store param pointer as passed in by caller */
14996 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014997 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014998 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014999 if(IS_WDI_STATUS_FAILURE(status))
15000 {
15001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15002 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015003 if(pPNOScanReqParams->statusCallback)
15004 {
15005 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15006 VOS_STATUS_E_FAILURE);
15007 }
15008
Jeff Johnson295189b2012-06-20 16:38:30 -070015009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15010 vos_mem_free(pWdaParams->wdaMsgParam);
15011 pWdaParams->wdaWdiApiMsgParam = NULL;
15012 pWdaParams->wdaMsgParam = NULL;
15013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015014 return CONVERT_WDI2VOS_STATUS(status) ;
15015}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015016
15017#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15018
15019void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15020{
15021 /*Convert the CSR Auth types to WDI Auth types */
15022 switch (csrAuthType)
15023 {
15024 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15025 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15026 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015027#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015028 case eCSR_AUTH_TYPE_CCKM_WPA:
15029 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15030 break;
15031#endif
15032 case eCSR_AUTH_TYPE_WPA:
15033 *AuthType = eWDA_AUTH_TYPE_WPA;
15034 break;
15035 case eCSR_AUTH_TYPE_WPA_PSK:
15036 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15037 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015038#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015039 case eCSR_AUTH_TYPE_CCKM_RSN:
15040 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15041 break;
15042#endif
15043 case eCSR_AUTH_TYPE_RSN:
15044 *AuthType = eWDA_AUTH_TYPE_RSN;
15045 break;
15046 case eCSR_AUTH_TYPE_RSN_PSK:
15047 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15048 break;
15049#if defined WLAN_FEATURE_VOWIFI_11R
15050 case eCSR_AUTH_TYPE_FT_RSN:
15051 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15052 break;
15053 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15054 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15055 break;
15056#endif
15057#ifdef FEATURE_WLAN_WAPI
15058 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15059 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15060 break;
15061 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15062 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15063 break;
15064#endif /* FEATURE_WLAN_WAPI */
15065 case eCSR_AUTH_TYPE_SHARED_KEY:
15066 case eCSR_AUTH_TYPE_AUTOSWITCH:
15067 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15068 break;
15069#if 0
15070 case eCSR_AUTH_TYPE_SHARED_KEY:
15071 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15072 break;
15073 case eCSR_AUTH_TYPE_AUTOSWITCH:
15074 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15075#endif
15076 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015078 "%s: Unknown Auth Type", __func__);
15079 break;
15080 }
15081}
15082void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15083{
15084 switch (csrEncrType)
15085 {
15086 case eCSR_ENCRYPT_TYPE_NONE:
15087 *EncrType = WDI_ED_NONE;
15088 break;
15089 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15090 case eCSR_ENCRYPT_TYPE_WEP40:
15091 *EncrType = WDI_ED_WEP40;
15092 break;
15093 case eCSR_ENCRYPT_TYPE_WEP104:
15094 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15095 *EncrType = WDI_ED_WEP104;
15096 break;
15097 case eCSR_ENCRYPT_TYPE_TKIP:
15098 *EncrType = WDI_ED_TKIP;
15099 break;
15100 case eCSR_ENCRYPT_TYPE_AES:
15101 *EncrType = WDI_ED_CCMP;
15102 break;
15103#ifdef WLAN_FEATURE_11W
15104 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15105 *EncrType = WDI_ED_AES_128_CMAC;
15106 break;
15107#endif
15108#ifdef FEATURE_WLAN_WAPI
15109 case eCSR_ENCRYPT_TYPE_WPI:
15110 *EncrType = WDI_ED_WPI;
15111 break;
15112#endif
15113 case eCSR_ENCRYPT_TYPE_ANY:
15114 *EncrType = WDI_ED_ANY;
15115 break;
15116
15117 default:
15118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15119 "%s: Unknown Encryption Type", __func__);
15120 break;
15121 }
15122}
15123
15124/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015125 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015126 * Request to WDI to set Roam Offload Scan
15127 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015128VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015129 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15130{
15131 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015132 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15133 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015134 tWDA_ReqParams *pWdaParams ;
15135 v_U8_t csrAuthType;
15136 WDI_RoamNetworkType *pwdiRoamNetworkType;
15137 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15139 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015140 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015141 {
15142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15143 "%s: VOS MEM Alloc Failure", __func__);
15144 VOS_ASSERT(0);
15145 return VOS_STATUS_E_NOMEM;
15146 }
15147 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15148 if (NULL == pWdaParams)
15149 {
15150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15151 "%s: VOS MEM Alloc Failure", __func__);
15152 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015153 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015154 return VOS_STATUS_E_NOMEM;
15155 }
15156
15157 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015158 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015159 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015160 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15161 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015162 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15163 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15164 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15165 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15166 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15167 sizeof(pwdiRoamNetworkType->currAPbssid));
15168 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15169 csrAuthType);
15170 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15171 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15172 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15173 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15174 pwdiRoamOffloadScanInfo->LookupThreshold =
15175 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015176 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15177 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015178 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15179 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015180 pwdiRoamOffloadScanInfo->MAWCEnabled =
15181 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015182 pwdiRoamOffloadScanInfo->Command =
15183 pRoamOffloadScanReqParams->Command ;
15184 pwdiRoamOffloadScanInfo->StartScanReason =
15185 pRoamOffloadScanReqParams->StartScanReason ;
15186 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15187 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15188 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15189 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15190 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15191 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15192 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15193 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15194 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15195 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015196 pwdiRoamOffloadScanInfo->IsESEEnabled =
15197 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015198 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15199 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15200 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15201 pwdiRoamNetworkType->ssId.ucLength =
15202 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15203 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15204 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15205 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15206 pwdiRoamNetworkType->ChannelCount =
15207 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15208 pwdiRoamOffloadScanInfo->ChannelCacheType =
15209 pRoamOffloadScanReqParams->ChannelCacheType;
15210 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15211 pRoamOffloadScanReqParams->ValidChannelList,
15212 pRoamOffloadScanReqParams->ValidChannelCount);
15213 pwdiRoamOffloadScanInfo->ValidChannelCount =
15214 pRoamOffloadScanReqParams->ValidChannelCount;
15215 pwdiRoamOffloadScanInfo->us24GProbeSize =
15216 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15217 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15218 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15219 pRoamOffloadScanReqParams->p24GProbeTemplate,
15220 pwdiRoamOffloadScanInfo->us24GProbeSize);
15221 pwdiRoamOffloadScanInfo->us5GProbeSize =
15222 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15223 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15224 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15225 pRoamOffloadScanReqParams->p5GProbeTemplate,
15226 pwdiRoamOffloadScanInfo->us5GProbeSize);
15227 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15228 pRoamOffloadScanReqParams->MDID.mdiePresent;
15229 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15230 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015231 pwdiRoamOffloadScanInfo->nProbes =
15232 pRoamOffloadScanReqParams->nProbes;
15233 pwdiRoamOffloadScanInfo->HomeAwayTime =
15234 pRoamOffloadScanReqParams->HomeAwayTime;
15235 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015236 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015237 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015238 pWdaParams->pWdaContext = pWDA;
15239 /* Store param pointer as passed in by caller */
15240 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015241 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015242 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15243 if(IS_WDI_STATUS_FAILURE(status))
15244 {
15245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15246 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15248 vos_mem_free(pWdaParams->wdaMsgParam);
15249 pWdaParams->wdaWdiApiMsgParam = NULL;
15250 pWdaParams->wdaMsgParam = NULL;
15251 }
15252 return CONVERT_WDI2VOS_STATUS(status) ;
15253}
15254#endif
15255
Jeff Johnson295189b2012-06-20 16:38:30 -070015256/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015257 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015258 *
15259 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015260void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015261{
15262 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15263
15264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015265 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015266
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015267 if(NULL == pWdaParams)
15268 {
15269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015270 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015271 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015272 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015273 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015274
Jeff Johnson295189b2012-06-20 16:38:30 -070015275 vos_mem_free(pWdaParams->wdaMsgParam) ;
15276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15277 vos_mem_free(pWdaParams) ;
15278
15279 return ;
15280}
15281/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015282 * FUNCTION: WDA_RssiFilterReqCallback
15283 * Free memory.
15284 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15285 */
15286void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15287{
15288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15289
15290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15291 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15292
15293 if(NULL == pWdaParams)
15294 {
15295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15296 "%s: pWdaParams received NULL", __func__);
15297 VOS_ASSERT(0);
15298 return;
15299 }
15300
15301 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15302 {
15303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15304 vos_mem_free(pWdaParams->wdaMsgParam);
15305 vos_mem_free(pWdaParams);
15306 }
15307
15308 return;
15309}
15310/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015311 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15312 * Request to WDI to set Preferred Network List.Offload
15313 */
15314VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15315 tSirSetRSSIFilterReq* pRssiFilterParams)
15316{
Jeff Johnson43971f52012-07-17 12:26:56 -070015317 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015318 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15319 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15320 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015322 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015323 if(NULL == pwdiSetRssiFilterReqInfo)
15324 {
15325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015327 VOS_ASSERT(0);
15328 return VOS_STATUS_E_NOMEM;
15329 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015330 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15331 if(NULL == pWdaParams)
15332 {
15333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015334 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015335 VOS_ASSERT(0);
15336 vos_mem_free(pwdiSetRssiFilterReqInfo);
15337 return VOS_STATUS_E_NOMEM;
15338 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015339 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015340 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15341 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015342
Jeff Johnson295189b2012-06-20 16:38:30 -070015343 /* Store Params pass it to WDI */
15344 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15345 pWdaParams->pWdaContext = pWDA;
15346 /* Store param pointer as passed in by caller */
15347 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015348 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015349 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015350 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015351 if(IS_WDI_STATUS_FAILURE(status))
15352 {
15353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15354 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15356 vos_mem_free(pWdaParams->wdaMsgParam);
15357 pWdaParams->wdaWdiApiMsgParam = NULL;
15358 pWdaParams->wdaMsgParam = NULL;
15359 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015360 return CONVERT_WDI2VOS_STATUS(status) ;
15361}
15362
Jeff Johnson295189b2012-06-20 16:38:30 -070015363/*
15364 * FUNCTION: WDA_ProcessUpdateScanParams
15365 * Request to WDI to update Scan Parameters
15366 */
15367VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15368 tSirUpdateScanParams *pUpdateScanParams)
15369{
Jeff Johnson43971f52012-07-17 12:26:56 -070015370 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015371 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15372 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15373 sizeof(WDI_UpdateScanParamsInfoType)) ;
15374 tWDA_ReqParams *pWdaParams ;
15375 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015377 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015378 if(NULL == wdiUpdateScanParamsInfoType)
15379 {
15380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015382 VOS_ASSERT(0);
15383 return VOS_STATUS_E_NOMEM;
15384 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15386 if ( NULL == pWdaParams )
15387 {
15388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015390 VOS_ASSERT(0);
15391 vos_mem_free(wdiUpdateScanParamsInfoType);
15392 return VOS_STATUS_E_NOMEM;
15393 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015394 //
15395 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15396 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15398 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15399 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15400 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015401 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015402 pUpdateScanParams->b11dEnabled,
15403 pUpdateScanParams->b11dResolved,
15404 pUpdateScanParams->ucChannelCount,
15405 pUpdateScanParams->usPassiveMinChTime,
15406 pUpdateScanParams->usPassiveMaxChTime,
15407 pUpdateScanParams->usActiveMinChTime,
15408 pUpdateScanParams->usActiveMaxChTime,
15409 sizeof(tSirUpdateScanParams),
15410 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15411
Jeff Johnson295189b2012-06-20 16:38:30 -070015412 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15413 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015414 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15415 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015416 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15417 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015418 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15419 pUpdateScanParams->usActiveMaxChTime;
15420 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15421 pUpdateScanParams->usActiveMinChTime;
15422 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15423 pUpdateScanParams->usPassiveMaxChTime;
15424 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15425 pUpdateScanParams->usPassiveMinChTime;
15426
Jeff Johnson295189b2012-06-20 16:38:30 -070015427 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015428 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15429 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015430
Jeff Johnson295189b2012-06-20 16:38:30 -070015431 for ( i = 0; i <
15432 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15433 i++)
15434 {
15435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15436 "Update Scan Parameters channel: %d",
15437 pUpdateScanParams->aChannels[i]);
15438
15439 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15440 pUpdateScanParams->aChannels[i];
15441 }
15442
Yue Ma7f44bbe2013-04-12 11:47:39 -070015443 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15444 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015445
Jeff Johnson295189b2012-06-20 16:38:30 -070015446 /* Store Params pass it to WDI */
15447 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15448 pWdaParams->pWdaContext = pWDA;
15449 /* Store param pointer as passed in by caller */
15450 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015451
Jeff Johnson295189b2012-06-20 16:38:30 -070015452
15453
15454 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015455 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015456 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015457 if(IS_WDI_STATUS_FAILURE(status))
15458 {
15459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15460 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15462 vos_mem_free(pWdaParams->wdaMsgParam);
15463 vos_mem_free(pWdaParams);
15464 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015465 return CONVERT_WDI2VOS_STATUS(status) ;
15466}
15467#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015468
15469#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15470/*
15471 * FUNCTION: WDA_RoamOffloadScanReqCallback
15472 *
15473 */
15474void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15475{
15476 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015477 vos_msg_t vosMsg;
15478 wpt_uint8 reason = 0;
15479
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015481 "<------ %s " ,__func__);
15482 if (NULL == pWdaParams)
15483 {
15484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15485 "%s: pWdaParams received NULL", __func__);
15486 VOS_ASSERT(0) ;
15487 return ;
15488 }
15489 if ( pWdaParams != NULL )
15490 {
15491 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15492 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015493 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15495 }
15496 if ( pWdaParams->wdaMsgParam != NULL)
15497 {
15498 vos_mem_free(pWdaParams->wdaMsgParam);
15499 }
15500
15501 vos_mem_free(pWdaParams) ;
15502 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015503 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15504 vosMsg.bodyptr = NULL;
15505 if (WDI_STATUS_SUCCESS != status)
15506 {
15507 reason = 0;
15508 }
15509 vosMsg.bodyval = reason;
15510 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15511 {
15512 /* free the mem and return */
15513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015514 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015515 }
15516
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015517 return ;
15518}
15519#endif
15520
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015521/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015522 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015523 *
15524 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015525void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015526{
15527 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15528
15529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15530 "<------ %s " ,__func__);
15531
15532 if(NULL == pWdaParams)
15533 {
15534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15535 "%s: pWdaParams received NULL", __func__);
15536 VOS_ASSERT(0);
15537 return;
15538 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015539
15540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15541 vos_mem_free(pWdaParams->wdaMsgParam);
15542 vos_mem_free(pWdaParams);
15543
15544 return;
15545}
15546/*
15547 * FUNCTION: WDA_SetPowerParamsReqCallback
15548 * Free memory.
15549 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15550 */
15551void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15552{
15553 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15554
15555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15556 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15557
15558 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015559 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15561 "%s: pWdaParams received NULL", __func__);
15562 VOS_ASSERT(0);
15563 return;
15564 }
15565
15566 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15567 {
15568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15569 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015570 vos_mem_free(pWdaParams);
15571 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015572
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015573 return;
15574}
15575
Jeff Johnson295189b2012-06-20 16:38:30 -070015576#ifdef WLAN_FEATURE_PACKET_FILTERING
15577/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015578 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015579 *
15580 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015581void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015582 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15583 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015584{
15585 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015587 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015588 if(NULL == pWdaParams)
15589 {
15590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015591 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015592 VOS_ASSERT(0) ;
15593 return ;
15594 }
15595
15596 vos_mem_free(pWdaParams->wdaMsgParam) ;
15597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15598 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015599 //print a msg, nothing else to do
15600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015601 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015602 return ;
15603}
Jeff Johnson295189b2012-06-20 16:38:30 -070015604/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015605 * FUNCTION: WDA_8023MulticastListReqCallback
15606 * Free memory.
15607 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15608 */
15609void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15610{
15611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15612
15613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15614 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15615
15616 if(NULL == pWdaParams)
15617 {
15618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15619 "%s: pWdaParams received NULL", __func__);
15620 VOS_ASSERT(0);
15621 return;
15622 }
15623
15624 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15625 {
15626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15627 vos_mem_free(pWdaParams->wdaMsgParam);
15628 vos_mem_free(pWdaParams);
15629 }
15630
15631 return;
15632}
15633/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015634 * FUNCTION: WDA_Process8023MulticastListReq
15635 * Request to WDI to add 8023 Multicast List
15636 */
15637VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15638 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15639{
Jeff Johnson43971f52012-07-17 12:26:56 -070015640 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015641 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15642 tWDA_ReqParams *pWdaParams ;
15643 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015645 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015646 pwdiFltPktSetMcListReqParamsType =
15647 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15648 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15649 ) ;
15650 if(NULL == pwdiFltPktSetMcListReqParamsType)
15651 {
15652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015653 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015654 return VOS_STATUS_E_NOMEM;
15655 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015656 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15657 if(NULL == pWdaParams)
15658 {
15659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015660 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015661 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15662 return VOS_STATUS_E_NOMEM;
15663 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015664
Jeff Johnson295189b2012-06-20 16:38:30 -070015665 //
15666 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15667 //
15668 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015669 pRcvFltMcAddrList->ulMulticastAddrCnt;
15670
15671 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15672 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15673 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15674 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15675
Jeff Johnson295189b2012-06-20 16:38:30 -070015676 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15677 {
15678 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15679 &(pRcvFltMcAddrList->multicastAddr[i]),
15680 sizeof(tSirMacAddr));
15681 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015682 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15683 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015684
Jeff Johnson295189b2012-06-20 16:38:30 -070015685 /* Store Params pass it to WDI */
15686 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15687 pWdaParams->pWdaContext = pWDA;
15688 /* Store param pointer as passed in by caller */
15689 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015690 status = WDI_8023MulticastListReq(
15691 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015692 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015693 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015694 if(IS_WDI_STATUS_FAILURE(status))
15695 {
15696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15697 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15699 vos_mem_free(pWdaParams->wdaMsgParam);
15700 vos_mem_free(pWdaParams);
15701 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015702 return CONVERT_WDI2VOS_STATUS(status) ;
15703}
Jeff Johnson295189b2012-06-20 16:38:30 -070015704/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015705 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015706 *
15707 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015708void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015709 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15710 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015711{
15712 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015714 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015715 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070015716 if(NULL == pWdaParams)
15717 {
15718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015719 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015720 VOS_ASSERT(0) ;
15721 return ;
15722 }
15723
15724 vos_mem_free(pWdaParams->wdaMsgParam) ;
15725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15726 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015727 //print a msg, nothing else to do
15728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015729 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015730 return ;
15731}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015732
15733/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015734 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
15735 * Free memory.
15736 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015737 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015738void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015739 void* pUserData)
15740{
15741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15742
15743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15744 "<------ %s, wdiStatus: %d",
15745 __func__, wdiStatus);
15746
15747 if (NULL == pWdaParams)
15748 {
15749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15750 "%s: Invalid pWdaParams pointer", __func__);
15751 VOS_ASSERT(0);
15752 return;
15753 }
15754
15755 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15756 {
15757 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15758 vos_mem_free(pWdaParams->wdaMsgParam);
15759 vos_mem_free(pWdaParams);
15760 }
15761
15762 return;
15763}
15764
Jeff Johnson295189b2012-06-20 16:38:30 -070015765/*
15766 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
15767 * Request to WDI to set Receive Filters
15768 */
15769VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
15770 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
15771{
Jeff Johnson43971f52012-07-17 12:26:56 -070015772 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015773 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
15774 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
15775 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
15776 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
15777 tWDA_ReqParams *pWdaParams ;
15778 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015780 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015781 if(NULL == pwdiSetRcvPktFilterReqParamsType)
15782 {
15783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015784 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015785 VOS_ASSERT(0);
15786 return VOS_STATUS_E_NOMEM;
15787 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015788 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15789 if(NULL == pWdaParams)
15790 {
15791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015792 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015793 VOS_ASSERT(0);
15794 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
15795 return VOS_STATUS_E_NOMEM;
15796 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015797 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
15798 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
15799 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
15800 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070015801 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15802 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15803
15804 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15805 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015806
15807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15808 "FID %d FT %d NParams %d CT %d",
15809 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15810 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15811 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15812 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015813 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15814 {
15815 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15816 &pRcvPktFilterCfg->paramsData[i],
15817 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015819 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015820 pwdiSetRcvPktFilterReqParamsType->
15821 wdiPktFilterCfg.paramsData[i].protocolLayer,
15822 pwdiSetRcvPktFilterReqParamsType->
15823 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015825 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015826 pwdiSetRcvPktFilterReqParamsType->
15827 wdiPktFilterCfg.paramsData[i].dataOffset,
15828 pwdiSetRcvPktFilterReqParamsType->
15829 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015831 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015832 pwdiSetRcvPktFilterReqParamsType->
15833 wdiPktFilterCfg.paramsData[i].compareData[0],
15834 pwdiSetRcvPktFilterReqParamsType->
15835 wdiPktFilterCfg.paramsData[i].compareData[1],
15836 pwdiSetRcvPktFilterReqParamsType->
15837 wdiPktFilterCfg.paramsData[i].compareData[2],
15838 pwdiSetRcvPktFilterReqParamsType->
15839 wdiPktFilterCfg.paramsData[i].compareData[3],
15840 pwdiSetRcvPktFilterReqParamsType->
15841 wdiPktFilterCfg.paramsData[i].compareData[4],
15842 pwdiSetRcvPktFilterReqParamsType->
15843 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015845 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015846 pwdiSetRcvPktFilterReqParamsType->
15847 wdiPktFilterCfg.paramsData[i].dataMask[0],
15848 pwdiSetRcvPktFilterReqParamsType->
15849 wdiPktFilterCfg.paramsData[i].dataMask[1],
15850 pwdiSetRcvPktFilterReqParamsType->
15851 wdiPktFilterCfg.paramsData[i].dataMask[2],
15852 pwdiSetRcvPktFilterReqParamsType->
15853 wdiPktFilterCfg.paramsData[i].dataMask[3],
15854 pwdiSetRcvPktFilterReqParamsType->
15855 wdiPktFilterCfg.paramsData[i].dataMask[4],
15856 pwdiSetRcvPktFilterReqParamsType->
15857 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015858 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015859 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015860 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015861 /* Store Params pass it to WDI */
15862 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15863 pWdaParams->pWdaContext = pWDA;
15864 /* Store param pointer as passed in by caller */
15865 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015866 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015867 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015868 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015869 if(IS_WDI_STATUS_FAILURE(status))
15870 {
15871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15872 "Failure in SetFilter(),free all the memory,status %d ",status);
15873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15874 vos_mem_free(pWdaParams->wdaMsgParam);
15875 vos_mem_free(pWdaParams);
15876 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015877 return CONVERT_WDI2VOS_STATUS(status) ;
15878}
Jeff Johnson295189b2012-06-20 16:38:30 -070015879/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015880 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015881 *
15882 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015883void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015884 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15885 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015886{
15887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15888 tWDA_CbContext *pWDA;
15889 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15890 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15891 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15892 tANI_U8 i;
15893 vos_msg_t vosMsg;
15894
15895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015896 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015897 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15898
Jeff Johnsone7245742012-09-05 17:12:55 -070015899 if(NULL == pRcvFltPktMatchCntRsp)
15900 {
15901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015902 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015903 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015904 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015905 return ;
15906 }
15907
Jeff Johnson295189b2012-06-20 16:38:30 -070015908 if(NULL == pWdaParams)
15909 {
15910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015911 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015912 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015913 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015914 return ;
15915 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015916 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15917 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015918 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15919 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15920
15921 /* Message Header */
15922 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15923 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15924
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015925 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015926
15927 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15928 {
15929 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15930 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15931 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015932 /* VOS message wrapper */
15933 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15934 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15935 vosMsg.bodyval = 0;
15936 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15937 {
15938 /* free the mem and return */
15939 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15940 }
15941
15942 vos_mem_free(pWdaParams->wdaMsgParam) ;
15943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15944 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015945
15946 return;
15947}
15948/*
15949 * FUNCTION: WDA_FilterMatchCountReqCallback
15950 * Free memory and send RSP back to SME.
15951 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15952 */
15953void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15954{
15955 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15956 vos_msg_t vosMsg;
15957
15958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15959 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15960
15961 if(NULL == pWdaParams)
15962 {
15963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15964 "%s: pWdaParams received NULL", __func__);
15965 VOS_ASSERT(0);
15966 return;
15967 }
15968
15969 /* VOS message wrapper */
15970 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15971 vosMsg.bodyptr = NULL;
15972 vosMsg.bodyval = 0;
15973
15974 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15975 {
15976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15977 vos_mem_free(pWdaParams->wdaMsgParam);
15978 vos_mem_free(pWdaParams);
15979 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15980 }
15981
15982 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015983}
Jeff Johnson295189b2012-06-20 16:38:30 -070015984/*
15985 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15986 * Request to WDI to get PC Filter Match Count
15987 */
15988VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15989{
Jeff Johnson43971f52012-07-17 12:26:56 -070015990 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015991 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15992 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15993 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015995 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015996 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15997 {
15998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015999 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016000 VOS_ASSERT(0);
16001 return VOS_STATUS_E_NOMEM;
16002 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16004 if(NULL == pWdaParams)
16005 {
16006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016008 VOS_ASSERT(0);
16009 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16010 return VOS_STATUS_E_NOMEM;
16011 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016012
Yue Ma7f44bbe2013-04-12 11:47:39 -070016013 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16014 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016015
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016016 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16017 pRcvFltPktMatchRsp->bssId,
16018 sizeof(wpt_macAddr));
16019
Jeff Johnson295189b2012-06-20 16:38:30 -070016020 /* Store Params pass it to WDI */
16021 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16022 pWdaParams->pWdaContext = pWDA;
16023 /* Store param pointer as passed in by caller */
16024 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016025 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016026 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016027 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016028 if(IS_WDI_STATUS_FAILURE(status))
16029 {
16030 /* failure returned by WDI API */
16031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16032 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16034 vos_mem_free(pWdaParams) ;
16035 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16036 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16037 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016038 return CONVERT_WDI2VOS_STATUS(status) ;
16039}
Jeff Johnson295189b2012-06-20 16:38:30 -070016040/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016041 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016042 *
16043 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016044void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016045 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16046 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016047{
16048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016050 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016051/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16052 if(NULL == pWdaParams)
16053 {
16054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016055 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016056 VOS_ASSERT(0) ;
16057 return ;
16058 }
16059
16060 vos_mem_free(pWdaParams->wdaMsgParam) ;
16061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16062 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016063 //print a msg, nothing else to do
16064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016065 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016066 return ;
16067}
Jeff Johnson295189b2012-06-20 16:38:30 -070016068/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016069 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16070 * Free memory.
16071 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16072 */
16073void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16074{
16075 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16076
16077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16078 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16079
16080 if(NULL == pWdaParams)
16081 {
16082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16083 "%s: Invalid pWdaParams pointer", __func__);
16084 VOS_ASSERT(0);
16085 return;
16086 }
16087
16088 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16089 {
16090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16091 vos_mem_free(pWdaParams->wdaMsgParam);
16092 vos_mem_free(pWdaParams);
16093 }
16094
16095 return;
16096}
16097/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016098 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16099 * Request to WDI to clear Receive Filters
16100 */
16101VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16102 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16103{
Jeff Johnson43971f52012-07-17 12:26:56 -070016104 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016105 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16106 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16107 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016109 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016110 if(NULL == pwdiRcvFltPktClearReqParamsType)
16111 {
16112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016114 VOS_ASSERT(0);
16115 return VOS_STATUS_E_NOMEM;
16116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016117 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16118 if(NULL == pWdaParams)
16119 {
16120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016121 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016122 VOS_ASSERT(0);
16123 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16124 return VOS_STATUS_E_NOMEM;
16125 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016126 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16127 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016128 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16129 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16130 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16131 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016132
Yue Ma7f44bbe2013-04-12 11:47:39 -070016133 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016134 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016135 /* Store Params pass it to WDI */
16136 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16137 pWdaParams->pWdaContext = pWDA;
16138 /* Store param pointer as passed in by caller */
16139 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016140 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016141 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016142 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016143 if(IS_WDI_STATUS_FAILURE(status))
16144 {
16145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16146 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016148 vos_mem_free(pWdaParams->wdaMsgParam);
16149 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016151 return CONVERT_WDI2VOS_STATUS(status) ;
16152}
16153#endif // WLAN_FEATURE_PACKET_FILTERING
16154
Jeff Johnson295189b2012-06-20 16:38:30 -070016155/*
16156 * FUNCTION: WDA_ProcessSetPowerParamsReq
16157 * Request to WDI to set power params
16158 */
16159VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16160 tSirSetPowerParamsReq *pPowerParams)
16161{
Jeff Johnson43971f52012-07-17 12:26:56 -070016162 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016163 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16164 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016165 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016167 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016168 if(NULL == pwdiSetPowerParamsReqInfo)
16169 {
16170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016172 VOS_ASSERT(0);
16173 return VOS_STATUS_E_NOMEM;
16174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016175 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16176 if(NULL == pWdaParams)
16177 {
16178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016180 VOS_ASSERT(0);
16181 vos_mem_free(pwdiSetPowerParamsReqInfo);
16182 return VOS_STATUS_E_NOMEM;
16183 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016184
Jeff Johnson295189b2012-06-20 16:38:30 -070016185
16186 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16187 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016188 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16189 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016190 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16191 pPowerParams->uListenInterval;
16192 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16193 pPowerParams->uBcastMcastFilter;
16194 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16195 pPowerParams->uEnableBET;
16196 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16197 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016198 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16199 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016200 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16201 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016202
Jeff Johnson295189b2012-06-20 16:38:30 -070016203 /* Store Params pass it to WDI */
16204 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16205 pWdaParams->pWdaContext = pWDA;
16206 /* Store param pointer as passed in by caller */
16207 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016208 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016209 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016210 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016211 if(IS_WDI_STATUS_FAILURE(status))
16212 {
16213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16214 "Failure in Set power params REQ WDI API, free all the memory " );
16215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16216 vos_mem_free(pWdaParams->wdaMsgParam);
16217 pWdaParams->wdaWdiApiMsgParam = NULL;
16218 pWdaParams->wdaMsgParam = NULL;
16219 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016220 return CONVERT_WDI2VOS_STATUS(status) ;
16221}
16222
16223/*
16224 * FUNCTION: WDA_SetTmLevelRspCallback
16225 * Set TM Level response
16226 */
16227void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16228{
16229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16230
16231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016232 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016233
16234 if(NULL == pWdaParams)
16235 {
16236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016237 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016238 VOS_ASSERT(0) ;
16239 return ;
16240 }
16241
16242 /* Dose not need to send notification to upper layer
16243 * Just free allocated resources */
16244 if( pWdaParams != NULL )
16245 {
16246 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16247 {
16248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16249 }
16250 vos_mem_free(pWdaParams->wdaMsgParam) ;
16251 vos_mem_free(pWdaParams) ;
16252 }
16253}
16254
16255/*
16256 * FUNCTION: WDA_ProcessSetTmLevelReq
16257 * Set TM Level request
16258 */
16259VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16260 tAniSetTmLevelReq *setTmLevelReq)
16261{
16262 WDI_Status status = WDI_STATUS_SUCCESS ;
16263 tWDA_ReqParams *pWdaParams ;
16264 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16265 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16266 sizeof(WDI_SetTmLevelReqType)) ;
16267 if(NULL == wdiSetTmLevelReq)
16268 {
16269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016270 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016271 VOS_ASSERT(0);
16272 return VOS_STATUS_E_NOMEM;
16273 }
16274
16275 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16276 if(NULL == pWdaParams)
16277 {
16278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016280 VOS_ASSERT(0);
16281 vos_mem_free(wdiSetTmLevelReq);
16282 return VOS_STATUS_E_NOMEM;
16283 }
16284
16285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016286 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016287
16288 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16289 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16290
16291 pWdaParams->pWdaContext = pWDA;
16292 pWdaParams->wdaMsgParam = setTmLevelReq;
16293 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16294
16295 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16296 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16297
16298 if(IS_WDI_STATUS_FAILURE(status))
16299 {
16300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016301 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016302 vos_mem_free(pWdaParams->wdaMsgParam) ;
16303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16304 vos_mem_free(pWdaParams) ;
16305 }
16306
16307 return CONVERT_WDI2VOS_STATUS(status) ;
16308}
16309
16310VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16311 tpTxControlParams pTxCtrlParam)
16312{
16313 VOS_STATUS wdaStatus;
16314
16315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016316 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016317 if( pTxCtrlParam == NULL )
16318 {
16319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016320 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016321 return VOS_STATUS_E_FAILURE;
16322 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016323 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16324 {
16325 wdaStatus = WDA_SuspendDataTx(pWDA);
16326 }
16327 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16328 {
16329 wdaStatus = WDA_ResumeDataTx(pWDA);
16330 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016331 return wdaStatus;
16332}
16333
16334 /* FUNCTION WDA_featureCapsExchange
16335 * WDA API to invoke capability exchange between host and FW.
16336 */
16337void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16338{
16339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016340 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016341 WDI_featureCapsExchangeReq( NULL, pVosContext);
16342}
16343
Yathish9f22e662012-12-10 14:21:35 -080016344/* FUNCTION WDA_disableCapablityFeature
16345 * WDA API to diable Active mode offload in host.
16346 */
16347void WDA_disableCapablityFeature(tANI_U8 feature_index)
16348{
16349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16350 "%s:enter", __func__ );
16351 WDI_disableCapablityFeature(feature_index);
16352}
16353
Jeff Johnson295189b2012-06-20 16:38:30 -070016354 /* FUNCTION WDA_getHostWlanFeatCaps
16355 * Wrapper for WDI API, that will return if the feature (enum value).passed
16356 * to this API is supported or not in Host
16357 * return value
16358 * 0 - implies feature is NOT Supported
16359 * any non zero value - implies feature is SUPPORTED
16360 */
16361tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16362{
16363 return WDI_getHostWlanFeatCaps(featEnumValue);
16364}
16365
16366 /* FUNCTION WDA_getFwWlanFeatCaps
16367 * Wrapper for WDI API, that will return if the feature (enum value).passed
16368 * to this API is supported or not in FW
16369 * return value
16370 * 0 - implies feature is NOT Supported
16371 * any non zero value - implies feature is SUPPORTED
16372 */
16373tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16374{
16375 return WDI_getFwWlanFeatCaps(featEnumValue);
16376}
16377
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016378
Jeff Johnson295189b2012-06-20 16:38:30 -070016379/*
16380 * FUNCTION: WDA_shutdown
16381 * Shutdown WDA/WDI without handshaking with Riva.
16382 * Synchronous function.
16383 */
16384VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16385{
16386 WDI_Status wdiStatus;
16387 //tANI_U8 eventIdx = 0;
16388 VOS_STATUS status = VOS_STATUS_SUCCESS;
16389 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016390 if (NULL == pWDA)
16391 {
16392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016393 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016394 VOS_ASSERT(0);
16395 return VOS_STATUS_E_FAILURE;
16396 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016397 /* FTM mode stay START_STATE */
16398 if( (WDA_READY_STATE != pWDA->wdaState) &&
16399 (WDA_INIT_STATE != pWDA->wdaState) &&
16400 (WDA_START_STATE != pWDA->wdaState) )
16401 {
16402 VOS_ASSERT(0);
16403 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016404
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016405 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16406 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016407 {
16408 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016409 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016410 }
Leo Chang9d76f622013-08-23 16:34:52 -070016411 else
16412 {
16413 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16414 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016415
Jeff Johnson295189b2012-06-20 16:38:30 -070016416 /* call WDI shutdown */
16417 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016418 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16419 {
16420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16421 "error in WDA Stop" );
16422 status = VOS_STATUS_E_FAILURE;
16423 }
16424 /* WDI stop is synchrnous, shutdown is complete when it returns */
16425 pWDA->wdaState = WDA_STOP_STATE;
16426
Jeff Johnson295189b2012-06-20 16:38:30 -070016427 /* shutdown should perform the stop & close actions. */
16428 /* Destroy the event */
16429 status = vos_event_destroy(&pWDA->txFrameEvent);
16430 if(!VOS_IS_STATUS_SUCCESS(status))
16431 {
16432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016433 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016434 status = VOS_STATUS_E_FAILURE;
16435 }
16436 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16437 if(!VOS_IS_STATUS_SUCCESS(status))
16438 {
16439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016440 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016441 status = VOS_STATUS_E_FAILURE;
16442 }
16443 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16444 if(!VOS_IS_STATUS_SUCCESS(status))
16445 {
16446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016447 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016448 status = VOS_STATUS_E_FAILURE;
16449 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016450 /* free WDA context */
16451 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16452 if ( !VOS_IS_STATUS_SUCCESS(status) )
16453 {
16454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16455 "error in WDA close " );
16456 status = VOS_STATUS_E_FAILURE;
16457 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016458 return status;
16459}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016460
Jeff Johnsone7245742012-09-05 17:12:55 -070016461/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016462 * FUNCTION: WDA_setNeedShutdown
16463 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016464 */
16465
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016466void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016467{
16468 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016469 if(pWDA == NULL)
16470 {
16471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16472 "Could not get the WDA Context pointer" );
16473 return;
16474 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016475 pWDA->needShutdown = TRUE;
16476}
16477/*
16478 * FUNCTION: WDA_needShutdown
16479 * WDA needs a shutdown
16480 */
16481
16482v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16483{
16484 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016485 if(pWDA == NULL)
16486 {
16487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16488 "Could not get the WDA Context pointer" );
16489 return 0;
16490 }
16491 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016492}
16493
Mohit Khanna4a70d262012-09-11 16:30:12 -070016494#ifdef WLAN_FEATURE_11AC
16495/*
16496 * FUNCTION: WDA_SetBeaconFilterReqCallback
16497 *
16498 */
16499void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16500{
16501 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016503 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016504 if(NULL == pWdaParams)
16505 {
16506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016507 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016508 VOS_ASSERT(0) ;
16509 return ;
16510 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016511
Mohit Khanna4a70d262012-09-11 16:30:12 -070016512 vos_mem_free(pWdaParams->wdaMsgParam) ;
16513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16514 vos_mem_free(pWdaParams) ;
16515 /*
16516 * No respone required for SetBeaconFilter req so just free the request
16517 * param here
16518 */
16519
16520 return ;
16521}
16522
16523VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16524 tUpdateVHTOpMode *pData)
16525{
16526 WDI_Status status = WDI_STATUS_SUCCESS ;
16527 tWDA_ReqParams *pWdaParams ;
16528 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16529 sizeof(WDI_UpdateVHTOpMode)) ;
16530 if(NULL == wdiTemp)
16531 {
16532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016533 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016534 VOS_ASSERT(0);
16535 return VOS_STATUS_E_NOMEM;
16536 }
16537 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16538 if(NULL == pWdaParams)
16539 {
16540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016541 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016542 VOS_ASSERT(0);
16543 vos_mem_free(wdiTemp);
16544 return VOS_STATUS_E_NOMEM;
16545 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053016546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16547 "------> %s Opmode = %d and staid = %d" ,
16548 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016549 wdiTemp->opMode = pData->opMode;
16550 wdiTemp->staId = pData->staId;
16551
16552 pWdaParams->pWdaContext = pWDA;
16553 /* Store Req pointer, as this will be used for response */
16554 pWdaParams->wdaMsgParam = (void *)pData;
16555 /* store Params pass it to WDI */
16556 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16557
16558 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16559
16560 if(IS_WDI_STATUS_FAILURE(status))
16561 {
16562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16563 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16565 vos_mem_free(pWdaParams->wdaMsgParam);
16566 vos_mem_free(pWdaParams);
16567 }
16568 return CONVERT_WDI2VOS_STATUS(status) ;
16569}
16570#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016571
16572/*==========================================================================
16573 FUNCTION WDA_TransportChannelDebug
16574
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016575 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016576 Display Transport Channel debugging information
16577 User may request to display DXE channel snapshot
16578 Or if host driver detects any abnormal stcuk may display
16579
16580 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016581 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016582 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016583 debugFlags : Enable stall detect features
16584 defined by WPAL_DeviceDebugFlags
16585 These features may effect
16586 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016587
16588 RETURN VALUE
16589 NONE
16590
16591===========================================================================*/
16592void WDA_TransportChannelDebug
16593(
schang6295e542013-03-12 15:31:23 -070016594 tpAniSirGlobal pMac,
16595 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016596 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016597)
16598{
Mihir Shete40a55652014-03-02 14:14:47 +053016599 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016600 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016601}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016602
16603/*==========================================================================
16604 FUNCTION WDA_SetEnableSSR
16605
16606 DESCRIPTION
16607 API to enable/disable SSR on WDI timeout
16608
16609 PARAMETERS
16610 enableSSR : enable/disable SSR
16611
16612 RETURN VALUE
16613 NONE
16614
16615===========================================================================*/
16616void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16617{
16618 WDI_SetEnableSSR(enableSSR);
16619}
Leo Chang9056f462013-08-01 19:21:11 -070016620
16621#ifdef FEATURE_WLAN_LPHB
16622/*
16623 * FUNCTION: WDA_LPHBconfRspCallback
16624 *
16625 */
16626void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16627{
16628 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16629
16630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16631 "<------ %s " ,__func__);
16632 if (NULL == pWdaParams)
16633 {
16634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16635 "%s: pWdaParams received NULL", __func__);
16636 VOS_ASSERT(0) ;
16637 return ;
16638 }
16639
16640 /* Do not need to send notification to upper layer
16641 * Just free allocated resources */
16642 if (pWdaParams != NULL)
16643 {
16644 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16645 {
16646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16647 }
16648 vos_mem_free(pWdaParams->wdaMsgParam) ;
16649 vos_mem_free(pWdaParams) ;
16650 }
16651
16652 return;
16653}
16654
16655/*
16656 * FUNCTION: WDA_ProcessLPHBConfReq
16657 *
16658 */
16659VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16660 tSirLPHBReq *pData)
16661{
16662 WDI_Status wdiStatus;
16663 tWDA_ReqParams *pWdaParams ;
16664
16665 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16666 "------> %s " , __func__);
16667
16668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16669 if (NULL == pWdaParams)
16670 {
16671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16672 "%s: VOS MEM Alloc Failure", __func__);
16673 VOS_ASSERT(0);
16674 vos_mem_free(pData);
16675 return VOS_STATUS_E_NOMEM;
16676 }
16677
16678 pWdaParams->pWdaContext = pWDA;
16679 pWdaParams->wdaMsgParam = (void *)pData;
16680 pWdaParams->wdaWdiApiMsgParam = NULL;
16681
16682 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16683 if (WDI_STATUS_PENDING == wdiStatus)
16684 {
16685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16686 "Pending received for %s:%d ", __func__, __LINE__);
16687 }
16688 else if (WDI_STATUS_SUCCESS != wdiStatus)
16689 {
16690 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16691 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16692 vos_mem_free(pWdaParams->wdaMsgParam);
16693 vos_mem_free(pWdaParams);
16694 }
16695
16696 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16697}
16698#endif /* FEATURE_WLAN_LPHB */
16699
c_hpothu92367912014-05-01 15:18:17 +053016700void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16701 void* pUserData)
16702{
16703 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16704
16705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16706 "<------ %s " ,__func__);
16707 if (NULL == pBcnMissRateInfo)
16708 {
16709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16710 "%s: pWdaParams received NULL", __func__);
16711 VOS_ASSERT(0) ;
16712 return ;
16713 }
16714 if (pBcnMissRateInfo->callback)
16715 {
16716 pBcnMissRateInfo->callback(status, bcnMissRate,
16717 pBcnMissRateInfo->data);
16718 }
16719 vos_mem_free(pUserData);
16720
16721 return;
16722}
16723
16724v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16725 tSirBcnMissRateReq *pData)
16726{
16727 WDI_Status wdiStatus;
16728 tSirBcnMissRateInfo *pBcnMissRateInfo;
16729
16730 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16731 "------> %s " , __func__);
16732
16733 pBcnMissRateInfo =
16734 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
16735 if (NULL == pBcnMissRateInfo)
16736 {
16737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16738 "%s: VOS MEM Alloc Failure", __func__);
16739 VOS_ASSERT(0);
16740 vos_mem_free(pData);
16741 return;
16742 }
16743
16744 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
16745 pBcnMissRateInfo->data = pData->data;
16746
16747 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
16748 WDA_GetBcnMissRateCallback,
16749 pData->bssid);
16750 if (WDI_STATUS_PENDING == wdiStatus)
16751 {
16752 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16753 "Pending received for %s:%d ", __func__, __LINE__);
16754 }
16755 else if (WDI_STATUS_SUCCESS != wdiStatus)
16756 {
16757 if (pBcnMissRateInfo->callback)
16758 {
16759 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
16760 -1, pBcnMissRateInfo->data);
16761 }
16762 }
16763 vos_mem_free(pData);
16764}
Dino Mycle41bdc942014-06-10 11:30:24 +053016765
16766#ifdef WLAN_FEATURE_EXTSCAN
16767
16768/*==========================================================================
16769 FUNCTION WDA_EXTScanStartRspCallback
16770
16771 DESCRIPTION
16772 API to send EXTScan Start Response to HDD
16773
16774 PARAMETERS
16775 pEventData: Response from FW
16776 pUserData:
16777===========================================================================*/
16778void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
16779{
16780 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16781 tWDA_CbContext *pWDA = NULL;
16782 void *pCallbackContext;
16783 tpAniSirGlobal pMac;
16784
16785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16786 "%s:", __func__);
16787 if (NULL == pWdaParams)
16788 {
16789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16790 "%s: pWdaParams received NULL", __func__);
16791 VOS_ASSERT(0);
16792 return;
16793 }
16794
16795 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16796
16797 if (NULL == pWDA)
16798 {
16799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16800 "%s: pWDA received NULL", __func__);
16801 VOS_ASSERT(0);
16802 goto error;
16803 }
16804
16805 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16806 if (NULL == pMac)
16807 {
16808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16809 "%s:pMac is NULL", __func__);
16810 VOS_ASSERT(0);
16811 goto error;
16812 }
16813
16814 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16815
16816 if (pMac->sme.pEXTScanIndCb)
16817 {
16818 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
16819 pEventData);
16820 }
16821 else
16822 {
16823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16824 "%s:HDD callback is null", __func__);
16825 VOS_ASSERT(0);
16826 }
16827
16828error:
16829
16830 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16831 {
16832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16833 }
16834 if (pWdaParams->wdaMsgParam != NULL)
16835 {
16836 vos_mem_free(pWdaParams->wdaMsgParam);
16837 }
16838 vos_mem_free(pWdaParams) ;
16839
16840 return;
16841}
16842
16843/*==========================================================================
16844 FUNCTION WDA_EXTScanStopRspCallback
16845
16846 DESCRIPTION
16847 API to send EXTScan Stop Response to HDD
16848
16849 PARAMETERS
16850 pEventData: Response from FW
16851 pUserData:
16852===========================================================================*/
16853void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
16854{
16855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16856 tWDA_CbContext *pWDA = NULL;
16857 void *pCallbackContext;
16858 tpAniSirGlobal pMac;
16859
16860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16861 "%s:", __func__);
16862 if (NULL == pWdaParams)
16863 {
16864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16865 "%s: pWdaParams received NULL", __func__);
16866 VOS_ASSERT(0);
16867 return;
16868 }
16869
16870 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16871
16872 if (NULL == pWDA)
16873 {
16874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16875 "%s: pWDA received NULL", __func__);
16876 VOS_ASSERT(0);
16877 goto error;
16878 }
16879
16880 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16881 if (NULL == pMac)
16882 {
16883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16884 "%s:pMac is NULL", __func__);
16885 VOS_ASSERT(0);
16886 goto error;
16887 }
16888 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16889
16890 if (pMac->sme.pEXTScanIndCb)
16891 {
16892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16893 "%s:HDD call back function called", __func__);
16894 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
16895 pEventData);
16896 }
16897 else
16898 {
16899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16900 "%s:HDD callback is null", __func__);
16901 VOS_ASSERT(0);
16902 }
16903
16904error:
16905
16906 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16907 {
16908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16909 }
16910 if (pWdaParams->wdaMsgParam != NULL)
16911 {
16912 vos_mem_free(pWdaParams->wdaMsgParam);
16913 }
16914 vos_mem_free(pWdaParams) ;
16915
16916
16917 return;
16918}
16919
16920/*==========================================================================
16921 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
16922
16923 DESCRIPTION
16924 API to send EXTScan Get Cached Results Response to HDD
16925
16926 PARAMETERS
16927 pEventData: Response from FW
16928 pUserData:
16929===========================================================================*/
16930void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
16931{
16932 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16933 tWDA_CbContext *pWDA = NULL;
16934 void *pCallbackContext;
16935 tpAniSirGlobal pMac;
16936
16937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16938 "%s: ", __func__);
16939 if (NULL == pWdaParams)
16940 {
16941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16942 "%s: pWdaParams received NULL", __func__);
16943 VOS_ASSERT(0);
16944 return;
16945 }
16946
16947 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16948
16949 if (NULL == pWDA)
16950 {
16951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16952 "%s: pWDA received NULL", __func__);
16953 VOS_ASSERT(0);
16954 goto error;
16955 }
16956
16957 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16958 if (NULL == pMac)
16959 {
16960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16961 "%s:pMac is NULL", __func__);
16962 VOS_ASSERT(0);
16963 goto error;
16964 }
16965
16966 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16967
16968 if (pMac->sme.pEXTScanIndCb)
16969 {
16970 pMac->sme.pEXTScanIndCb(pCallbackContext,
16971 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
16972 pEventData);
16973 }
16974 else
16975 {
16976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16977 "%s:HDD callback is null", __func__);
16978 VOS_ASSERT(0);
16979 }
16980
16981
16982error:
16983
16984 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16985 {
16986 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16987 }
16988 if (pWdaParams->wdaMsgParam != NULL)
16989 {
16990 vos_mem_free(pWdaParams->wdaMsgParam);
16991 }
16992 vos_mem_free(pWdaParams) ;
16993
16994 return;
16995}
16996
16997/*==========================================================================
16998 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
16999
17000 DESCRIPTION
17001 API to send EXTScan Get Capabilities Response to HDD
17002
17003 PARAMETERS
17004 pEventData: Response from FW
17005 pUserData:
17006===========================================================================*/
17007void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17008{
17009 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17010 tWDA_CbContext *pWDA = NULL;
17011 void *pCallbackContext;
17012 tpAniSirGlobal pMac;
17013
17014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17015 "%s:", __func__);
17016 if (NULL == pWdaParams)
17017 {
17018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17019 "%s: pWdaParams received NULL", __func__);
17020 VOS_ASSERT(0);
17021 return;
17022 }
17023
17024 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17025
17026 if (NULL == pWDA)
17027 {
17028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17029 "%s: pWDA received NULL", __func__);
17030 VOS_ASSERT(0);
17031 goto error;
17032 }
17033
17034 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17035 if (NULL == pMac)
17036 {
17037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17038 "%s:pMac is NULL", __func__);
17039 VOS_ASSERT(0);
17040 goto error;
17041 }
17042
17043 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17044
17045 if (pMac->sme.pEXTScanIndCb)
17046 {
17047 pMac->sme.pEXTScanIndCb(pCallbackContext,
17048 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17049 pEventData);
17050 }
17051 else
17052 {
17053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17054 "%s:HDD callback is null", __func__);
17055 VOS_ASSERT(0);
17056 }
17057
17058
17059error:
17060
17061 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17062 {
17063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17064 }
17065 if (pWdaParams->wdaMsgParam != NULL)
17066 {
17067 vos_mem_free(pWdaParams->wdaMsgParam);
17068 }
17069 vos_mem_free(pWdaParams) ;
17070
17071 return;
17072}
17073
17074/*==========================================================================
17075 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17076
17077 DESCRIPTION
17078 API to send EXTScan Set BSSID Hotlist Response to HDD
17079
17080 PARAMETERS
17081 pEventData: Response from FW
17082 pUserData:
17083===========================================================================*/
17084void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17085{
17086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17087 tWDA_CbContext *pWDA = NULL;
17088 void *pCallbackContext;
17089 tpAniSirGlobal pMac;
17090
17091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17092 "%s: ", __func__);
17093 if (NULL == pWdaParams)
17094 {
17095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17096 "%s: pWdaParams received NULL", __func__);
17097 VOS_ASSERT(0) ;
17098 return;
17099 }
17100
17101 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17102
17103 if (NULL == pWDA)
17104 {
17105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17106 "%s: pWDA received NULL", __func__);
17107 VOS_ASSERT(0);
17108 goto error;
17109 }
17110
17111 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17112 if (NULL == pMac)
17113 {
17114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17115 "%s:pMac is NULL", __func__);
17116 VOS_ASSERT(0);
17117 goto error;
17118 }
17119
17120 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17121
17122 if (pMac->sme.pEXTScanIndCb)
17123 {
17124 pMac->sme.pEXTScanIndCb(pCallbackContext,
17125 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17126 pEventData);
17127 }
17128 else
17129 {
17130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17131 "%s:HDD callback is null", __func__);
17132 VOS_ASSERT(0);
17133 }
17134
17135
17136error:
17137
17138 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17139 {
17140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17141 }
17142 if (pWdaParams->wdaMsgParam != NULL)
17143 {
17144 vos_mem_free(pWdaParams->wdaMsgParam);
17145 }
17146 vos_mem_free(pWdaParams) ;
17147
17148 return;
17149}
17150
17151/*==========================================================================
17152 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17153
17154 DESCRIPTION
17155 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17156
17157 PARAMETERS
17158 pEventData: Response from FW
17159 pUserData:
17160===========================================================================*/
17161void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17162{
17163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17164 tWDA_CbContext *pWDA = NULL;
17165 void *pCallbackContext;
17166 tpAniSirGlobal pMac;
17167
17168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17169 "%s:", __func__);
17170 if (NULL == pWdaParams)
17171 {
17172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17173 "%s: pWdaParams received NULL", __func__);
17174 VOS_ASSERT(0) ;
17175 return;
17176 }
17177
17178 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17179
17180 if (NULL == pWDA)
17181 {
17182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17183 "%s: pWDA received NULL", __func__);
17184 VOS_ASSERT(0);
17185 goto error;
17186 }
17187
17188 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17189 if (NULL == pMac)
17190 {
17191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17192 "%s:pMac is NULL", __func__);
17193 VOS_ASSERT(0);
17194 goto error;
17195 }
17196
17197 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17198
17199 if (pMac->sme.pEXTScanIndCb)
17200 {
17201 pMac->sme.pEXTScanIndCb(pCallbackContext,
17202 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17203 pEventData);
17204 }
17205 else
17206 {
17207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17208 "%s:HDD callback is null", __func__);
17209 VOS_ASSERT(0);
17210 }
17211
17212
17213error:
17214
17215 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17216 {
17217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17218 }
17219 if (pWdaParams->wdaMsgParam != NULL)
17220 {
17221 vos_mem_free(pWdaParams->wdaMsgParam);
17222 }
17223 vos_mem_free(pWdaParams) ;
17224
17225 return;
17226}
17227
17228/*==========================================================================
17229 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17230
17231 DESCRIPTION
17232 API to send EXTScan Set Significant RSSI Change RSP to HDD
17233
17234 PARAMETERS
17235 pEventData: Response from FW
17236 pUserData:
17237===========================================================================*/
17238void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17239{
17240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17241 tWDA_CbContext *pWDA = NULL;
17242 void *pCallbackContext;
17243 tpAniSirGlobal pMac;
17244
17245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17246 "%s:", __func__);
17247 if (NULL == pWdaParams)
17248 {
17249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17250 "%s: pWdaParams received NULL", __func__);
17251 VOS_ASSERT(0) ;
17252 return;
17253 }
17254
17255 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17256
17257 if (NULL == pWDA)
17258 {
17259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17260 "%s: pWDA received NULL", __func__);
17261 VOS_ASSERT(0);
17262 goto error;
17263 }
17264
17265 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17266 if (NULL == pMac)
17267 {
17268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17269 "%s:pMac is NULL", __func__);
17270 VOS_ASSERT(0);
17271 goto error;
17272 }
17273
17274 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17275
17276 if (pMac->sme.pEXTScanIndCb)
17277 {
17278 pMac->sme.pEXTScanIndCb(pCallbackContext,
17279 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17280 pEventData);
17281 }
17282 else
17283 {
17284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17285 "%s:HDD callback is null", __func__);
17286 VOS_ASSERT(0);
17287 }
17288
17289
17290error:
17291
17292 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17293 {
17294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17295 }
17296 if (pWdaParams->wdaMsgParam != NULL)
17297 {
17298 vos_mem_free(pWdaParams->wdaMsgParam);
17299 }
17300 vos_mem_free(pWdaParams) ;
17301
17302 return;
17303}
17304
17305/*==========================================================================
17306 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17307
17308 DESCRIPTION
17309 API to send EXTScan Set Significant RSSI Change RSP to HDD
17310
17311 PARAMETERS
17312 pEventData: Response from FW
17313 pUserData:
17314===========================================================================*/
17315void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17316 void* pUserData)
17317{
17318 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17319 tWDA_CbContext *pWDA = NULL;
17320 void *pCallbackContext;
17321 tpAniSirGlobal pMac;
17322
17323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17324 "%s:", __func__);
17325 if (NULL == pWdaParams)
17326 {
17327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17328 "%s: pWdaParams received NULL", __func__);
17329 VOS_ASSERT(0) ;
17330 return;
17331 }
17332
17333 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17334
17335 if (NULL == pWDA)
17336 {
17337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17338 "%s: pWDA received NULL", __func__);
17339 VOS_ASSERT(0);
17340 goto error;
17341 }
17342
17343 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17344 if (NULL == pMac)
17345 {
17346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17347 "%s:pMac is NULL", __func__);
17348 VOS_ASSERT(0);
17349 goto error;
17350 }
17351
17352 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17353
17354 if (pMac->sme.pEXTScanIndCb)
17355 {
17356 pMac->sme.pEXTScanIndCb(pCallbackContext,
17357 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17358 pEventData);
17359 }
17360 else
17361 {
17362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17363 "%s:HDD callback is null", __func__);
17364 VOS_ASSERT(0);
17365 }
17366
17367
17368error:
17369
17370 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17371 {
17372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17373 }
17374 if (pWdaParams->wdaMsgParam != NULL)
17375 {
17376 vos_mem_free(pWdaParams->wdaMsgParam);
17377 }
17378 vos_mem_free(pWdaParams) ;
17379
17380 return;
17381}
17382
17383/*==========================================================================
17384 FUNCTION WDA_ProcessEXTScanStartReq
17385
17386 DESCRIPTION
17387 API to send EXTScan Start Request to WDI
17388
17389 PARAMETERS
17390 pWDA: Pointer to WDA context
17391 wdaRequest: Pointer to EXTScan req parameters
17392===========================================================================*/
17393VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17394 tSirEXTScanStartReqParams *wdaRequest)
17395{
17396 WDI_Status status = WDI_STATUS_SUCCESS;
17397 tWDA_ReqParams *pWdaParams;
17398
17399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17400 "%s: ", __func__);
17401 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17402 if (NULL == pWdaParams)
17403 {
17404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17405 "%s: VOS MEM Alloc Failure", __func__);
17406 VOS_ASSERT(0);
17407 return VOS_STATUS_E_NOMEM;
17408 }
17409 pWdaParams->pWdaContext = pWDA;
17410 pWdaParams->wdaMsgParam = wdaRequest;
17411 pWdaParams->wdaWdiApiMsgParam = NULL;
17412
17413 status = WDI_EXTScanStartReq((void *)wdaRequest,
17414 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17415 (void *)pWdaParams);
17416 if (IS_WDI_STATUS_FAILURE(status))
17417 {
17418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17419 "Failure to request. Free all the memory " );
17420 vos_mem_free(pWdaParams->wdaMsgParam);
17421 vos_mem_free(pWdaParams);
17422 }
17423 return CONVERT_WDI2VOS_STATUS(status);
17424}
17425
17426/*==========================================================================
17427 FUNCTION WDA_ProcessEXTScanStopReq
17428
17429 DESCRIPTION
17430 API to send EXTScan Start Request to WDI
17431
17432 PARAMETERS
17433 pWDA: Pointer to WDA context
17434 wdaRequest: Pointer to EXTScan req parameters
17435===========================================================================*/
17436VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17437 tSirEXTScanStopReqParams *wdaRequest)
17438{
17439 WDI_Status status = WDI_STATUS_SUCCESS;
17440 tWDA_ReqParams *pWdaParams;
17441
17442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17443 "%s:", __func__);
17444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17445 if (NULL == pWdaParams)
17446 {
17447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17448 "%s: VOS MEM Alloc Failure", __func__);
17449 VOS_ASSERT(0);
17450 return VOS_STATUS_E_NOMEM;
17451 }
17452 pWdaParams->pWdaContext = pWDA;
17453 pWdaParams->wdaMsgParam = wdaRequest;
17454 pWdaParams->wdaWdiApiMsgParam = NULL;
17455
17456 status = WDI_EXTScanStopReq((void *)wdaRequest,
17457 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17458 (void *)pWdaParams);
17459 if (IS_WDI_STATUS_FAILURE(status))
17460 {
17461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17462 "Failure to request. Free all the memory " );
17463 vos_mem_free(pWdaParams->wdaMsgParam);
17464 vos_mem_free(pWdaParams);
17465 }
17466 return CONVERT_WDI2VOS_STATUS(status);
17467}
17468
17469/*==========================================================================
17470 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17471
17472 DESCRIPTION
17473 API to send EXTScan Get Cached Results Request to WDI
17474
17475 PARAMETERS
17476 pWDA: Pointer to WDA context
17477 wdaRequest: Pointer to EXTScan req parameters
17478===========================================================================*/
17479VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17480 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17481{
17482 WDI_Status status = WDI_STATUS_SUCCESS;
17483 tWDA_ReqParams *pWdaParams;
17484
17485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17486 "%s: ", __func__);
17487 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17488 if (NULL == pWdaParams)
17489 {
17490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17491 "%s: VOS MEM Alloc Failure", __func__);
17492 VOS_ASSERT(0);
17493 return VOS_STATUS_E_NOMEM;
17494 }
17495 pWdaParams->pWdaContext = pWDA;
17496 pWdaParams->wdaMsgParam = wdaRequest;
17497 pWdaParams->wdaWdiApiMsgParam = NULL;
17498
17499 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17500 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17501 (void *)pWdaParams);
17502 if (IS_WDI_STATUS_FAILURE(status))
17503 {
17504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17505 "Failure to request. Free all the memory " );
17506 vos_mem_free(pWdaParams->wdaMsgParam);
17507 vos_mem_free(pWdaParams);
17508 }
17509 return CONVERT_WDI2VOS_STATUS(status);
17510}
17511
17512/*==========================================================================
17513 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17514
17515 DESCRIPTION
17516 API to send EXTScan Get Capabilities Request to WDI
17517
17518 PARAMETERS
17519 pWDA: Pointer to WDA context
17520 wdaRequest: Pointer to EXTScan req parameters
17521===========================================================================*/
17522VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17523 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17524{
17525 WDI_Status status = WDI_STATUS_SUCCESS;
17526 tWDA_ReqParams *pWdaParams;
17527
17528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17529 "%s:", __func__);
17530 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17531 if (NULL == pWdaParams)
17532 {
17533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17534 "%s: VOS MEM Alloc Failure", __func__);
17535 VOS_ASSERT(0);
17536 return VOS_STATUS_E_NOMEM;
17537 }
17538 pWdaParams->pWdaContext = pWDA;
17539 pWdaParams->wdaMsgParam = wdaRequest;
17540 pWdaParams->wdaWdiApiMsgParam = NULL;
17541
17542 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17543 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17544 (void *)pWdaParams);
17545 if (IS_WDI_STATUS_FAILURE(status))
17546 {
17547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17548 "Failure to request. Free all the memory " );
17549 vos_mem_free(pWdaParams->wdaMsgParam);
17550 vos_mem_free(pWdaParams);
17551 }
17552 return CONVERT_WDI2VOS_STATUS(status);
17553}
17554
17555/*==========================================================================
17556 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17557
17558 DESCRIPTION
17559 API to send Set BSSID Hotlist Request to WDI
17560
17561 PARAMETERS
17562 pWDA: Pointer to WDA context
17563 wdaRequest: Pointer to EXTScan req parameters
17564===========================================================================*/
17565VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17566 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17567{
17568 WDI_Status status = WDI_STATUS_SUCCESS;
17569 tWDA_ReqParams *pWdaParams;
17570
17571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17572 "%s: ", __func__);
17573 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17574 if (NULL == pWdaParams)
17575 {
17576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17577 "%s: VOS MEM Alloc Failure", __func__);
17578 VOS_ASSERT(0);
17579 return VOS_STATUS_E_NOMEM;
17580 }
17581 pWdaParams->pWdaContext = pWDA;
17582 pWdaParams->wdaMsgParam = wdaRequest;
17583 pWdaParams->wdaWdiApiMsgParam = NULL;
17584
17585 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17586 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17587 (void *)pWdaParams);
17588 if (IS_WDI_STATUS_FAILURE(status))
17589 {
17590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17591 "Failure to request. Free all the memory " );
17592 vos_mem_free(pWdaParams->wdaMsgParam);
17593 vos_mem_free(pWdaParams);
17594 }
17595 return CONVERT_WDI2VOS_STATUS(status);
17596}
17597
17598/*==========================================================================
17599 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17600
17601 DESCRIPTION
17602 API to send Reset BSSID Hotlist Request to WDI
17603
17604 PARAMETERS
17605 pWDA: Pointer to WDA context
17606 wdaRequest: Pointer to EXTScan req parameters
17607===========================================================================*/
17608VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17609 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17610{
17611 WDI_Status status = WDI_STATUS_SUCCESS;
17612 tWDA_ReqParams *pWdaParams;
17613
17614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17615 "%s:", __func__);
17616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17617 if (NULL == pWdaParams)
17618 {
17619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17620 "%s: VOS MEM Alloc Failure", __func__);
17621 VOS_ASSERT(0);
17622 return VOS_STATUS_E_NOMEM;
17623 }
17624 pWdaParams->pWdaContext = pWDA;
17625 pWdaParams->wdaMsgParam = wdaRequest;
17626 pWdaParams->wdaWdiApiMsgParam = NULL;
17627
17628 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17629 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17630 (void *)pWdaParams);
17631 if (IS_WDI_STATUS_FAILURE(status))
17632 {
17633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17634 "Failure to request. Free all the memory " );
17635 vos_mem_free(pWdaParams->wdaMsgParam);
17636 vos_mem_free(pWdaParams);
17637 }
17638 return CONVERT_WDI2VOS_STATUS(status);
17639}
17640
17641/*==========================================================================
17642 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17643
17644 DESCRIPTION
17645 API to send Set Significant RSSI Change Request to WDI
17646
17647 PARAMETERS
17648 pWDA: Pointer to WDA context
17649 wdaRequest: Pointer to EXTScan req parameters
17650===========================================================================*/
17651VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17652 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17653{
17654 WDI_Status status = WDI_STATUS_SUCCESS;
17655 tWDA_ReqParams *pWdaParams;
17656
17657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17658 "%s: ", __func__);
17659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17660 if (NULL == pWdaParams)
17661 {
17662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17663 "%s: VOS MEM Alloc Failure", __func__);
17664 VOS_ASSERT(0);
17665 return VOS_STATUS_E_NOMEM;
17666 }
17667 pWdaParams->pWdaContext = pWDA;
17668 pWdaParams->wdaMsgParam = wdaRequest;
17669 pWdaParams->wdaWdiApiMsgParam = NULL;
17670
17671 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17672 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17673 (void *)pWdaParams);
17674 if (IS_WDI_STATUS_FAILURE(status))
17675 {
17676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17677 "Failure to request. Free all the memory " );
17678 vos_mem_free(pWdaParams->wdaMsgParam);
17679 vos_mem_free(pWdaParams);
17680 }
17681 return CONVERT_WDI2VOS_STATUS(status);
17682}
17683
17684/*==========================================================================
17685 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17686
17687 DESCRIPTION
17688 API to send Reset Significant RSSI Change Request to WDI
17689
17690 PARAMETERS
17691 pWDA: Pointer to WDA context
17692 wdaRequest: Pointer to EXTScan req parameters
17693===========================================================================*/
17694VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17695 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17696{
17697 WDI_Status status = WDI_STATUS_SUCCESS;
17698 tWDA_ReqParams *pWdaParams;
17699
17700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17701 "%s:", __func__);
17702 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17703 if (NULL == pWdaParams)
17704 {
17705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17706 "%s: VOS MEM Alloc Failure", __func__);
17707 VOS_ASSERT(0);
17708 return VOS_STATUS_E_NOMEM;
17709 }
17710 pWdaParams->pWdaContext = pWDA;
17711 pWdaParams->wdaMsgParam = wdaRequest;
17712 pWdaParams->wdaWdiApiMsgParam = NULL;
17713
17714 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
17715 (WDI_EXTScanResetSignfRSSIChangeRspCb)
17716 WDA_EXTScanResetSignfRSSIChangeRspCallback,
17717 (void *)pWdaParams);
17718 if (IS_WDI_STATUS_FAILURE(status))
17719 {
17720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17721 "Failure to request. Free all the memory " );
17722 vos_mem_free(pWdaParams->wdaMsgParam);
17723 vos_mem_free(pWdaParams);
17724 }
17725 return CONVERT_WDI2VOS_STATUS(status);
17726}
17727#endif /* WLAN_FEATURE_EXTSCAN */
17728
Sunil Duttbd736ed2014-05-26 21:19:41 +053017729#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17730
17731/*==========================================================================
17732 FUNCTION WDA_LLStatsSetRspCallback
17733
17734 DESCRIPTION
17735 API to process set link layer statistics response from FW
17736
17737 PARAMETERS
17738 pRsp: Pointer to set link layer statistics response
17739 pUserData: Pointer to user data
17740
17741 RETURN VALUE
17742 NONE
17743
17744===========================================================================*/
17745void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
17746{
17747 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17748
17749
17750 if (NULL == pWdaParams)
17751 {
17752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17753 "%s: pWdaParams received NULL", __func__);
17754 VOS_ASSERT(0) ;
17755 return ;
17756 }
17757
17758 /* Do not need to send notification to upper layer
17759 * Just free allocated resources */
17760 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17761 {
17762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17763 }
17764 if (pWdaParams->wdaMsgParam != NULL)
17765 {
17766 vos_mem_free(pWdaParams->wdaMsgParam);
17767 }
17768 vos_mem_free(pWdaParams) ;
17769
17770 return;
17771}
17772
17773/*==========================================================================
17774 FUNCTION WDA_ProcessLLStatsSetReq
17775
17776 DESCRIPTION
17777 API to send Set Link Layer Stats request to WDI
17778
17779 PARAMETERS
17780 pWDA: Pointer to WDA context
17781 wdaRequest: Pointer to set Link Layer Stats req parameters
17782===========================================================================*/
17783VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
17784 tSirLLStatsSetReq *wdaRequest)
17785{
17786 WDI_Status status = WDI_STATUS_SUCCESS;
17787 tWDA_ReqParams *pWdaParams;
17788
17789 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17790 if (NULL == pWdaParams)
17791 {
17792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17793 "%s: VOS MEM Alloc Failure", __func__);
17794 VOS_ASSERT(0);
17795 return VOS_STATUS_E_NOMEM;
17796 }
17797 pWdaParams->pWdaContext = pWDA;
17798 pWdaParams->wdaMsgParam = wdaRequest;
17799 pWdaParams->wdaWdiApiMsgParam = NULL;
17800
17801 status = WDI_LLStatsSetReq((void *)wdaRequest,
17802 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
17803 (void *)pWdaParams);
17804 if (IS_WDI_STATUS_FAILURE(status))
17805 {
17806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17807 "Failure to request. Free all the memory " );
17808 vos_mem_free(pWdaParams->wdaMsgParam);
17809 vos_mem_free(pWdaParams);
17810 }
17811 return CONVERT_WDI2VOS_STATUS(status);
17812}
17813
17814/*==========================================================================
17815 FUNCTION WDA_LLStatsGetRspCallback
17816
17817 DESCRIPTION
17818 API to process get link layer statistics response from FW
17819
17820 PARAMETERS
17821 pRsp: Pointer to get link layer statistics response
17822 pUserData: Pointer to user data
17823
17824 RETURN VALUE
17825 NONE
17826
17827===========================================================================*/
17828void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
17829{
17830 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17831
17832 if (NULL == pWdaParams)
17833 {
17834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17835 "%s: pWdaParams received NULL", __func__);
17836 VOS_ASSERT(0) ;
17837 return ;
17838 }
17839
17840 /* Do not need to send notification to upper layer
17841 * Just free allocated resources */
17842 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17843 {
17844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17845 }
17846 if (pWdaParams->wdaMsgParam != NULL)
17847 {
17848 vos_mem_free(pWdaParams->wdaMsgParam);
17849 }
17850 vos_mem_free(pWdaParams) ;
17851
17852 return;
17853}
17854
17855/*==========================================================================
17856 FUNCTION WDA_ProcessLLStatsGetReq
17857
17858 DESCRIPTION
17859 API to send Get Link Layer Stats request to WDI
17860
17861 PARAMETERS
17862 pWDA: Pointer to WDA context
17863 wdaRequest: Pointer to get Link Layer Stats req parameters
17864===========================================================================*/
17865VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
17866 tSirLLStatsGetReq *wdaRequest)
17867{
17868 WDI_Status status = WDI_STATUS_SUCCESS;
17869 tWDA_ReqParams *pWdaParams;
17870
17871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17872 if (NULL == pWdaParams)
17873 {
17874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17875 "%s: VOS MEM Alloc Failure", __func__);
17876 VOS_ASSERT(0);
17877 return VOS_STATUS_E_NOMEM;
17878 }
17879 pWdaParams->pWdaContext = pWDA;
17880 pWdaParams->wdaMsgParam = wdaRequest;
17881 pWdaParams->wdaWdiApiMsgParam = NULL;
17882
17883 status = WDI_LLStatsGetReq((void *) wdaRequest,
17884 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
17885 (void *)pWdaParams);
17886 if (IS_WDI_STATUS_FAILURE(status))
17887 {
17888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17889 "Failure to request. Free all the memory " );
17890 vos_mem_free(pWdaParams->wdaMsgParam);
17891 vos_mem_free(pWdaParams);
17892 }
17893 return CONVERT_WDI2VOS_STATUS(status);
17894}
17895
17896/*==========================================================================
17897 FUNCTION WDA_LLStatsClearRspCallback
17898
17899 DESCRIPTION
17900 API to process clear link layer statistics response from FW
17901
17902 PARAMETERS
17903 pRsp: Pointer to clear link layer statistics response
17904 pUserData: Pointer to user data
17905
17906 RETURN VALUE
17907 NONE
17908
17909===========================================================================*/
17910void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
17911{
17912 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17913
17914
17915 if (NULL == pWdaParams)
17916 {
17917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17918 "%s: pWdaParams received NULL", __func__);
17919 VOS_ASSERT(0) ;
17920 return ;
17921 }
17922 /* Do not need to send notification to upper layer
17923 * Just free allocated resources */
17924 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17925 {
17926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17927 }
17928 if (pWdaParams->wdaMsgParam != NULL)
17929 {
17930 vos_mem_free(pWdaParams->wdaMsgParam);
17931 }
17932 vos_mem_free(pWdaParams) ;
17933 return;
17934}
17935
17936/*==========================================================================
17937 FUNCTION WDA_ProcessLLStatsClearReq
17938
17939 DESCRIPTION
17940 API to send Clear Link Layer Stats request to WDI
17941
17942 PARAMETERS
17943 pWDA: Pointer to WDA context
17944 wdaRequest: Pointer to earLink Layer Stats req
17945===========================================================================*/
17946VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
17947 tSirLLStatsClearReq *wdaRequest)
17948{
17949 WDI_Status status = WDI_STATUS_SUCCESS;
17950 tWDA_ReqParams *pWdaParams;
17951
17952 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17953 if (NULL == pWdaParams)
17954 {
17955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17956 "%s: VOS MEM Alloc Failure", __func__);
17957 VOS_ASSERT(0);
17958 return VOS_STATUS_E_NOMEM;
17959 }
17960 pWdaParams->pWdaContext = pWDA;
17961 pWdaParams->wdaMsgParam = wdaRequest;
17962 pWdaParams->wdaWdiApiMsgParam = NULL;
17963
17964 status = WDI_LLStatsClearReq((void *) wdaRequest,
17965 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
17966 (void *)pWdaParams);
17967 if (IS_WDI_STATUS_FAILURE(status))
17968 {
17969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17970 "Failure to request. Free all the memory " );
17971 vos_mem_free(pWdaParams->wdaMsgParam);
17972 vos_mem_free(pWdaParams);
17973 }
17974 return CONVERT_WDI2VOS_STATUS(status);
17975}
17976
17977#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053017978
Abhishek Singh85b74712014-10-08 11:38:19 +053017979void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
17980{
17981 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
17982
17983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17984 "<------ %s " ,__func__);
17985 if (NULL == fwStatsinfo)
17986 {
17987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17988 "%s: pWdaParams received NULL", __func__);
17989 VOS_ASSERT(0);
17990 return;
17991 }
17992
17993 if(fwStatsinfo->callback)
17994 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
17995
17996 vos_mem_free(pUserData);
17997 return;
17998}
17999
18000
18001v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18002 tSirFWStatsGetReq *pData)
18003{
18004
18005 WDI_Status wdiStatus;
18006 tSirFWStatsInfo *fwStatsinfo;
18007
18008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18009 "------> %s" , __func__);
18010
18011 fwStatsinfo =
18012 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18013 if (NULL == fwStatsinfo)
18014 {
18015 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18016 "%s: VOS MEM Alloc Failure", __func__);
18017 VOS_ASSERT(0);
18018 vos_mem_free(pData);
18019 return;
18020 }
18021
18022 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18023 fwStatsinfo->data = pData->data;
18024
18025 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18026 WDA_FWStatsGetRspCallback,
18027 pData->stats);
18028 if (WDI_STATUS_PENDING == wdiStatus)
18029 {
18030 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18031 "Pending received for %s:%d ", __func__, __LINE__);
18032 }
18033 else if (WDI_STATUS_SUCCESS != wdiStatus)
18034 {
18035 if (fwStatsinfo->callback)
18036 {
18037 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18038 }
18039 vos_mem_free(fwStatsinfo);
18040 }
18041 vos_mem_free(pData);
18042}
18043
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018044/*==========================================================================
18045 FUNCTION WDA_EncryptMsgRspCallback
18046
18047 DESCRIPTION
18048 API to send Encrypt message response to HDD
18049
18050 PARAMETERS
18051 pEventData: Response from FW
18052 pUserData: Data sent to firmware as part of request
18053===========================================================================*/
18054void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18055 void* pUserData)
18056{
18057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18058 tWDA_CbContext *pWDA = NULL;
18059 tpAniSirGlobal pMac;
18060 vos_msg_t vosMsg;
18061 tpSirEncryptedDataRspParams pEncRspParams;
18062 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18063
18064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18065 FL("%s:"), __func__);
18066 if (NULL == pWdaParams)
18067 {
18068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18069 FL("%s: pWdaParams received NULL"), __func__);
18070 VOS_ASSERT(0);
18071 return;
18072 }
18073
18074 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18075
18076 if (NULL == pWDA)
18077 {
18078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18079 FL("%s: pWDA received NULL"), __func__);
18080 VOS_ASSERT(0);
18081 goto error;
18082 }
18083
18084 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18085 if (NULL == pMac)
18086 {
18087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18088 FL("%s:pMac is NULL"), __func__);
18089 VOS_ASSERT(0);
18090 goto error;
18091 }
18092
18093 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18094
18095 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18096 if (NULL == pEncRspParams)
18097 {
18098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18099 FL("%s: VOS MEM Alloc Failure"), __func__);
18100 VOS_ASSERT(0);
18101 goto error;
18102 }
18103
18104 /* Message Header */
18105 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18106 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18107 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18108 pEncryptedDataRsp->encryptedPayload.length;
18109 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18110 pEncryptedDataRsp->encryptedPayload.data,
18111 pEncryptedDataRsp->encryptedPayload.length);
18112
18113 /* VOS message wrapper */
18114 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18115 vosMsg.bodyptr = (void *)pEncRspParams;
18116 vosMsg.bodyval = 0;
18117
18118 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18119 {
18120 /* free the mem */
18121 vos_mem_free((v_VOID_t *) pEncRspParams);
18122 }
18123
18124error:
18125
18126 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18127 {
18128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18129 }
18130 if (pWdaParams->wdaMsgParam != NULL)
18131 {
18132 vos_mem_free(pWdaParams->wdaMsgParam);
18133 }
18134 vos_mem_free(pWdaParams) ;
18135
18136 return;
18137}
18138/*==========================================================================
18139 FUNCTION WDA_ProcessEncryptMsgReq
18140
18141 DESCRIPTION
18142 API to send Encrypt message Request to WDI
18143
18144 PARAMETERS
18145 pWDA: Pointer to WDA context
18146 wdaRequest: Pointer to Encrypt_msg req parameters
18147===========================================================================*/
18148VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18149 u8 *wdaRequest)
18150{
18151 WDI_Status status = WDI_STATUS_SUCCESS;
18152 tWDA_ReqParams *pWdaParams;
18153
18154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18155 FL("%s: "), __func__);
18156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18157 if (NULL == pWdaParams)
18158 {
18159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18160 FL("%s: VOS MEM Alloc Failure"), __func__);
18161 VOS_ASSERT(0);
18162 return VOS_STATUS_E_NOMEM;
18163 }
18164 pWdaParams->pWdaContext = pWDA;
18165 pWdaParams->wdaMsgParam = wdaRequest;
18166 pWdaParams->wdaWdiApiMsgParam = NULL;
18167
18168 status = WDI_EncryptMsgReq((void *)wdaRequest,
18169 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18170 (void *)pWdaParams);
18171 if (IS_WDI_STATUS_FAILURE(status))
18172 {
18173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18174 FL("Failure to request. Free all the memory " ));
18175 vos_mem_free(pWdaParams->wdaMsgParam);
18176 vos_mem_free(pWdaParams);
18177 }
18178 return CONVERT_WDI2VOS_STATUS(status);
18179}