blob: e2a413066a9a275994da67402566216e2e540813 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040 Copyright (c) 2010-2011 QUALCOMM Incorporated.
41 All Rights Reserved.
42 Qualcomm Confidential and Proprietary
43===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070044/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070045 EDIT HISTORY FOR FILE
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 This section contains comments describing changes made to the module.
48 Notice that changes are listed in reverse chronological order.
49
Jeff Johnson295189b2012-06-20 16:38:30 -070050 $Header$$DateTime$$Author$
51
Jeff Johnson295189b2012-06-20 16:38:30 -070052 when who what, where, why
53---------- --- -------------------------------------------------
5410/05/2011 haparna Adding support for Keep Alive Feature
552010-12-30 smiryala UMAC convergence changes
562010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
57===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070058#include "vos_mq.h"
59#include "vos_api.h"
60#include "vos_packet.h"
61#include "vos_nvitem.h"
62#include "sirApi.h"
63#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053064#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070065#include "wlan_qct_wda.h"
66#include "wlan_qct_wda_msg.h"
67#include "wlan_qct_wdi_cfg.h"
68#include "wlan_qct_wdi.h"
69#include "wlan_qct_wdi_ds.h"
70#include "wlan_hal_cfg.h"
71/**********************/
72#include "wniApi.h"
73#include "cfgApi.h"
74#include "limApi.h"
75#include "wlan_qct_tl.h"
76#include "wlan_qct_tli_ba.h"
77#include "limUtils.h"
78#include "btcApi.h"
79#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070080#include "pttMsgApi.h"
81#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070082/* Used MACRO's */
83/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080084#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
86#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070088#define CONVERT_WDI2SIR_STATUS(x) \
89 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
90
91#define IS_WDI_STATUS_FAILURE(status) \
92 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070093#define CONVERT_WDI2VOS_STATUS(x) \
94 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
95
96/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070097#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define WDA_GET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
101
102#define WDA_SET_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
104
105#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
106 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700107#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
108 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109/* timer related Macros */
110#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
111 tx_timer_create(a, b, c, d, e, f, g)
112#define WDA_START_TIMER(a) tx_timer_activate(a)
113#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
114#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700115#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116
117#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
118 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700122#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800123#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700124
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700125#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700127#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700128#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
129 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
130 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
131
132#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
133#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800134#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
135
Jeff Johnson295189b2012-06-20 16:38:30 -0700136/* extern declarations */
137extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700138extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
139
Jeff Johnson295189b2012-06-20 16:38:30 -0700140/* forward declarations */
141void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
142 void *pBodyptr, tANI_U32 bodyVal) ;
143VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
144 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700145VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
146VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
147
148extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
149 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530150void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
c_hpothu92367912014-05-01 15:18:17 +0530211v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
212 tSirBcnMissRateReq *pData);
213
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Leo Chang9056f462013-08-01 19:21:11 -0700220
221#ifdef FEATURE_WLAN_LPHB
222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
223 tSirLPHBReq *pData);
224#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530225
Dino Mycle41bdc942014-06-10 11:30:24 +0530226#ifdef WLAN_FEATURE_EXTSCAN
227VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
228 tSirEXTScanStartReqParams *wdaRequest);
229VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
230 tSirEXTScanStopReqParams *wdaRequest);
231VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
232 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
233VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
234 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
235VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
236 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
237VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
238 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
239VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
240 tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
241VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
242 tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
243#endif /* WLAN_FEATURE_EXTSCAN */
244
Sunil Duttbd736ed2014-05-26 21:19:41 +0530245#ifdef WLAN_FEATURE_LINK_LAYER_STATS
246VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
247 tSirLLStatsSetReq *wdaRequest);
248
249VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
250 tSirLLStatsGetReq *wdaRequest);
251
252VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
253 tSirLLStatsClearReq *wdaRequest);
254#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Jeff Johnson295189b2012-06-20 16:38:30 -0700255/*
256 * FUNCTION: WDA_open
257 * Allocate the WDA context
258 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530259VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700260 tMacOpenParameters *pMacParams )
261{
262 tWDA_CbContext *wdaContext;
263 VOS_STATUS status;
264 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265 /* Allocate WDA context */
266 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
267 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
268 if(!VOS_IS_STATUS_SUCCESS(status))
269 {
270 return VOS_STATUS_E_NOMEM;
271 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 /*__asm int 3;*/
273 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
274
275 /* Initialize data structures */
276 wdaContext->pVosContext = pVosContext;
277 wdaContext->wdaState = WDA_INIT_STATE;
278 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
279
280 /* Initialize WDA-WDI synchronization event */
281 status = vos_event_init(&wdaContext->wdaWdiEvent);
282 if(!VOS_IS_STATUS_SUCCESS(status))
283 {
284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800285 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800286 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700287 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 /* Init Frame transfer event */
289 status = vos_event_init(&wdaContext->txFrameEvent);
290 if(!VOS_IS_STATUS_SUCCESS(status))
291 {
292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800293 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800294 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700295 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 status = vos_event_init(&wdaContext->suspendDataTxEvent);
297 if(!VOS_IS_STATUS_SUCCESS(status))
298 {
299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800300 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800301 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700303 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
304 if(!VOS_IS_STATUS_SUCCESS(status))
305 {
306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800307 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800308 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700310 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530312 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700313 &wdiDevCapability, pMacParams->driverType))
314 {
315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
316 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800317 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 }
319 else
320 {
321 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
322 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
323 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 /* update max STA in WDA used for BA */
325 wdaContext->wdaMaxSta = pMacParams->maxStation;
326 /* store the frameTransRequired flag in wdaContext, to send this to HAL
327 * in WDA_Start
328 */
329 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
330 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800332
333error:
334 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
335 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700336}
337
Jeff Johnson295189b2012-06-20 16:38:30 -0700338/*
339 * FUNCTION: WDA_preStart
340 * Trigger DAL-AL to start CFG download
341 */
342VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
343{
344 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
345 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 /*
347 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
348 */
349 wdaMsg.type = WNI_CFG_DNLD_REQ ;
350 wdaMsg.bodyptr = NULL;
351 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 /* post the message.. */
353 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
354 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
355 {
356 vosStatus = VOS_STATUS_E_BADMSG;
357 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700358 return( vosStatus );
359}
Jeff Johnson295189b2012-06-20 16:38:30 -0700360/*
361 * FUNCTION: WDA_wdiStartCallback
362 * Once WDI_Start is finished, WDI start callback will be called by WDI
363 * to indicate completion of WDI_Start.
364 */
365void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
366 void *pVosContext)
367{
368 tWDA_CbContext *wdaContext;
369 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700370 if (NULL == pVosContext)
371 {
372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700373 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700374 return;
375 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700376 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
377 if (NULL == wdaContext)
378 {
379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700380 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 return;
382 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
384 {
385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700386 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 }
388 else
389 {
390 wdaContext->wdaState = WDA_START_STATE;
391 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700392 /* extract and save version information from the Start Response */
393 wdaContext->wcnssWlanCompiledVersion.major =
394 wdiRspParams->wlanCompiledVersion.major;
395 wdaContext->wcnssWlanCompiledVersion.minor =
396 wdiRspParams->wlanCompiledVersion.minor;
397 wdaContext->wcnssWlanCompiledVersion.version =
398 wdiRspParams->wlanCompiledVersion.version;
399 wdaContext->wcnssWlanCompiledVersion.revision =
400 wdiRspParams->wlanCompiledVersion.revision;
401 wdaContext->wcnssWlanReportedVersion.major =
402 wdiRspParams->wlanReportedVersion.major;
403 wdaContext->wcnssWlanReportedVersion.minor =
404 wdiRspParams->wlanReportedVersion.minor;
405 wdaContext->wcnssWlanReportedVersion.version =
406 wdiRspParams->wlanReportedVersion.version;
407 wdaContext->wcnssWlanReportedVersion.revision =
408 wdiRspParams->wlanReportedVersion.revision;
409 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
410 wdiRspParams->wcnssSoftwareVersion,
411 sizeof(wdaContext->wcnssSoftwareVersionString));
412 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
413 wdiRspParams->wcnssHardwareVersion,
414 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 /* Notify WDA_start that WDI_Start has completed */
416 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700417 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 {
419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700420 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 return;
423}
424
Jeff Johnson295189b2012-06-20 16:38:30 -0700425/*
426 * FUNCTION: WDA_start
427 * Prepare TLV configuration and call WDI_Start.
428 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700429VOS_STATUS WDA_start(v_PVOID_t pVosContext)
430{
431 tWDA_CbContext *wdaContext;
432 VOS_STATUS status;
433 WDI_Status wdiStatus;
434 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700435 if (NULL == pVosContext)
436 {
437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700438 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 return VOS_STATUS_E_FAILURE;
440 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
442 if (NULL == wdaContext)
443 {
444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700445 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 return VOS_STATUS_E_FAILURE;
447 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 /* Non-FTM mode, WDA status for START must be INIT
449 * FTM mode, WDA Status for START can be INIT or STOP */
450 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
451 (WDA_STOP_STATE != wdaContext->wdaState) )
452 {
453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
454 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700455 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 return VOS_STATUS_E_FAILURE;
457 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700458 /* initialize the wdiStartParam. Note that we can create this on
459 the stack since we won't exit until WDI_Start() completes or
460 times out */
461 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 /* prepare the config TLV for the WDI */
464 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
465 if ( !VOS_IS_STATUS_SUCCESS(status) )
466 {
467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700468 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 return VOS_STATUS_E_FAILURE;
470 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 /* note from here onwards if an error occurs we must
472 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700473 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
474 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
475 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* initialize the WDA-WDI synchronization event */
477 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* call WDI start */
479 wdiStatus = WDI_Start(&wdiStartParam,
480 (WDI_StartRspCb)WDA_wdiStartCallback,
481 (v_VOID_t *)pVosContext);
482 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
483 {
484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700485 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 vos_mem_free(wdiStartParam.pConfigBuffer);
487 return VOS_STATUS_E_FAILURE;
488 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 /* wait for WDI start to invoke our callback */
490 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
491 WDA_WDI_START_TIMEOUT );
492 if ( !VOS_IS_STATUS_SUCCESS(status) )
493 {
494 if ( VOS_STATUS_E_TIMEOUT == status )
495 {
496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700497 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 }
499 else
500 {
501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
502 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700503 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 }
505 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530506 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700507 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700509 /* we no longer need the config TLV */
510 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 /* if we are not in the START state then WDI_Start() failed */
512 if (WDA_START_STATE != wdaContext->wdaState)
513 {
514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700515 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 return VOS_STATUS_E_FAILURE;
517 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 /* FTM mode does not need to monitor BA activity */
519 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
520 {
521 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800522 if(VOS_STATUS_SUCCESS == status)
523 {
524 wdaContext->wdaTimersCreated = VOS_TRUE;
525 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 }
Leo Chang9d76f622013-08-23 16:34:52 -0700527 else
528 {
529 vos_event_init(&wdaContext->ftmStopDoneEvent);
530 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700531 return status;
532}
533
Jeff Johnson295189b2012-06-20 16:38:30 -0700534/*
535 * FUNCTION: WDA_prepareConfigTLV
536 * Function to prepare CFG for DAL(WDA)
537 */
538VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
539 WDI_StartReqParamsType *wdiStartParams )
540{
541 /* get pMac to acess CFG data base */
542 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
543 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
544 tHalCfg *tlvStruct = NULL ;
545 tANI_U8 *tlvStructStart = NULL ;
546 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
547 v_PVOID_t *configParam;
548 tANI_U32 configParamSize;
549 tANI_U32 *configDataValue;
550 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700551 tANI_U8 i;
552
Jeff Johnson295189b2012-06-20 16:38:30 -0700553 if ((NULL == pMac)||(NULL == wdaContext))
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700556 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 VOS_ASSERT(0);
558 return VOS_STATUS_E_FAILURE;
559 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
561 WNI_CFG_STA_ID_LEN +
562 WNI_CFG_EDCA_WME_ACBK_LEN +
563 WNI_CFG_EDCA_WME_ACBE_LEN +
564 WNI_CFG_EDCA_WME_ACVI_LEN +
565 WNI_CFG_EDCA_WME_ACVO_LEN +
566 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 /* malloc memory for all configs in one shot */
568 configParam = vos_mem_malloc(configParamSize);
569
570 if(NULL == configParam )
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700573 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 VOS_ASSERT(0) ;
575 return VOS_STATUS_E_NOMEM;
576 }
577 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700579 tlvStruct = (tHalCfg *)configParam;
580 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 /* TODO: Remove Later */
582 /* QWLAN_HAL_CFG_STA_ID */
583 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
584 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
585 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
586 eSIR_SUCCESS)
587 {
588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
589 "Failed to get value for WNI_CFG_STA_ID");
590 goto handle_failure;
591 }
592 tlvStruct->length = strLength ;
593 /* calculate the pad bytes to have the CFG in aligned format */
594 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
595 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700596 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
597 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
599 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
600 tlvStruct->length = sizeof(tANI_U32);
601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
602 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
603 != eSIR_SUCCESS)
604 {
605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
606 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
607 goto handle_failure;
608 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700609 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
610 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
612 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
613 tlvStruct->length = sizeof(tANI_U32);
614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
615 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
616 eSIR_SUCCESS)
617 {
618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
619 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
620 goto handle_failure;
621 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
623 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
625 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
626 tlvStruct->length = sizeof(tANI_U32);
627 configDataValue = (tANI_U32 *)(tlvStruct + 1);
628 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
629 != eSIR_SUCCESS)
630 {
631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
632 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
633 goto handle_failure;
634 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
636 + sizeof(tHalCfg) + tlvStruct->length)) ;
637
638 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
639 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
640 tlvStruct->length = sizeof(tANI_U32);
641 configDataValue = (tANI_U32 *)(tlvStruct + 1);
642 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
643 configDataValue ) != eSIR_SUCCESS)
644 {
645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
646 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
647 goto handle_failure;
648 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
650 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 /* QWLAN_HAL_CFG_CAL_PERIOD */
652 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
653 tlvStruct->length = sizeof(tANI_U32);
654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
655 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
656 != eSIR_SUCCESS)
657 {
658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
659 "Failed to get value for WNI_CFG_CAL_PERIOD");
660 goto handle_failure;
661 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
663 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700664 /* QWLAN_HAL_CFG_CAL_CONTROL */
665 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
666 tlvStruct->length = sizeof(tANI_U32);
667 configDataValue = (tANI_U32 *)(tlvStruct + 1);
668 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
669 != eSIR_SUCCESS)
670 {
671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
672 "Failed to get value for WNI_CFG_CAL_CONTROL");
673 goto handle_failure;
674 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
676 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700677 /* QWLAN_HAL_CFG_PROXIMITY */
678 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
679 tlvStruct->length = sizeof(tANI_U32);
680 configDataValue = (tANI_U32 *)(tlvStruct + 1);
681 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
682 != eSIR_SUCCESS)
683 {
684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
685 "Failed to get value for WNI_CFG_PROXIMITY");
686 goto handle_failure;
687 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700688 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
689 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
691 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
692 tlvStruct->length = sizeof(tANI_U32);
693 configDataValue = (tANI_U32 *)(tlvStruct + 1);
694 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
695 != eSIR_SUCCESS)
696 {
697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
698 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
699 goto handle_failure;
700 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700701 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
702 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700703 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
704 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
705 tlvStruct->length = sizeof(tANI_U32);
706 configDataValue = (tANI_U32 *)(tlvStruct + 1);
707 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
708 eSIR_SUCCESS)
709 {
710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
711 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
712 goto handle_failure;
713 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700714 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
715 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700716 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
717 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
718 tlvStruct->length = sizeof(tANI_U32);
719 configDataValue = (tANI_U32 *)(tlvStruct + 1);
720 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
721 configDataValue ) != eSIR_SUCCESS)
722 {
723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
724 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
725 goto handle_failure;
726 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
728 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700729 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
730 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
731 tlvStruct->length = sizeof(tANI_U32);
732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
733 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
734 eSIR_SUCCESS)
735 {
736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
737 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
738 goto handle_failure;
739 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
741 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
743 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
744 tlvStruct->length = sizeof(tANI_U32);
745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
746 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
747 eSIR_SUCCESS)
748 {
749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
750 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
751 goto handle_failure;
752 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700753 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
754 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
756 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
757 tlvStruct->length = sizeof(tANI_U32);
758 configDataValue = (tANI_U32 *)(tlvStruct + 1);
759 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
760 eSIR_SUCCESS)
761 {
762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
763 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
764 goto handle_failure;
765 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700766 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
767 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
769 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
770 tlvStruct->length = sizeof(tANI_U32);
771 configDataValue = (tANI_U32 *)(tlvStruct + 1);
772 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
773 configDataValue ) != eSIR_SUCCESS)
774 {
775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
776 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
777 goto handle_failure;
778 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700779 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
780 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
782 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
783 tlvStruct->length = sizeof(tANI_U32);
784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
785 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
786 configDataValue ) != eSIR_SUCCESS)
787 {
788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
789 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
790 goto handle_failure;
791 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
793 + sizeof(tHalCfg) + tlvStruct->length));
794
795 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
796 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
797 tlvStruct->length = sizeof(tANI_U32);
798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
799 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
800 configDataValue ) != eSIR_SUCCESS)
801 {
802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
803 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
804 goto handle_failure;
805 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700806 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
807 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700808 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
809 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
810 tlvStruct->length = sizeof(tANI_U32);
811 configDataValue = (tANI_U32 *)(tlvStruct + 1);
812 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
813 configDataValue ) != eSIR_SUCCESS)
814 {
815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
816 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
817 goto handle_failure;
818 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700819 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
820 + sizeof(tHalCfg) + tlvStruct->length));
821
822 /* QWLAN_HAL_CFG_FIXED_RATE */
823 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
824 tlvStruct->length = sizeof(tANI_U32);
825 configDataValue = (tANI_U32 *)(tlvStruct + 1);
826 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
827 != eSIR_SUCCESS)
828 {
829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
830 "Failed to get value for WNI_CFG_FIXED_RATE");
831 goto handle_failure;
832 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
834 + sizeof(tHalCfg) + tlvStruct->length));
835
836 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
837 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
838 tlvStruct->length = sizeof(tANI_U32);
839 configDataValue = (tANI_U32 *)(tlvStruct + 1);
840 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
841 != eSIR_SUCCESS)
842 {
843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
844 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
845 goto handle_failure;
846 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700847 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
848 + sizeof(tHalCfg) + tlvStruct->length));
849
850 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
851 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
852 tlvStruct->length = sizeof(tANI_U32);
853 configDataValue = (tANI_U32 *)(tlvStruct + 1);
854 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
855 configDataValue ) != eSIR_SUCCESS)
856 {
857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
858 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
859 goto handle_failure;
860 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700861 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
862 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700863 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
864 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
865 tlvStruct->length = sizeof(tANI_U32);
866 configDataValue = (tANI_U32 *)(tlvStruct + 1);
867 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
868 configDataValue ) != eSIR_SUCCESS)
869 {
870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
871 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
872 goto handle_failure;
873 }
874 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
875 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700876 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
877 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
878 tlvStruct->length = sizeof(tANI_U32);
879 configDataValue = (tANI_U32 *)(tlvStruct + 1);
880 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
881 configDataValue ) != eSIR_SUCCESS)
882 {
883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
884 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
885 goto handle_failure;
886 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700887 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
888 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700889 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
890 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
891 tlvStruct->length = sizeof(tANI_U32);
892 configDataValue = (tANI_U32 *)(tlvStruct + 1);
893 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
894 configDataValue ) != eSIR_SUCCESS)
895 {
896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
897 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
898 goto handle_failure;
899 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700900 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
901 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700902 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
903 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
904 tlvStruct->length = sizeof(tANI_U32);
905 configDataValue = (tANI_U32 *)(tlvStruct + 1);
906 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
907 configDataValue ) != eSIR_SUCCESS)
908 {
909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
910 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
911 goto handle_failure;
912 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700913 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
914 + sizeof(tHalCfg) + tlvStruct->length);
915
Jeff Johnson295189b2012-06-20 16:38:30 -0700916 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
917 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
918 tlvStruct->length = sizeof(tANI_U32);
919 configDataValue = (tANI_U32 *)(tlvStruct + 1);
920 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
921 configDataValue ) != eSIR_SUCCESS)
922 {
923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
924 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
925 goto handle_failure;
926 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700927 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
928 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700929 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
930 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
931 tlvStruct->length = sizeof(tANI_U32);
932 configDataValue = (tANI_U32 *)(tlvStruct + 1);
933 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
934 configDataValue ) != eSIR_SUCCESS)
935 {
936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
937 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
938 goto handle_failure;
939 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700940 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
941 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700942 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
943 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
944 tlvStruct->length = sizeof(tANI_U32);
945 configDataValue = (tANI_U32 *)(tlvStruct + 1);
946 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
947 eSIR_SUCCESS)
948 {
949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
950 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
951 goto handle_failure;
952 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700953 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
954 + sizeof(tHalCfg) + tlvStruct->length);
955
956 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
957 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
958 tlvStruct->length = sizeof(tANI_U32);
959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
960 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
961 configDataValue ) != eSIR_SUCCESS)
962 {
963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
964 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
965 goto handle_failure;
966 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
968 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700969 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
970 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
971 tlvStruct->length = sizeof(tANI_U32);
972 configDataValue = (tANI_U32 *)(tlvStruct + 1);
973 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
974 configDataValue ) != eSIR_SUCCESS)
975 {
976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
977 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
978 goto handle_failure;
979 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700980 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
981 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700982 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
983 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
984 tlvStruct->length = sizeof(tANI_U32);
985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
986 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
987 configDataValue ) != eSIR_SUCCESS)
988 {
989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
990 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
991 goto handle_failure;
992 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700993 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
994 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700995 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
996 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
997 tlvStruct->length = sizeof(tANI_U32);
998 configDataValue = (tANI_U32 *)(tlvStruct + 1);
999 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1000 configDataValue ) != eSIR_SUCCESS)
1001 {
1002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1003 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1004 goto handle_failure;
1005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001006 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1007 + sizeof(tHalCfg) + tlvStruct->length);
1008
1009 /* QWLAN_HAL_CFG_STATS_PERIOD */
1010 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1011 tlvStruct->length = sizeof(tANI_U32);
1012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1013 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1014 eSIR_SUCCESS)
1015 {
1016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1017 "Failed to get value for WNI_CFG_STATS_PERIOD");
1018 goto handle_failure;
1019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1021 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001022 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1023 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1024 tlvStruct->length = sizeof(tANI_U32);
1025 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1026 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1027 eSIR_SUCCESS)
1028 {
1029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1030 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1031 goto handle_failure;
1032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001033 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1034 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001035 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1036 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1037 tlvStruct->length = sizeof(tANI_U32);
1038 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1039 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1040 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1044 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1045 tlvStruct->length = sizeof(tANI_U32);
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1048 != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1052 goto handle_failure;
1053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1057 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1058 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1061 &strLength) != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1065 goto handle_failure;
1066 }
1067 tlvStruct->length = strLength;
1068 /* calculate the pad bytes to have the CFG in aligned format */
1069 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1070 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1072 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001073 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1074 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1075 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1077 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1078 &strLength) != eSIR_SUCCESS)
1079 {
1080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1081 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1082 goto handle_failure;
1083 }
1084 tlvStruct->length = strLength;
1085 /* calculate the pad bytes to have the CFG in aligned format */
1086 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1087 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1089 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001090 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1091 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1092 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1093 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1094 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1095 &strLength) != eSIR_SUCCESS)
1096 {
1097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1098 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1099 goto handle_failure;
1100 }
1101 tlvStruct->length = strLength;
1102 /* calculate the pad bytes to have the CFG in aligned format */
1103 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1104 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1106 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1108 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1109 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1110 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1111 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1112 &strLength) != eSIR_SUCCESS)
1113 {
1114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1115 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1116 goto handle_failure;
1117 }
1118 tlvStruct->length = strLength;
1119 /* calculate the pad bytes to have the CFG in aligned format */
1120 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1121 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001122 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1123 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001124 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1125 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1126 tlvStruct->length = sizeof(tANI_U32);
1127 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1128 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1129 != eSIR_SUCCESS)
1130 {
1131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1132 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1133 goto handle_failure;
1134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001135 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1136 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001137 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1138 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1139 tlvStruct->length = sizeof(tANI_U32);
1140 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1141 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1142 != eSIR_SUCCESS)
1143 {
1144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1145 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1146 goto handle_failure;
1147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001148 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1149 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001150 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1151 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1152 tlvStruct->length = sizeof(tANI_U32);
1153 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1154 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1155 != eSIR_SUCCESS)
1156 {
1157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1158 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1159 goto handle_failure;
1160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1162 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1164 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1168 != eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1172 goto handle_failure;
1173 }
1174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1177 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1181 != eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1185 goto handle_failure;
1186 }
1187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1190 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1194 != eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1198 goto handle_failure;
1199 }
1200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1203 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1211 goto handle_failure;
1212 }
1213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1216 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1217 tlvStruct->length = sizeof(tANI_U32);
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1220 != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1224 goto handle_failure;
1225 }
1226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001228 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1229 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1230 tlvStruct->length = sizeof(tANI_U32);
1231 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1232 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1233 != eSIR_SUCCESS)
1234 {
1235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1236 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1237 goto handle_failure;
1238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1240 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001241 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1242 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1243 tlvStruct->length = sizeof(tANI_U32);
1244 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1245 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1246 != eSIR_SUCCESS)
1247 {
1248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1249 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1250 goto handle_failure;
1251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1255 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1256 tlvStruct->length = sizeof(tANI_U32);
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1259 != eSIR_SUCCESS)
1260 {
1261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1262 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1263 goto handle_failure;
1264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1266 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001267 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1268 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1269 * into FW, so the parameters are added here.
1270 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001271 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1272 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1273 tlvStruct->length = sizeof(tANI_U32);
1274 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1275 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1276 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1277 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001285 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001292 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1293 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1294 tlvStruct->length = sizeof(tANI_U32);
1295 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1296 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1297 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1298 + sizeof(tHalCfg) + tlvStruct->length) ;
1299
1300 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1301 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1302 tlvStruct->length = sizeof(tANI_U32);
1303 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1304 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1305 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1306 + sizeof(tHalCfg) + tlvStruct->length) ;
1307
1308 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1309 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1310 tlvStruct->length = sizeof(tANI_U32);
1311 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1312 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1313 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1314 + sizeof(tHalCfg) + tlvStruct->length) ;
1315
1316 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1317 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1318 tlvStruct->length = sizeof(tANI_U32);
1319 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1320 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1321 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1322 + sizeof(tHalCfg) + tlvStruct->length) ;
1323
1324 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1325 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1326 tlvStruct->length = sizeof(tANI_U32);
1327 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1328 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1329 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1330 + sizeof(tHalCfg) + tlvStruct->length) ;
1331
1332 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1333 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1334 tlvStruct->length = sizeof(tANI_U32);
1335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1336 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1337 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1338 + sizeof(tHalCfg) + tlvStruct->length) ;
1339
1340 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1341 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1342 tlvStruct->length = sizeof(tANI_U32);
1343 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1344 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1345 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1346 + sizeof(tHalCfg) + tlvStruct->length) ;
1347
1348 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1349 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1350 tlvStruct->length = sizeof(tANI_U32);
1351 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1352 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1353 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1354 + sizeof(tHalCfg) + tlvStruct->length) ;
1355
1356 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1357 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1361 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1362 + sizeof(tHalCfg) + tlvStruct->length) ;
1363
1364 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1365 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1366 tlvStruct->length = sizeof(tANI_U32);
1367 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1368 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1370 + sizeof(tHalCfg) + tlvStruct->length) ;
1371
1372 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1373 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1374 tlvStruct->length = sizeof(tANI_U32);
1375 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1376 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1377 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1378 + sizeof(tHalCfg) + tlvStruct->length) ;
1379
1380 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1381 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1382 tlvStruct->length = sizeof(tANI_U32);
1383 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1384 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1385 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1386 + sizeof(tHalCfg) + tlvStruct->length) ;
1387
1388 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1389 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1390 tlvStruct->length = sizeof(tANI_U32);
1391 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1392 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
1395
Wilson Tsaof8b37942013-09-06 10:49:00 -07001396 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1397 {
1398 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1399 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1400 tlvStruct->length = sizeof(tANI_U32);
1401 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1402 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1407 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1408 tlvStruct->length = sizeof(tANI_U32);
1409 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1410 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1411 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1412 + sizeof(tHalCfg) + tlvStruct->length) ;
1413
1414 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1415 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1416 tlvStruct->length = sizeof(tANI_U32);
1417 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1418 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1419 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1420 + sizeof(tHalCfg) + tlvStruct->length) ;
1421
1422 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1423 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1424 tlvStruct->length = sizeof(tANI_U32);
1425 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1426 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1427 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1428 + sizeof(tHalCfg) + tlvStruct->length) ;
1429 }
1430
1431 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1432 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1433 tlvStruct->length = sizeof(tANI_U32);
1434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1435 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1436 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1437 + sizeof(tHalCfg) + tlvStruct->length) ;
1438
1439 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1440 {
1441 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1442 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1443 tlvStruct->length = sizeof(tANI_U32);
1444 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1445 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1446 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1447 + sizeof(tHalCfg) + tlvStruct->length) ;
1448 }
1449
1450 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1451 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1455 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1456 + sizeof(tHalCfg) + tlvStruct->length) ;
1457
Jeff Johnson32d95a32012-09-10 13:15:23 -07001458 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001459 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1460 tlvStruct->length = sizeof(tANI_U32);
1461 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1462 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1463 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1464 wcnssCompiledApiVersion.minor,
1465 wcnssCompiledApiVersion.version,
1466 wcnssCompiledApiVersion.revision);
1467 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1468 + sizeof(tHalCfg) + tlvStruct->length) ;
1469
Jeff Johnsond13512a2012-07-17 11:42:19 -07001470 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1471 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1472 tlvStruct->length = sizeof(tANI_U32);
1473 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1474 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1475 configDataValue ) != eSIR_SUCCESS)
1476 {
1477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1478 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1479 goto handle_failure;
1480 }
1481
1482 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1483 + sizeof(tHalCfg) + tlvStruct->length) ;
1484 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1485 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1486 tlvStruct->length = sizeof(tANI_U32);
1487 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1488 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1489 configDataValue ) != eSIR_SUCCESS)
1490 {
1491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1492 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1493 goto handle_failure;
1494 }
1495
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
1498
1499 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1500 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1501 tlvStruct->length = sizeof(tANI_U32);
1502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1503 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1504 != eSIR_SUCCESS)
1505 {
1506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1507 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1508 goto handle_failure;
1509 }
1510
1511 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1512 + sizeof(tHalCfg) + tlvStruct->length) ;
1513
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001514 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1515 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1516 tlvStruct->length = sizeof(tANI_U32);
1517 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1518 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1519 != eSIR_SUCCESS)
1520 {
1521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1522 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1523 goto handle_failure;
1524 }
1525
1526 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1527 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001528#ifdef WLAN_SOFTAP_VSTA_FEATURE
1529 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1530 tlvStruct->length = sizeof(tANI_U32);
1531 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1532 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1533 != eSIR_SUCCESS)
1534 {
1535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1536 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1537 goto handle_failure;
1538 }
1539
1540 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1541 + sizeof(tHalCfg) + tlvStruct->length) ;
1542#endif
1543
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001544 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1545 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1546 tlvStruct->length = sizeof(tANI_U32);
1547 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1548
1549 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1550 != eSIR_SUCCESS)
1551 {
1552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1553 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1554 goto handle_failure;
1555 }
1556
1557 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1558 + sizeof(tHalCfg) + tlvStruct->length) ;
1559
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301560/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1561 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1562 tlvStruct->length = sizeof(tANI_U32);
1563 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1564 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1565 configDataValue ) != eSIR_SUCCESS)
1566 {
1567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1568 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1569 goto handle_failure;
1570 }
1571
1572 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1573 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301574#ifdef FEATURE_WLAN_TDLS
1575 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1576 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1577 tlvStruct->length = sizeof(tANI_U32);
1578 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1579 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1580 configDataValue ) != eSIR_SUCCESS)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1583 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1584 goto handle_failure;
1585 }
1586 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1587 + sizeof(tHalCfg) + tlvStruct->length) ;
1588
1589 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1590 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1591 tlvStruct->length = sizeof(tANI_U32);
1592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1593 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1594 configDataValue ) != eSIR_SUCCESS)
1595 {
1596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1597 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1598 goto handle_failure;
1599 }
1600 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1601 + sizeof(tHalCfg) + tlvStruct->length) ;
1602 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1603 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1604 tlvStruct->length = sizeof(tANI_U32);
1605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1606 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1607 configDataValue ) != eSIR_SUCCESS)
1608 {
1609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1610 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1611 goto handle_failure;
1612 }
1613 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1614 + sizeof(tHalCfg) + tlvStruct->length) ;
1615 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1616 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1617 tlvStruct->length = sizeof(tANI_U32);
1618 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1619 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1620 configDataValue ) != eSIR_SUCCESS)
1621 {
1622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1623 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1624 goto handle_failure;
1625 }
1626 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1627 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301628 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1629 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1630 tlvStruct->length = sizeof(tANI_U32);
1631 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1632 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1633 configDataValue ) != eSIR_SUCCESS)
1634 {
1635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1636 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1637 goto handle_failure;
1638 }
1639 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1640 + sizeof(tHalCfg) + tlvStruct->length) ;
1641
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301642#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301643
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001644 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1645 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1646 tlvStruct->length = sizeof(tANI_U32);
1647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1648 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1649 configDataValue ) != eSIR_SUCCESS)
1650 {
1651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1652 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1653 goto handle_failure;
1654 }
1655
1656 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1657 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001658
1659 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1660 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1661 tlvStruct->length = sizeof(tANI_U32);
1662 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1663 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1664 != eSIR_SUCCESS)
1665 {
1666 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1667 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1668 goto handle_failure;
1669 }
1670 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1671 + sizeof(tHalCfg) + tlvStruct->length));
1672
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301673 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1674 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1675 tlvStruct->length = sizeof(tANI_U32);
1676 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1677 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1678 configDataValue ) != eSIR_SUCCESS)
1679 {
1680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1681 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1682 goto handle_failure;
1683 }
1684
1685 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1686 + sizeof(tHalCfg) + tlvStruct->length) ;
1687
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301688 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1689 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1690 tlvStruct->length = sizeof(tANI_U32);
1691 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1692 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1693 configDataValue ) != eSIR_SUCCESS)
1694 {
1695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1696 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1697 goto handle_failure;
1698 }
1699 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1700 + sizeof(tHalCfg) + tlvStruct->length) ;
1701
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301702 /* QWLAN_HAL_CFG_ATH_DISABLE */
1703 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1704 tlvStruct->length = sizeof(tANI_U32);
1705 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1706 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1707 configDataValue ) != eSIR_SUCCESS)
1708 {
1709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1710 "Failed to get value for WNI_CFG_ATH_DISABLE");
1711 goto handle_failure;
1712 }
1713 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1714 + sizeof(tHalCfg) + tlvStruct->length) ;
1715
c_hpothu6d7dc922013-12-02 12:36:41 +05301716 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1717 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1718 tlvStruct->length = sizeof(tANI_U32);
1719 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1720 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1721 configDataValue ) != eSIR_SUCCESS)
1722 {
1723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1724 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1725 goto handle_failure;
1726 }
1727 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1728 + sizeof(tHalCfg) + tlvStruct->length) ;
1729
1730 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1731 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1732 tlvStruct->length = sizeof(tANI_U32);
1733 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1734 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1735 configDataValue ) != eSIR_SUCCESS)
1736 {
1737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1738 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1739 goto handle_failure;
1740 }
1741 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1742 + sizeof(tHalCfg) + tlvStruct->length) ;
1743
1744 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1745 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1746 tlvStruct->length = sizeof(tANI_U32);
1747 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1748 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1749 configDataValue ) != eSIR_SUCCESS)
1750 {
1751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1752 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1753 goto handle_failure;
1754 }
1755 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1756 + sizeof(tHalCfg) + tlvStruct->length) ;
1757
1758 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1759 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1760 tlvStruct->length = sizeof(tANI_U32);
1761 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1762 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1763 configDataValue ) != eSIR_SUCCESS)
1764 {
1765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1766 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1767 goto handle_failure;
1768 }
1769 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1770 + sizeof(tHalCfg) + tlvStruct->length) ;
1771
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301772 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1773 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1774 tlvStruct->length = sizeof(tANI_U32);
1775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1776 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1777 configDataValue ) != eSIR_SUCCESS)
1778 {
1779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1780 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1781 goto handle_failure;
1782 }
1783 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1784 + sizeof(tHalCfg) + tlvStruct->length) ;
1785
1786 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1787 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1788 tlvStruct->length = sizeof(tANI_U32);
1789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1790 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1791 configDataValue ) != eSIR_SUCCESS)
1792 {
1793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1794 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1795 goto handle_failure;
1796 }
1797 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1798 + sizeof(tHalCfg) + tlvStruct->length) ;
1799
1800 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1801 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1802 tlvStruct->length = sizeof(tANI_U32);
1803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1804 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1805 configDataValue ) != eSIR_SUCCESS)
1806 {
1807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1808 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1809 goto handle_failure;
1810 }
1811 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1812 + sizeof(tHalCfg) + tlvStruct->length) ;
1813
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001814 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1815 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1816 tlvStruct->length = sizeof(tANI_U32);
1817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1818 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1819 configDataValue ) != eSIR_SUCCESS)
1820 {
1821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1822 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1823 goto handle_failure;
1824 }
1825 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1826 + sizeof(tHalCfg) + tlvStruct->length) ;
1827
c_hpothu5bd1ae42014-03-07 20:28:22 +05301828 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1829 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1830 tlvStruct->length = sizeof(tANI_U32);
1831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1832
1833 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1834 configDataValue ) != eSIR_SUCCESS)
1835 {
1836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1837 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1838 goto handle_failure;
1839 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301840 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1841 + sizeof(tHalCfg) + tlvStruct->length) ;
1842
1843 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1844 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1845 tlvStruct->length = sizeof(tANI_U32);
1846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1847
1848 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1849 configDataValue ) != eSIR_SUCCESS)
1850 {
1851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1852 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1853 goto handle_failure;
1854 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301855 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1856 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301857
c_hpothu2d0f1c42014-04-01 18:38:51 +05301858 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1859 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1860 tlvStruct->length = sizeof(tANI_U32);
1861 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1862
1863 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1864 configDataValue ) != eSIR_SUCCESS)
1865 {
1866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1867 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1868 goto handle_failure;
1869 }
1870 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1871 + sizeof(tHalCfg) + tlvStruct->length) ;
1872
1873 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1874 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1875 tlvStruct->length = sizeof(tANI_U32);
1876 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1877
1878 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1879 configDataValue ) != eSIR_SUCCESS)
1880 {
1881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1882 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1883 goto handle_failure;
1884 }
1885 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1886 + sizeof(tHalCfg) + tlvStruct->length) ;
1887
1888 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1889 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1890 tlvStruct->length = sizeof(tANI_U32);
1891 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1892
1893 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1894 configDataValue ) != eSIR_SUCCESS)
1895 {
1896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1897 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1898 goto handle_failure;
1899 }
1900 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1901 + sizeof(tHalCfg) + tlvStruct->length) ;
1902
1903 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1904 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1905 tlvStruct->length = sizeof(tANI_U32);
1906 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1907
1908 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1909 configDataValue ) != eSIR_SUCCESS)
1910 {
1911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1912 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1913 goto handle_failure;
1914 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301915 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1916 + sizeof(tHalCfg) + tlvStruct->length) ;
1917
Mihir Shetec34258c2014-07-30 17:50:27 +05301918 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1919 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1920 tlvStruct->length = sizeof(tANI_U32);
1921 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1922
1923 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1924 configDataValue ) != eSIR_SUCCESS)
1925 {
1926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1927 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1928 goto handle_failure;
1929 }
1930 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1931 + sizeof(tHalCfg) + tlvStruct->length) ;
1932
1933 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1934 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1935 tlvStruct->length = sizeof(tANI_U32);
1936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1937
1938 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1939 configDataValue ) != eSIR_SUCCESS)
1940 {
1941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1942 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1943 goto handle_failure;
1944 }
1945 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1946 + sizeof(tHalCfg) + tlvStruct->length) ;
1947
1948 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1949 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1950 tlvStruct->length = sizeof(tANI_U32);
1951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1952
1953 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1954 configDataValue ) != eSIR_SUCCESS)
1955 {
1956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1957 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1958 goto handle_failure;
1959 }
1960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1961 + sizeof(tHalCfg) + tlvStruct->length) ;
1962
1963 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1964 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1965 tlvStruct->length = sizeof(tANI_U32);
1966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1967
1968 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1969 configDataValue ) != eSIR_SUCCESS)
1970 {
1971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1972 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1973 goto handle_failure;
1974 }
1975 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1976 + sizeof(tHalCfg) + tlvStruct->length) ;
1977
1978 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1979 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1980 tlvStruct->length = sizeof(tANI_U32);
1981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1982
1983 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1984 configDataValue ) != eSIR_SUCCESS)
1985 {
1986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1987 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1988 goto handle_failure;
1989 }
1990 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1991 + sizeof(tHalCfg) + tlvStruct->length) ;
1992
1993 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
1994 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
1995 tlvStruct->length = sizeof(tANI_U32);
1996 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1997
1998 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
1999 configDataValue ) != eSIR_SUCCESS)
2000 {
2001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2002 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2003 goto handle_failure;
2004 }
2005 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2006 + sizeof(tHalCfg) + tlvStruct->length) ;
2007
2008 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2009 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2010 tlvStruct->length = sizeof(tANI_U32);
2011 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2012
2013 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2014 configDataValue ) != eSIR_SUCCESS)
2015 {
2016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2017 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2018 goto handle_failure;
2019 }
2020 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2021 + sizeof(tHalCfg) + tlvStruct->length) ;
2022
2023 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2024 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2025 tlvStruct->length = sizeof(tANI_U32);
2026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2027
2028 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2029 configDataValue ) != eSIR_SUCCESS)
2030 {
2031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2032 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2033 goto handle_failure;
2034 }
2035 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2036 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302037
2038 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2039 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2040 tlvStruct->length = sizeof(tANI_U32);
2041 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2042
2043 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2044 configDataValue ) != eSIR_SUCCESS)
2045 {
2046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2047 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2048 goto handle_failure;
2049 }
2050 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2051 + sizeof(tHalCfg) + tlvStruct->length) ;
2052
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302053 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2054 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2055 tlvStruct->length = sizeof(tANI_U32);
2056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2057
2058 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2059 configDataValue ) != eSIR_SUCCESS)
2060 {
2061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2062 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2063 goto handle_failure;
2064 }
2065 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2066 + sizeof(tHalCfg) + tlvStruct->length) ;
2067
2068
Jeff Johnson295189b2012-06-20 16:38:30 -07002069 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002070#ifdef WLAN_DEBUG
2071 {
2072 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002073 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2074 "****** Dumping CFG TLV ***** ");
2075 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2076 {
2077 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2078 "%02x %02x %02x %02x %02x %02x %02x %02x",
2079 tlvStructStart[i],
2080 tlvStructStart[i+1],
2081 tlvStructStart[i+2],
2082 tlvStructStart[i+3],
2083 tlvStructStart[i+4],
2084 tlvStructStart[i+5],
2085 tlvStructStart[i+6],
2086 tlvStructStart[i+7]);
2087 }
2088 /* Dump the bytes in the last line*/
2089 for (; i < wdiStartParams->usConfigBufferLen; i++)
2090 {
2091 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2092 "%02x ",tlvStructStart[i]);
2093 }
2094 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2095 "**************************** ");
2096 }
2097#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002098 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002099handle_failure:
2100 vos_mem_free(configParam);
2101 return VOS_STATUS_E_FAILURE;
2102}
Jeff Johnson295189b2012-06-20 16:38:30 -07002103/*
2104 * FUNCTION: WDA_wdiCompleteCB
2105 * call the voss call back function
2106 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002107void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002108{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002109 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2110 tWDA_CbContext *wdaContext;
2111
2112 if(NULL == pWdaParams)
2113 {
2114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002115 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002116 VOS_ASSERT(0) ;
2117 return ;
2118 }
2119
2120 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2121
Jeff Johnson295189b2012-06-20 16:38:30 -07002122 if (NULL == wdaContext)
2123 {
2124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002125 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002126 return ;
2127 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002128
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002130 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002134 vos_mem_free(pWdaParams);
2135
Jeff Johnson295189b2012-06-20 16:38:30 -07002136 if(WDI_STATUS_SUCCESS != status)
2137 {
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2139 "WDI stop callback returned failure" );
2140 VOS_ASSERT(0) ;
2141 }
2142 else
2143 {
2144 wdaContext->wdaState = WDA_STOP_STATE;
2145 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002146
Leo Chang9d76f622013-08-23 16:34:52 -07002147 /* FTM Driver stop procedure should be synced.
2148 * Stop and Close will happen on same context */
2149 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2150 {
2151 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2152 {
2153 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2154 "%s: FTM Stop Event Set Fail", __func__);
2155 VOS_ASSERT(0);
2156 }
2157 }
2158
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002160 vos_WDAComplete_cback(wdaContext->pVosContext);
2161
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 return ;
2163}
Jeff Johnson295189b2012-06-20 16:38:30 -07002164/*
2165 * FUNCTION: WDA_stop
2166 * call WDI_stop
2167 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002168VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2169{
2170 WDI_Status wdiStatus;
2171 VOS_STATUS status = VOS_STATUS_SUCCESS;
2172 WDI_StopReqParamsType *wdiStopReq;
2173 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002174 tWDA_ReqParams *pWdaParams ;
2175
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 if (NULL == pWDA)
2177 {
2178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002179 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 VOS_ASSERT(0);
2181 return VOS_STATUS_E_FAILURE;
2182 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002183 if (pWDA->wdiFailed == true)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002186 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002187 return VOS_STATUS_E_ALREADY;
2188 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002189
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 /* FTM mode stay START_STATE */
2191 if( (WDA_READY_STATE != pWDA->wdaState) &&
2192 (WDA_INIT_STATE != pWDA->wdaState) &&
2193 (WDA_START_STATE != pWDA->wdaState) )
2194 {
2195 VOS_ASSERT(0);
2196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 wdiStopReq = (WDI_StopReqParamsType *)
2198 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2199 if(NULL == wdiStopReq)
2200 {
2201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 VOS_ASSERT(0);
2204 return VOS_STATUS_E_NOMEM;
2205 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002206
Jeff Johnson295189b2012-06-20 16:38:30 -07002207 wdiStopReq->wdiStopReason = reason;
2208 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002209
2210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2211 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002212 {
2213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002214 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002215 VOS_ASSERT(0);
2216 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002217 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002219
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002220 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2221 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 {
2223 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002224 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002226
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002227 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2228 pWdaParams->wdaMsgParam = NULL;
2229 pWdaParams->pWdaContext = pWDA;
2230
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 /* call WDI stop */
2232 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002233 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2234
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2236 {
2237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2238 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2240 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 status = VOS_STATUS_E_FAILURE;
2242 }
Leo Chang9d76f622013-08-23 16:34:52 -07002243
2244 /* FTM Driver stop procedure should be synced.
2245 * Stop and Close will happen on same context */
2246 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2247 {
2248 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2249 WDI_RESPONSE_TIMEOUT);
2250 if (status != VOS_STATUS_SUCCESS)
2251 {
2252 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2253 "%s: FTM Stop Timepoout", __func__);
2254 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002255 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302256 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002258 return status;
2259}
Jeff Johnson295189b2012-06-20 16:38:30 -07002260/*
2261 * FUNCTION: WDA_close
2262 * call WDI_close and free the WDA context
2263 */
2264VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2265{
Jeff Johnson43971f52012-07-17 12:26:56 -07002266 VOS_STATUS status = VOS_STATUS_SUCCESS;
2267 WDI_Status wstatus;
2268 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002269 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002270 if (NULL == wdaContext)
2271 {
2272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002273 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002274 return VOS_STATUS_E_FAILURE;
2275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2277 (WDA_STOP_STATE != wdaContext->wdaState))
2278 {
2279 VOS_ASSERT(0);
2280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002282 wstatus = WDI_Close();
2283 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002284 {
2285 status = VOS_STATUS_E_FAILURE;
2286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002287 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002289 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2290 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 {
2292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002293 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 status = VOS_STATUS_E_FAILURE;
2295 }
2296
Jeff Johnson43971f52012-07-17 12:26:56 -07002297 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002298 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 {
2300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002301 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 status = VOS_STATUS_E_FAILURE;
2303 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002304 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
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->waitOnWdiIndicationCallBack);
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 Johnson295189b2012-06-20 16:38:30 -07002318 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002319 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002320 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002321 {
2322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2323 "error in WDA close " );
2324 status = VOS_STATUS_E_FAILURE;
2325 }
2326 return status;
2327}
Jeff Johnson295189b2012-06-20 16:38:30 -07002328/*
2329 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2330 * returns 1 if the compiled version is greater than or equal to the input version
2331 */
2332
2333uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2334{
2335 VOS_STATUS status = VOS_STATUS_SUCCESS;
2336 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2337 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002339 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2340 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2341 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2342 (compiledVersion.revision >= revision)))
2343 return 1;
2344 else
2345 return 0;
2346}
Jeff Johnson295189b2012-06-20 16:38:30 -07002347/*
2348 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2349 * returns 1 if the compiled version is greater than or equal to the input version
2350 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002351uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2352{
2353 VOS_STATUS status = VOS_STATUS_SUCCESS;
2354 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2355 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002356 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2358 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2359 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2360 (reportedVersion.revision >= revision)))
2361 return 1;
2362 else
2363 return 0;
2364}
Jeff Johnson295189b2012-06-20 16:38:30 -07002365/*
2366 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2367 * Returns the version of the WCNSS WLAN API with which the HOST
2368 * device driver was compiled
2369 */
2370VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2371 tSirVersionType *pVersion)
2372{
2373 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002374 if ((NULL == pvosGCtx) || (NULL == pVersion))
2375 {
2376 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002377 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002378 VOS_ASSERT(0);
2379 return VOS_STATUS_E_FAILURE;
2380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2382 if (NULL == pWDA )
2383 {
2384 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002385 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 VOS_ASSERT(0);
2387 return VOS_STATUS_E_FAILURE;
2388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002389 *pVersion = pWDA->wcnssWlanCompiledVersion;
2390 return VOS_STATUS_SUCCESS;
2391}
Jeff Johnson295189b2012-06-20 16:38:30 -07002392/*
2393 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2394 * Returns the version of the WCNSS WLAN API with which the WCNSS
2395 * device driver was compiled
2396 */
2397VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2398 tSirVersionType *pVersion)
2399{
2400 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002401 if ((NULL == pvosGCtx) || (NULL == pVersion))
2402 {
2403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002404 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 VOS_ASSERT(0);
2406 return VOS_STATUS_E_FAILURE;
2407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2409 if (NULL == pWDA )
2410 {
2411 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002412 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002413 VOS_ASSERT(0);
2414 return VOS_STATUS_E_FAILURE;
2415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002416 *pVersion = pWDA->wcnssWlanReportedVersion;
2417 return VOS_STATUS_SUCCESS;
2418}
Jeff Johnson295189b2012-06-20 16:38:30 -07002419/*
2420 * FUNCTION: WDA_GetWcnssSoftwareVersion
2421 * Returns the WCNSS Software version string
2422 */
2423VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2424 tANI_U8 *pVersion,
2425 tANI_U32 versionBufferSize)
2426{
2427 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002429 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002430 if ((NULL == pvosGCtx) || (NULL == pVersion))
2431 {
2432 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002433 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 VOS_ASSERT(0);
2435 return VOS_STATUS_E_FAILURE;
2436 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2438 if (NULL == pWDA )
2439 {
2440 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002441 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 VOS_ASSERT(0);
2443 return VOS_STATUS_E_FAILURE;
2444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002445 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2446 return VOS_STATUS_SUCCESS;
2447}
Jeff Johnson295189b2012-06-20 16:38:30 -07002448/*
2449 * FUNCTION: WDA_GetWcnssHardwareVersion
2450 * Returns the WCNSS Hardware version string
2451 */
2452VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2453 tANI_U8 *pVersion,
2454 tANI_U32 versionBufferSize)
2455{
2456 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002457 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002458 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002459 if ((NULL == pvosGCtx) || (NULL == pVersion))
2460 {
2461 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002462 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 VOS_ASSERT(0);
2464 return VOS_STATUS_E_FAILURE;
2465 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2467 if (NULL == pWDA )
2468 {
2469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002470 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002471 VOS_ASSERT(0);
2472 return VOS_STATUS_E_FAILURE;
2473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2475 return VOS_STATUS_SUCCESS;
2476}
Jeff Johnson295189b2012-06-20 16:38:30 -07002477/*
2478 * FUNCTION: WDA_WniCfgDnld
2479 * Trigger CFG Download
2480 */
2481VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2482{
2483 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302484 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002485
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 if (NULL == pMac )
2487 {
2488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002489 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 VOS_ASSERT(0);
2491 return VOS_STATUS_E_FAILURE;
2492 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302493 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 return vosStatus;
2495}
Jeff Johnson295189b2012-06-20 16:38:30 -07002496/* -----------------------------------------------------------------
2497 * WDI interface
2498 * -----------------------------------------------------------------
2499 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002500/*
2501 * FUNCTION: WDA_suspendDataTxCallback
2502 * call back function called from TL after suspend Transmission
2503 */
2504VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2505 v_U8_t* ucSTAId,
2506 VOS_STATUS vosStatus)
2507{
2508 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002510 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 if (NULL == pWDA )
2512 {
2513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002514 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 VOS_ASSERT(0);
2516 return VOS_STATUS_E_FAILURE;
2517 }
2518 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2519 {
2520 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2521 }
2522 else
2523 {
2524 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 /* Trigger the event to bring the WDA TL suspend function to come
2527 * out of wait*/
2528 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2529 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2530 {
2531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002532 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 /* If TL suspended had timedout before this callback was called, resume back
2535 * TL.*/
2536 if (pWDA->txSuspendTimedOut)
2537 {
2538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002539 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 WDA_ResumeDataTx(pWDA);
2541 pWDA->txSuspendTimedOut = FALSE;
2542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 return VOS_STATUS_SUCCESS;
2544}
Jeff Johnson295189b2012-06-20 16:38:30 -07002545/*
2546 * FUNCTION: WDA_suspendDataTx
2547 * Update TL to suspend the data Transmission
2548 */
2549VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2550{
2551 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2552 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002553
2554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002555 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002556 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 if (pWDA->txSuspendTimedOut)
2558 {
2559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002560 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 return status;
2562 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 /* Reset the event to be not signalled */
2564 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2565 if(!VOS_IS_STATUS_SUCCESS(status))
2566 {
2567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002568 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 return VOS_STATUS_E_FAILURE;
2570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002572 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 WDA_SuspendDataTxCallback);
2574 if(status != VOS_STATUS_SUCCESS)
2575 {
2576 return status;
2577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 /* Wait for the event to be set by the TL, to get the response of
2579 * suspending the TX queues, this event should be set by the Callback
2580 * function called by TL*/
2581 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2582 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2583 if(!VOS_IS_STATUS_SUCCESS(status))
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2586 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002587 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 /* Set this flag to true when TL suspend times out, so that when TL
2589 * suspend eventually happens and calls the callback, TL can be resumed
2590 * right away by looking at this flag when true.*/
2591 pWDA->txSuspendTimedOut = TRUE;
2592 }
2593 else
2594 {
2595 pWDA->txSuspendTimedOut = FALSE;
2596 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002597 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2598 {
2599 status = VOS_STATUS_SUCCESS;
2600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 return status;
2602}
Jeff Johnson295189b2012-06-20 16:38:30 -07002603/*
2604 * FUNCTION: WDA_resumeDataTx
2605 * Update TL to resume the data Transmission
2606 */
2607VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2608{
2609 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002610
2611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002613
2614 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 return status;
2616}
Jeff Johnson295189b2012-06-20 16:38:30 -07002617/*
2618 * FUNCTION: WDA_InitScanReqCallback
2619 * Trigger Init SCAN callback
2620 */
2621void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2622{
2623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2624 tWDA_CbContext *pWDA;
2625 tInitScanParams *pWDA_ScanParam ;
2626 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002628 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 if(NULL == pWdaParams)
2630 {
2631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002632 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 VOS_ASSERT(0) ;
2634 return ;
2635 }
2636 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2637 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 if(NULL == pWDA_ScanParam)
2639 {
2640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002641 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002642 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2644 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 return ;
2646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002647 if(WDI_STATUS_SUCCESS != wdiStatus)
2648 {
2649 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 if(VOS_STATUS_SUCCESS != status)
2651 {
2652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002653 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 }
2655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 /* free WDI command buffer */
2657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002659
Jeff Johnson295189b2012-06-20 16:38:30 -07002660
2661 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002662 /* without converting the Status to Failure or Success Just
2663 pass the same status to lim */
2664 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 /* send SCAN RSP message back to PE */
2666 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 return ;
2668}
2669
2670/*
2671 * FUNCTION: WDA_ProcessInitScanReq
2672 * Trigger Init SCAN in DAL
2673 */
2674VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2675 tInitScanParams *initScanParams)
2676{
2677 WDI_Status status = WDI_STATUS_SUCCESS ;
2678 WDI_InitScanReqParamsType *wdiInitScanParam =
2679 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2680 sizeof(WDI_InitScanReqParamsType)) ;
2681 tWDA_ReqParams *pWdaParams;
2682 tANI_U8 i = 0;
2683
2684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002685 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002686 if(NULL == wdiInitScanParam)
2687 {
2688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002689 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 VOS_ASSERT(0);
2691 return VOS_STATUS_E_NOMEM;
2692 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2694 if(NULL == pWdaParams)
2695 {
2696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 VOS_ASSERT(0);
2699 vos_mem_free(wdiInitScanParam);
2700 return VOS_STATUS_E_NOMEM;
2701 }
2702
2703 /* Copy init Scan params to WDI structure */
2704 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2705 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2706 sizeof(tSirMacAddr)) ;
2707 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2708 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2709 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002710 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2711 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2713 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2715 {
2716 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2717 initScanParams->scanEntry.bssIdx[i] ;
2718 }
2719
2720 /* if Frame length, copy macMgmtHdr or WDI structure */
2721 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2722 {
2723 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2724 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2725 }
2726 wdiInitScanParam->wdiReqStatusCB = NULL ;
2727
Jeff Johnson295189b2012-06-20 16:38:30 -07002728 /* Store Init Req pointer, as this will be used for response */
2729 pWdaParams->pWdaContext = pWDA;
2730 pWdaParams->wdaMsgParam = initScanParams;
2731 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 /* first try to suspend TX */
2733 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 if(WDI_STATUS_SUCCESS != status)
2735 {
2736 goto handleWdiFailure;
2737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 /* call DAL API to pass init scan request to DAL */
2739 status = WDI_InitScanReq(wdiInitScanParam,
2740 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 if(IS_WDI_STATUS_FAILURE(status))
2742 {
2743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2744 "error in WDA Init Scan, Resume Tx " );
2745 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 VOS_ASSERT(0) ;
2747
2748 goto handleWdiFailure;
2749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002751handleWdiFailure:
2752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2753 "Failure in WDI Api, free all the memory " );
2754 /* free WDI command buffer */
2755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2756 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 /* send Failure to PE */
2758 initScanParams->status = eSIR_FAILURE ;
2759 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 return CONVERT_WDI2VOS_STATUS(status) ;
2761}
2762
Jeff Johnson295189b2012-06-20 16:38:30 -07002763/*
2764 * FUNCTION: WDA_StartScanReqCallback
2765 * send Start SCAN RSP back to PE
2766 */
2767void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2768 void* pUserData)
2769{
2770 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2771 tWDA_CbContext *pWDA;
2772 tStartScanParams *pWDA_ScanParam;
2773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002774 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 if(NULL == pWdaParams)
2776 {
2777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002778 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 VOS_ASSERT(0) ;
2780 return ;
2781 }
2782 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2783 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 if(NULL == pWDA_ScanParam)
2785 {
2786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002787 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002789 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 return ;
2791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2793 {
2794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002795 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002797 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 return ;
2799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2801 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002802
Jeff Johnson295189b2012-06-20 16:38:30 -07002803
2804 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002805 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002806 /* send SCAN RSP message back to PE */
2807 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 return ;
2809}
2810
Jeff Johnson295189b2012-06-20 16:38:30 -07002811/*
2812 * FUNCTION: WDA_ProcessStartScanReq
2813 * Trigger start SCAN in WDI
2814 */
2815VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2816 tStartScanParams *startScanParams)
2817{
2818 WDI_Status status = WDI_STATUS_SUCCESS;
2819 WDI_StartScanReqParamsType *wdiStartScanParams =
2820 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2821 sizeof(WDI_StartScanReqParamsType)) ;
2822 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002824 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 if(NULL == wdiStartScanParams)
2826 {
2827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 VOS_ASSERT(0);
2830 return VOS_STATUS_E_NOMEM;
2831 }
2832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2833 if(NULL == pWdaParams)
2834 {
2835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 VOS_ASSERT(0);
2838 vos_mem_free(wdiStartScanParams);
2839 return VOS_STATUS_E_NOMEM;
2840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 /* Copy init Scan params to WDI structure */
2842 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2843 wdiStartScanParams->wdiReqStatusCB = NULL ;
2844
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 /* Store Init Req pointer, as this will be used for response */
2846 /* store Params pass it to WDI */
2847 pWdaParams->pWdaContext = pWDA;
2848 pWdaParams->wdaMsgParam = startScanParams;
2849 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 /* call DAL API to pass init scan request to DAL */
2851 status = WDI_StartScanReq(wdiStartScanParams,
2852 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 /* failure returned by WDI API */
2854 if(IS_WDI_STATUS_FAILURE(status))
2855 {
2856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2857 "Failure in Start Scan WDI API, free all the memory "
2858 "It should be due to previous abort scan." );
2859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2860 vos_mem_free(pWdaParams) ;
2861 startScanParams->status = eSIR_FAILURE ;
2862 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 return CONVERT_WDI2VOS_STATUS(status) ;
2865}
Jeff Johnson295189b2012-06-20 16:38:30 -07002866/*
2867 * FUNCTION: WDA_EndScanReqCallback
2868 * END SCAN callback
2869 */
2870void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2871{
2872 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2873 tWDA_CbContext *pWDA;
2874 tEndScanParams *endScanParam;
2875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002876 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 if(NULL == pWdaParams)
2878 {
2879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002880 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002881 VOS_ASSERT(0) ;
2882 return ;
2883 }
2884 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2885 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 if(NULL == endScanParam)
2887 {
2888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002889 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002890 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2892 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 return ;
2894 }
2895
2896 /* Free WDI command buffer */
2897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2898 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002900 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 /* send response back to PE */
2902 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2903 return ;
2904}
2905
Jeff Johnson295189b2012-06-20 16:38:30 -07002906/*
2907 * FUNCTION: WDA_ProcessEndScanReq
2908 * Trigger END SCAN in WDI
2909 */
2910VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2911 tEndScanParams *endScanParams)
2912{
2913 WDI_Status status = WDI_STATUS_SUCCESS;
2914 WDI_EndScanReqParamsType *wdiEndScanParams =
2915 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2916 sizeof(WDI_EndScanReqParamsType)) ;
2917 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002919 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 if(NULL == wdiEndScanParams)
2921 {
2922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002923 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 VOS_ASSERT(0);
2925 return VOS_STATUS_E_NOMEM;
2926 }
2927 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2928 if(NULL == pWdaParams)
2929 {
2930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 VOS_ASSERT(0);
2933 vos_mem_free(wdiEndScanParams);
2934 return VOS_STATUS_E_NOMEM;
2935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 /* Copy init Scan params to WDI structure */
2937 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2938 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 /* Store Init Req pointer, as this will be used for response */
2940 /* store Params pass it to WDI */
2941 pWdaParams->pWdaContext = pWDA;
2942 pWdaParams->wdaMsgParam = endScanParams;
2943 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 /* call DAL API to pass init scan request to DAL */
2945 status = WDI_EndScanReq(wdiEndScanParams,
2946 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 if(IS_WDI_STATUS_FAILURE(status))
2948 {
2949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2950 "Failure in End Scan WDI API, free all the memory "
2951 "It should be due to previous abort scan." );
2952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2953 vos_mem_free(pWdaParams) ;
2954 endScanParams->status = eSIR_FAILURE ;
2955 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 return CONVERT_WDI2VOS_STATUS(status) ;
2958}
Jeff Johnson295189b2012-06-20 16:38:30 -07002959/*
2960 * FUNCTION: WDA_FinishScanReqCallback
2961 * Trigger Finish SCAN callback
2962 */
2963void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2964{
2965 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2966 tWDA_CbContext *pWDA;
2967 tFinishScanParams *finishScanParam;
2968 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002970 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 if(NULL == pWdaParams)
2972 {
2973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002974 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 VOS_ASSERT(0) ;
2976 return ;
2977 }
2978
2979 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2980 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 if(NULL == finishScanParam)
2982 {
2983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002984 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002986 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2987 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 return ;
2989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2991 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 /*
2993 * Now Resume TX, if we reached here means, TX is already suspended, we
2994 * have to resume it unconditionaly
2995 */
2996 status = WDA_ResumeDataTx(pWDA) ;
2997
2998 if(VOS_STATUS_SUCCESS != status)
2999 {
3000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003001 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003002 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003003 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3005 return ;
3006}
Jeff Johnson295189b2012-06-20 16:38:30 -07003007/*
3008 * FUNCTION: WDA_ProcessFinshScanReq
3009 * Trigger Finish SCAN in WDI
3010 */
3011VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3012 tFinishScanParams *finishScanParams)
3013{
3014 WDI_Status status = WDI_STATUS_SUCCESS;
3015 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3016 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3017 sizeof(WDI_FinishScanReqParamsType)) ;
3018 tWDA_ReqParams *pWdaParams ;
3019 tANI_U8 i = 0;
3020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003021 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 if(NULL == wdiFinishScanParams)
3023 {
3024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 VOS_ASSERT(0);
3027 return VOS_STATUS_E_NOMEM;
3028 }
3029 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3030 if(NULL == pWdaParams)
3031 {
3032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003034 VOS_ASSERT(0);
3035 vos_mem_free(wdiFinishScanParams);
3036 return VOS_STATUS_E_NOMEM;
3037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 /* Copy init Scan params to WDI structure */
3039 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3040 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3041 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3043 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3044 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3045 finishScanParams->frameLength ;
3046 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3047 finishScanParams->currentOperChannel ;
3048 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3049 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3050 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3052 {
3053 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3054 finishScanParams->scanEntry.bssIdx[i] ;
3055 }
3056
3057
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 /* if Frame length, copy macMgmtHdr ro WDI structure */
3059 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3060 {
3061 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3062 &finishScanParams->macMgmtHdr,
3063 sizeof(WDI_MacMgmtHdr)) ;
3064 }
3065 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 /* Store Init Req pointer, as this will be used for response */
3067 /* store Params pass it to WDI */
3068 pWdaParams->pWdaContext = pWDA;
3069 pWdaParams->wdaMsgParam = finishScanParams;
3070 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 /* call DAL API to pass init scan request to DAL */
3072 status = WDI_FinishScanReq(wdiFinishScanParams,
3073 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003074
Jeff Johnson295189b2012-06-20 16:38:30 -07003075
3076 /*
3077 * WDI API returns failure..
3078 */
3079 if(IS_WDI_STATUS_FAILURE( status))
3080 {
3081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3082 "Failure in Finish Scan WDI API, free all the memory " );
3083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3084 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003085 finishScanParams->status = eSIR_FAILURE ;
3086 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 return CONVERT_WDI2VOS_STATUS(status) ;
3089}
Jeff Johnson295189b2012-06-20 16:38:30 -07003090/*---------------------------------------------------------------------
3091 * ASSOC API's
3092 *---------------------------------------------------------------------
3093 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003094/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303095 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 * Trigger Init SCAN callback
3097 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303098void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003099{
3100 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3101 tWDA_CbContext *pWDA;
3102 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003104 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 if(NULL == pWdaParams)
3106 {
3107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003108 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 VOS_ASSERT(0) ;
3110 return ;
3111 }
3112 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3113 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3115 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 /* reset macBSSID */
3117 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 /* reset macSTASelf */
3119 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003120 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 return ;
3123}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303124
3125/*
3126 * FUNCTION: WDA_JoinReqCallback
3127 * Free memory and send SWITCH CHANNEL RSP back to PE.
3128 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3129 */
3130void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3131{
3132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3133 tWDA_CbContext *pWDA;
3134 tSwitchChannelParams *joinReqParam;
3135
3136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3137 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3138
3139 if(NULL == pWdaParams)
3140 {
3141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3142 "%s: pWdaParams received NULL", __func__);
3143 VOS_ASSERT(0);
3144 return;
3145 }
3146
3147 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3148 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3149 joinReqParam->status = wdiStatus;
3150
3151 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3152 {
3153 /* reset macBSSID */
3154 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3155 /* reset macSTASelf */
3156 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3157
3158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3159 vos_mem_free(pWdaParams);
3160 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3161 }
3162
3163 return;
3164}
3165
Jeff Johnson295189b2012-06-20 16:38:30 -07003166/*
3167 * FUNCTION: WDA_ProcessJoinReq
3168 * Trigger Join REQ in WDI
3169 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003170VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3171 tSwitchChannelParams* joinReqParam)
3172{
3173 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 WDI_JoinReqParamsType *wdiJoinReqParam =
3175 (WDI_JoinReqParamsType *)vos_mem_malloc(
3176 sizeof(WDI_JoinReqParamsType)) ;
3177 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003179 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 if(NULL == wdiJoinReqParam)
3181 {
3182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003185 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 return VOS_STATUS_E_NOMEM;
3187 }
3188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3189 if(NULL == pWdaParams)
3190 {
3191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 VOS_ASSERT(0);
3194 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003195 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 return VOS_STATUS_E_NOMEM;
3197 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003198
3199 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3200 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3201 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3202 {
3203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3204 "%s: received join request when BSSID or self-STA is NULL "
3205 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003207 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3208 VOS_ASSERT(0);
3209 vos_mem_free(wdiJoinReqParam);
3210 vos_mem_free(pWdaParams);
3211 joinReqParam->status = eSIR_FAILURE ;
3212 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3213 return VOS_STATUS_E_INVAL;
3214 }
3215
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 /* copy the BSSID for pWDA */
3217 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3218 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3220 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3222 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003223#ifdef WLAN_FEATURE_VOWIFI
3224 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3225 joinReqParam->maxTxPower ;
3226#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3228 joinReqParam->localPowerConstraint ;
3229#endif
3230 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3231 joinReqParam->secondaryChannelOffset ;
3232 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3233
Sachin Ahuja935eda782014-07-30 14:57:41 +05303234 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3235 wdiJoinReqParam->pUserData = pWdaParams;
3236
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 /* Store Init Req pointer, as this will be used for response */
3238 /* store Params pass it to WDI */
3239 pWdaParams->pWdaContext = pWDA;
3240 pWdaParams->wdaMsgParam = joinReqParam;
3241 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303243 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 if(IS_WDI_STATUS_FAILURE(status))
3245 {
3246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3247 "Failure in Join WDI API, free all the memory " );
3248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3249 vos_mem_free(pWdaParams) ;
3250 joinReqParam->status = eSIR_FAILURE ;
3251 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 return CONVERT_WDI2VOS_STATUS(status) ;
3254}
Jeff Johnson295189b2012-06-20 16:38:30 -07003255/*
3256 * FUNCTION: WDA_SwitchChannelReqCallback
3257 * send Switch channel RSP back to PE
3258 */
3259void WDA_SwitchChannelReqCallback(
3260 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3261{
3262 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3263 tWDA_CbContext *pWDA;
3264 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003266 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 if(NULL == pWdaParams)
3268 {
3269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003270 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 VOS_ASSERT(0) ;
3272 return ;
3273 }
3274 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3275 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3276
3277#ifdef WLAN_FEATURE_VOWIFI
3278 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3279#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3281 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003283 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 return ;
3286}
Jeff Johnson295189b2012-06-20 16:38:30 -07003287/*
3288 * FUNCTION: WDA_ProcessChannelSwitchReq
3289 * Request to WDI to switch channel REQ params.
3290 */
3291VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3292 tSwitchChannelParams *pSwitchChanParams)
3293{
3294 WDI_Status status = WDI_STATUS_SUCCESS ;
3295 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3296 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3297 sizeof(WDI_SwitchChReqParamsType)) ;
3298 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003300 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 if(NULL == wdiSwitchChanParam)
3302 {
3303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 VOS_ASSERT(0);
3306 return VOS_STATUS_E_NOMEM;
3307 }
3308 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3309 if(NULL == pWdaParams)
3310 {
3311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003312 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 VOS_ASSERT(0);
3314 vos_mem_free(wdiSwitchChanParam);
3315 return VOS_STATUS_E_NOMEM;
3316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3318#ifndef WLAN_FEATURE_VOWIFI
3319 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3320 pSwitchChanParams->localPowerConstraint;
3321#endif
3322 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3323 pSwitchChanParams->secondaryChannelOffset;
3324 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 /* Store req pointer, as this will be used for response */
3326 /* store Params pass it to WDI */
3327 pWdaParams->pWdaContext = pWDA;
3328 pWdaParams->wdaMsgParam = pSwitchChanParams;
3329 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003330#ifdef WLAN_FEATURE_VOWIFI
3331 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3332 = pSwitchChanParams->maxTxPower;
3333 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3334 pSwitchChanParams ->selfStaMacAddr,
3335 sizeof(tSirMacAddr));
3336#endif
3337 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3338 pSwitchChanParams->bssId,
3339 sizeof(tSirMacAddr));
3340
3341 status = WDI_SwitchChReq(wdiSwitchChanParam,
3342 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 if(IS_WDI_STATUS_FAILURE(status))
3344 {
3345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3346 "Failure in process channel switch Req WDI API, free all the memory " );
3347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3348 vos_mem_free(pWdaParams) ;
3349 pSwitchChanParams->status = eSIR_FAILURE ;
3350 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003352 return CONVERT_WDI2VOS_STATUS(status) ;
3353}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003354
3355/*
3356 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3357 * send Switch channel RSP back to PE
3358 */
3359void WDA_SwitchChannelReqCallback_V1(
3360 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3361 void* pUserData)
3362{
3363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3364 tWDA_CbContext *pWDA;
3365 tSwitchChannelParams *pSwitchChanParams;
3366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3367 "<------ %s " ,__func__);
3368
3369 if (NULL == pWdaParams)
3370 {
3371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3372 "%s: pWdaParams received NULL", __func__);
3373 VOS_ASSERT(0);
3374 return ;
3375 }
3376 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3377 pSwitchChanParams =
3378 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3379 pSwitchChanParams->channelSwitchSrc =
3380 wdiSwitchChanRsp->channelSwitchSrc;
3381#ifdef WLAN_FEATURE_VOWIFI
3382 pSwitchChanParams->txMgmtPower =
3383 wdiSwitchChanRsp->ucTxMgmtPower;
3384#endif
3385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3386 vos_mem_free(pWdaParams);
3387 pSwitchChanParams->status =
3388 wdiSwitchChanRsp->wdiStatus ;
3389 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3390 (void *)pSwitchChanParams , 0);
3391 return;
3392}
3393
3394/*
3395 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3396 * Request to WDI to switch channel REQ params.
3397 */
3398VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3399 tSwitchChannelParams *pSwitchChanParams)
3400{
3401 WDI_Status status = WDI_STATUS_SUCCESS ;
3402 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3403 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3404 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3405 tWDA_ReqParams *pWdaParams ;
3406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3407 "------> %s " ,__func__);
3408 if (NULL == wdiSwitchChanParam)
3409 {
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3411 "%s: VOS MEM Alloc Failure", __func__);
3412 VOS_ASSERT(0);
3413 return VOS_STATUS_E_NOMEM;
3414 }
3415 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3416 if (NULL == pWdaParams)
3417 {
3418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3419 "%s: VOS MEM Alloc Failure", __func__);
3420 VOS_ASSERT(0);
3421 vos_mem_free(wdiSwitchChanParam);
3422 return VOS_STATUS_E_NOMEM;
3423 }
3424 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3425 pSwitchChanParams->channelSwitchSrc;
3426
3427 wdiSwitchChanParam->wdiChInfo.ucChannel =
3428 pSwitchChanParams->channelNumber;
3429#ifndef WLAN_FEATURE_VOWIFI
3430 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3431 pSwitchChanParams->localPowerConstraint;
3432#endif
3433 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3434 pSwitchChanParams->secondaryChannelOffset;
3435 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3436 /* Store req pointer, as this will be used for response */
3437 /* store Params pass it to WDI */
3438 pWdaParams->pWdaContext = pWDA;
3439 pWdaParams->wdaMsgParam = pSwitchChanParams;
3440 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3441#ifdef WLAN_FEATURE_VOWIFI
3442 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3443 pSwitchChanParams->maxTxPower;
3444 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3445 pSwitchChanParams ->selfStaMacAddr,
3446 sizeof(tSirMacAddr));
3447#endif
3448 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3449 pSwitchChanParams->bssId,
3450 sizeof(tSirMacAddr));
3451
3452 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3453 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3454 pWdaParams);
3455 if (IS_WDI_STATUS_FAILURE(status))
3456 {
3457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3458 "Failure in process channel switch Req WDI "
3459 "API, free all the memory " );
3460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3461 vos_mem_free(pWdaParams) ;
3462 pSwitchChanParams->status = eSIR_FAILURE ;
3463 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3464 (void *)pSwitchChanParams, 0) ;
3465 }
3466 return CONVERT_WDI2VOS_STATUS(status) ;
3467}
3468
Jeff Johnson295189b2012-06-20 16:38:30 -07003469/*
3470 * FUNCTION: WDA_ConfigBssReqCallback
3471 * config BSS Req Callback, called by WDI
3472 */
3473void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3474 ,void* pUserData)
3475{
3476 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3477 tWDA_CbContext *pWDA;
3478 tAddBssParams *configBssReqParam;
3479 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003481 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003482 if(NULL == pWdaParams)
3483 {
3484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003485 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 VOS_ASSERT(0) ;
3487 return ;
3488 }
3489 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3490 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3491 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003492 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003493 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3495 {
3496 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3497 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3499 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3500 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3501
3502 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3503 {
3504 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3505 {
3506 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3507 staConfigBssParam->staType = STA_ENTRY_BSSID;
3508 }
3509 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3510 (staConfigBssParam->staType == STA_ENTRY_SELF))
3511 {
3512 /* This is the 1st add BSS Req for the BTAMP STA */
3513 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3514 staConfigBssParam->staType = STA_ENTRY_BSSID;
3515 }
3516 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3517 (staConfigBssParam->staType == STA_ENTRY_PEER))
3518 {
3519 /* This is the 2nd ADD BSS Request that is sent
3520 * on the BTAMP STA side. The Sta type is
3521 * set to STA_ENTRY_PEER here.*/
3522 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3523 }
3524 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3525 (staConfigBssParam->staType == STA_ENTRY_SELF))
3526 {
3527 /* statype is already set by PE.
3528 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3529 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3530 staConfigBssParam->staType = STA_ENTRY_BSSID;
3531 }
3532 else
3533 {
3534 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3535 staConfigBssParam->staType = STA_ENTRY_PEER;
3536 }
3537 }
3538 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3539 {
3540 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3541 staConfigBssParam->staType = STA_ENTRY_SELF;
3542 }
3543 else
3544 {
3545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3546 "Invalid operation mode specified");
3547 VOS_ASSERT(0);
3548 }
3549
3550 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3555 sizeof(tSirMacAddr));
3556 staConfigBssParam->txChannelWidthSet =
3557 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3559 staConfigBssParam->htCapable)
3560 {
3561 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3562 wdiConfigBssRsp->ucBSSIdx;
3563 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3564 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303565 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3566 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3569 wdiConfigBssRsp->ucBSSIdx,
3570 wdiConfigBssRsp->ucSTAIdx))
3571 {
3572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003573 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 VOS_ASSERT(0) ;
3575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3577 {
3578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003579 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003580 VOS_ASSERT(0) ;
3581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003582#ifdef WLAN_FEATURE_VOWIFI
3583 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3584#endif
3585 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303586 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3587 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3589 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 return ;
3592}
Jeff Johnson295189b2012-06-20 16:38:30 -07003593/*
3594 * FUNCTION: WDA_UpdateEdcaParamsForAC
3595 * Update WDI EDCA params with PE edca params
3596 */
3597void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3598 WDI_EdcaParamRecord *wdiEdcaParam,
3599 tSirMacEdcaParamRecord *macEdcaParam)
3600{
3601 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3602 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3603 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3604 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3605 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3606 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3607}
Jeff Johnson295189b2012-06-20 16:38:30 -07003608/*
3609 * FUNCTION: WDA_ProcessConfigBssReq
3610 * Configure BSS before starting Assoc with AP
3611 */
3612VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3613 tAddBssParams* configBssReqParam)
3614{
3615 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303616 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003619 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303620 if (NULL == configBssReqParam)
3621 {
3622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3623 "%s: configBssReqParam is NULL", __func__);
3624 return VOS_STATUS_E_INVAL;
3625 }
3626
3627 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3628 sizeof(WDI_ConfigBSSReqParamsType)) ;
3629
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 if(NULL == wdiConfigBssReqParam)
3631 {
3632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003634 VOS_ASSERT(0);
3635 return VOS_STATUS_E_NOMEM;
3636 }
3637 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3638 if(NULL == pWdaParams)
3639 {
3640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003641 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 VOS_ASSERT(0);
3643 vos_mem_free(wdiConfigBssReqParam);
3644 return VOS_STATUS_E_NOMEM;
3645 }
Kiran4a17ebe2013-01-31 10:43:43 -08003646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3647 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3650 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 /* Store Init Req pointer, as this will be used for response */
3652 /* store Params pass it to WDI */
3653 pWdaParams->pWdaContext = pWDA;
3654 pWdaParams->wdaMsgParam = configBssReqParam;
3655 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3657 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 if(IS_WDI_STATUS_FAILURE(status))
3659 {
3660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3661 "Failure in Config BSS WDI API, free all the memory " );
3662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3663 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003664 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003667 return CONVERT_WDI2VOS_STATUS(status) ;
3668}
Jeff Johnson295189b2012-06-20 16:38:30 -07003669#ifdef ENABLE_HAL_COMBINED_MESSAGES
3670/*
3671 * FUNCTION: WDA_PostAssocReqCallback
3672 * Post ASSOC req callback, send RSP back to PE
3673 */
3674void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3675 void* pUserData)
3676{
3677 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3678 tPostAssocParams *postAssocReqParam =
3679 (tPostAssocParams *)pWDA->wdaMsgParam ;
3680 /*STA context within the BSS Params*/
3681 tAddStaParams *staPostAssocParam =
3682 &postAssocReqParam->addBssParams.staContext ;
3683 /*STA Params for self STA*/
3684 tAddStaParams *selfStaPostAssocParam =
3685 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003687 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003688 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003689 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3691 {
3692 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3693 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3694 sizeof(tSirMacAddr)) ;
3695 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3696 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3697 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003698 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3699 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303700 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003701 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3702 pWDA->wdaWdiApiMsgParam = NULL;
3703 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003704 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 return ;
3706}
Jeff Johnson295189b2012-06-20 16:38:30 -07003707/*
3708 * FUNCTION: WDA_ProcessPostAssocReq
3709 * Trigger POST ASSOC processing in WDI
3710 */
3711VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3712 tPostAssocParams *postAssocReqParam)
3713{
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 WDI_Status status = WDI_STATUS_SUCCESS ;
3715
3716 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3717 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3718 sizeof(WDI_PostAssocReqParamsType)) ;
3719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003720 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003721
Jeff Johnson295189b2012-06-20 16:38:30 -07003722 if(NULL == wdiPostAssocReqParam)
3723 {
3724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 VOS_ASSERT(0);
3727 return VOS_STATUS_E_NOMEM;
3728 }
3729
3730 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3731 {
3732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003733 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003734 VOS_ASSERT(0);
3735 return VOS_STATUS_E_FAILURE;
3736 }
3737
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 /* update BSS params into WDI structure */
3739 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3740 &postAssocReqParam->addBssParams) ;
3741 /* update STA params into WDI structure */
3742 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3743 &postAssocReqParam->addStaParams) ;
3744
3745 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3746 postAssocReqParam->addBssParams.highPerformance;
3747 WDA_UpdateEdcaParamsForAC(pWDA,
3748 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3749 &postAssocReqParam->addBssParams.acbe);
3750 WDA_UpdateEdcaParamsForAC(pWDA,
3751 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3752 &postAssocReqParam->addBssParams.acbk);
3753 WDA_UpdateEdcaParamsForAC(pWDA,
3754 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3755 &postAssocReqParam->addBssParams.acvi);
3756 WDA_UpdateEdcaParamsForAC(pWDA,
3757 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3758 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003759 /* Store Init Req pointer, as this will be used for response */
3760 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 /* store Params pass it to WDI */
3762 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3764 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003765 if(IS_WDI_STATUS_FAILURE(status))
3766 {
3767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3768 "Failure in Post Assoc WDI API, free all the memory " );
3769 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3770 pWDA->wdaWdiApiMsgParam = NULL;
3771 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003773 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003775 return CONVERT_WDI2VOS_STATUS(status) ;
3776}
3777#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003778/*
3779 * FUNCTION: WDA_AddStaReqCallback
3780 * ADD STA req callback, send RSP back to PE
3781 */
3782void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3783 void* pUserData)
3784{
3785 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3786 tWDA_CbContext *pWDA;
3787 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003789 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003790 if(NULL == pWdaParams)
3791 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 VOS_ASSERT(0) ;
3794 return ;
3795 }
3796 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3797 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003799 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3801 {
3802 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3803 /*TODO: UMAC structure doesn't have these fields*/
3804 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3805 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3806 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3807 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3808 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3809 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003810#ifdef FEATURE_WLAN_TDLS
3811 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3812 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3813#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003815#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 {
3817 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3818 wdiConfigStaRsp->ucBssIdx;
3819 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3820 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303821 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3822 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 }
3824 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3825 {
3826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003827 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003828 VOS_ASSERT(0) ;
3829 return ;
3830 }
3831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3833 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003834 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 return ;
3836}
Jeff Johnson295189b2012-06-20 16:38:30 -07003837/*
3838 * FUNCTION: WDA_ConfigStaReq
3839 * Trigger Config STA processing in WDI
3840 */
3841VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3842 tAddStaParams *addStaReqParam)
3843{
Jeff Johnson295189b2012-06-20 16:38:30 -07003844 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003845 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3846 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3847 sizeof(WDI_ConfigSTAReqParamsType)) ;
3848 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003850 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 if(NULL == wdiConfigStaReqParam)
3852 {
3853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 VOS_ASSERT(0);
3856 return VOS_STATUS_E_NOMEM;
3857 }
3858 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3859 if(NULL == pWdaParams)
3860 {
3861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003862 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003863 VOS_ASSERT(0);
3864 vos_mem_free(wdiConfigStaReqParam);
3865 return VOS_STATUS_E_NOMEM;
3866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 /* update STA params into WDI structure */
3869 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3870 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 /* Store Init Req pointer, as this will be used for response */
3872 /* store Params pass it to WDI */
3873 pWdaParams->pWdaContext = pWDA;
3874 pWdaParams->wdaMsgParam = addStaReqParam;
3875 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003876 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3877 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 if(IS_WDI_STATUS_FAILURE(status))
3879 {
3880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3881 "Failure in Config STA WDI API, free all the memory " );
3882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3883 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003884 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003887 return CONVERT_WDI2VOS_STATUS(status) ;
3888}
Jeff Johnson295189b2012-06-20 16:38:30 -07003889/*
3890 * FUNCTION: WDA_DelBSSReqCallback
3891 * Dens DEL BSS RSP back to PE
3892 */
3893void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3894 void* pUserData)
3895{
3896 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3897 tWDA_CbContext *pWDA;
3898 tDeleteBssParams *delBssReqParam;
3899 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003901 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 if(NULL == pWdaParams)
3903 {
3904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003905 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 VOS_ASSERT(0) ;
3907 return ;
3908 }
3909 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3910 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003911 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003912 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3913 {
3914 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3915 sizeof(tSirMacAddr)) ;
3916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003917 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3918 {
3919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003920 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003921 VOS_ASSERT(0) ;
3922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3924 {
3925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003926 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 VOS_ASSERT(0) ;
3928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3930 {
3931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003932 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003933 VOS_ASSERT(0) ;
3934 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303935
3936 WLANTL_StartForwarding(staIdx,0,0);
3937
Jeff Johnson295189b2012-06-20 16:38:30 -07003938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3939 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 /* reset the the system role*/
3941 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3942
3943 /* Reset the BA related information */
3944 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3945 {
3946 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3947 {
3948 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3949 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303950 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 /* Reset framesTxed counters here */
3952 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3953 {
3954 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3955 }
3956 }
3957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003959 return ;
3960}
3961
Jeff Johnson295189b2012-06-20 16:38:30 -07003962/*
3963 * FUNCTION: WDA_ProcessDelBssReq
3964 * Init DEL BSS req with WDI
3965 */
3966VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3967 tDeleteBssParams *delBssParam)
3968{
3969 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3971 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3972 sizeof(WDI_DelBSSReqParamsType)) ;
3973 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003975 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 if(NULL == wdiDelBssReqParam)
3977 {
3978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003980 VOS_ASSERT(0);
3981 return VOS_STATUS_E_NOMEM;
3982 }
3983 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3984 if(NULL == pWdaParams)
3985 {
3986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003987 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 VOS_ASSERT(0);
3989 vos_mem_free(wdiDelBssReqParam);
3990 return VOS_STATUS_E_NOMEM;
3991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3993 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3994
3995 /* Store Init Req pointer, as this will be used for response */
3996 /* store Params pass it to WDI */
3997 pWdaParams->pWdaContext = pWDA;
3998 pWdaParams->wdaMsgParam = delBssParam;
3999 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 status = WDI_DelBSSReq(wdiDelBssReqParam,
4001 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 if(IS_WDI_STATUS_FAILURE(status))
4003 {
4004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4005 "Failure in Del BSS WDI API, free all the memory " );
4006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4007 vos_mem_free(pWdaParams) ;
4008 delBssParam->status = eSIR_FAILURE ;
4009 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 return CONVERT_WDI2VOS_STATUS(status) ;
4012}
Jeff Johnson295189b2012-06-20 16:38:30 -07004013/*
4014 * FUNCTION: WDA_DelSTAReqCallback
4015 * Dens DEL STA RSP back to PE
4016 */
4017void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4018 void* pUserData)
4019{
4020 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4021 tWDA_CbContext *pWDA;
4022 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004024 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 if(NULL == pWdaParams)
4026 {
4027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004028 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 VOS_ASSERT(0) ;
4030 return ;
4031 }
4032 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4033 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004034 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4036 {
4037 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4038 {
4039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004040 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004041 VOS_ASSERT(0) ;
4042 }
4043 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304044 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 }
4046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4047 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 /*Reset the BA information corresponding to this STAIdx */
4049 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4050 WDA_INVALID_STA_INDEX;
4051 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304052 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 return ;
4055}
Jeff Johnson295189b2012-06-20 16:38:30 -07004056/*
4057 * FUNCTION: WDA_ProcessDelStaReq
4058 * Init DEL STA req with WDI
4059 */
4060VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4061 tDeleteStaParams *delStaParam)
4062{
4063 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4065 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4066 sizeof(WDI_DelSTAReqParamsType)) ;
4067 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004069 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004070 if(NULL == wdiDelStaReqParam)
4071 {
4072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004074 VOS_ASSERT(0);
4075 return VOS_STATUS_E_NOMEM;
4076 }
4077 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4078 if(NULL == pWdaParams)
4079 {
4080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 VOS_ASSERT(0);
4083 vos_mem_free(wdiDelStaReqParam);
4084 return VOS_STATUS_E_NOMEM;
4085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4087 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004088 /* Store Init Req pointer, as this will be used for response */
4089 /* store Params pass it to WDI */
4090 pWdaParams->pWdaContext = pWDA;
4091 pWdaParams->wdaMsgParam = delStaParam;
4092 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 status = WDI_DelSTAReq(wdiDelStaReqParam,
4094 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 if(IS_WDI_STATUS_FAILURE(status))
4096 {
4097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4098 "Failure in Del STA WDI API, free all the memory status = %d",
4099 status );
4100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4101 vos_mem_free(pWdaParams) ;
4102 delStaParam->status = eSIR_FAILURE ;
4103 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004105 return CONVERT_WDI2VOS_STATUS(status) ;
4106}
Jeff Johnson295189b2012-06-20 16:38:30 -07004107void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4108{
4109 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4110 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304111 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004113 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004114 if(NULL == pWdaParams)
4115 {
4116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004117 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 VOS_ASSERT(0) ;
4119 return ;
4120 }
4121 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4122 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4124 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4126 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4127 pwdiAddSTASelfRsp->macSelfSta,
4128 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304129 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4130 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4131 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4132 {
4133 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4134 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 return ;
4138}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304139
Jeff Johnson295189b2012-06-20 16:38:30 -07004140/*
4141 * FUNCTION: WDA_ProcessAddStaSelfReq
4142 *
4143 */
4144VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4145{
4146 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004147 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4149 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4150 sizeof(WDI_AddSTASelfReqParamsType)) ;
4151 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004153 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304154 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 if( NULL == wdiAddStaSelfReq )
4156 {
4157 VOS_ASSERT( 0 );
4158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004159 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304160 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4161 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 return( VOS_STATUS_E_NOMEM );
4163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 if( NULL == pWdaParams )
4166 {
4167 VOS_ASSERT( 0 );
4168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004169 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304170 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4171 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 vos_mem_free(wdiAddStaSelfReq) ;
4173 return( VOS_STATUS_E_NOMEM );
4174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004175 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004177 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 /* Store Init Req pointer, as this will be used for response */
4179 /* store Params pass it to WDI */
4180 pWdaParams->pWdaContext = pWDA;
4181 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4182 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004183 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004184
Jeff Johnson43971f52012-07-17 12:26:56 -07004185 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004186 {
4187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4188 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004189 wstatus );
4190 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4192 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304193 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4194 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 pAddStaSelfReq->status = eSIR_FAILURE ;
4196 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4197 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004198 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004199}
Jeff Johnson295189b2012-06-20 16:38:30 -07004200/*
4201 * FUNCTION: WDA_DelSTASelfRespCallback
4202 *
4203 */
4204void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4205 wdiDelStaSelfRspParams , void* pUserData)
4206{
4207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4208 tWDA_CbContext *pWDA;
4209 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004211 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 if (NULL == pWdaParams)
4213 {
4214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004215 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 VOS_ASSERT(0);
4217 return;
4218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4220 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004222 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004223
4224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4225 vos_mem_free(pWdaParams) ;
4226
4227 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 return ;
4229}
Jeff Johnson295189b2012-06-20 16:38:30 -07004230/*
4231 * FUNCTION: WDA_DelSTASelfReqCallback
4232 *
4233 */
4234void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4235 void* pUserData)
4236{
4237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4238 tWDA_CbContext *pWDA;
4239 tDelStaSelfParams *delStaSelfParams;
4240
4241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304242 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004243 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004244
4245 if (NULL == pWdaParams)
4246 {
4247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004248 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004249 VOS_ASSERT(0);
4250 return;
4251 }
4252
4253 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4254 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4255
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004256 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004257
4258 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4259 {
4260 VOS_ASSERT(0);
4261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4262 vos_mem_free(pWdaParams) ;
4263 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4264 }
4265
4266 return ;
4267}
4268
4269/*
4270 * FUNCTION: WDA_DelSTASelfReq
4271 * Trigger Config STA processing in WDI
4272 */
4273VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4274 tDelStaSelfParams* pDelStaSelfReqParam)
4275{
4276 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004277 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 tWDA_ReqParams *pWdaParams = NULL;
4279 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4280 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4281 sizeof(WDI_DelSTASelfReqParamsType)) ;
4282
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004284 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 if( NULL == wdiDelStaSelfReq )
4286 {
4287 VOS_ASSERT( 0 );
4288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004289 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 return( VOS_STATUS_E_NOMEM );
4291 }
4292
4293 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4294 if( NULL == pWdaParams )
4295 {
4296 VOS_ASSERT( 0 );
4297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004298 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 vos_mem_free(wdiDelStaSelfReq) ;
4300 return( VOS_STATUS_E_NOMEM );
4301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 pWdaParams->pWdaContext = pWDA;
4303 /* Store param pointer as passed in by caller */
4304 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4305 /* store Params pass it to WDI */
4306 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4308 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4309
4310 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4311 wdiDelStaSelfReq->pUserData = pWdaParams;
4312
Jeff Johnson43971f52012-07-17 12:26:56 -07004313 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4315
Jeff Johnson43971f52012-07-17 12:26:56 -07004316 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 {
4318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4319 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4320 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004321 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4323 vos_mem_free(pWdaParams) ;
4324 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4325 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4326 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004327 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004328}
4329
Jeff Johnson295189b2012-06-20 16:38:30 -07004330/*
4331 * FUNCTION: WDA_SendMsg
4332 * Send Message back to PE
4333 */
4334void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4335 void *pBodyptr, tANI_U32 bodyVal)
4336{
4337 tSirMsgQ msg = {0} ;
4338 tANI_U32 status = VOS_STATUS_SUCCESS ;
4339 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 msg.type = msgType;
4341 msg.bodyval = bodyVal;
4342 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004343 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 if (VOS_STATUS_SUCCESS != status)
4345 {
4346 if(NULL != pBodyptr)
4347 {
4348 vos_mem_free(pBodyptr);
4349 }
4350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004351 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 VOS_ASSERT(0) ;
4353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 return ;
4355}
Jeff Johnson295189b2012-06-20 16:38:30 -07004356/*
4357 * FUNCTION: WDA_UpdateBSSParams
4358 * Translated WDA/PE BSS info into WDI BSS info..
4359 */
4360void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4361 WDI_ConfigBSSReqInfoType *wdiBssParams,
4362 tAddBssParams *wdaBssParams)
4363{
4364 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 /* copy bssReq Params to WDI structure */
4366 vos_mem_copy(wdiBssParams->macBSSID,
4367 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4368 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4369 sizeof(tSirMacAddr)) ;
4370 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4371 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4372 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 wdiBssParams->ucShortSlotTimeSupported =
4374 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004375 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4376 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4377 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4378 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4379 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4380
4381 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4382 wdiBssParams->ucTXOPProtectionFullSupport =
4383 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4385 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004386 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4388 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4389 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4390 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4391
Chet Lanctot186b5732013-03-18 10:26:30 -07004392 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4393
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 /* copy SSID into WDI structure */
4395 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4396 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4397 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004398 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4399 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004401#ifdef WLAN_FEATURE_VOWIFI
4402 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4403#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004405 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004406#ifdef WLAN_FEATURE_VOWIFI_11R
4407 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 if(wdiBssParams->bExtSetStaKeyParamValid)
4409 {
4410 /* copy set STA key params to WDI structure */
4411 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4412 wdaBssParams->extSetStaKeyParam.staIdx;
4413 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4414 wdaBssParams->extSetStaKeyParam.encType;
4415 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4416 wdaBssParams->extSetStaKeyParam.wepType;
4417 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4418 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004419 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4420 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004421 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4423 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4424 {
4425 WDA_GetWepKeysFromCfg( pWDA,
4426 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4427 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4428 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4429 }
4430 else
4431 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4433 keyIndex++)
4434 {
4435 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4436 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4437 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4438 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4439 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4440 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4442 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4443 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4444 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4445 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4446 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4447 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4448 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4449 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004450 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4451 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 }
4453 }
4454 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4455 }
4456 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4457 {
4458 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4459 sizeof(wdaBssParams->extSetStaKeyParam) );
4460 }
4461#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004462#ifdef WLAN_FEATURE_11AC
4463 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4464 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4465#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004466
4467 return ;
4468}
Jeff Johnson295189b2012-06-20 16:38:30 -07004469/*
4470 * FUNCTION: WDA_UpdateSTAParams
4471 * Translated WDA/PE BSS info into WDI BSS info..
4472 */
4473void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4474 WDI_ConfigStaReqInfoType *wdiStaParams,
4475 tAddStaParams *wdaStaParams)
4476{
4477 tANI_U8 i = 0;
4478 /* Update STA params */
4479 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4480 sizeof(tSirMacAddr)) ;
4481 wdiStaParams->usAssocId = wdaStaParams->assocId;
4482 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004483 wdiStaParams->staIdx = wdaStaParams->staIdx;
4484
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 wdiStaParams->ucShortPreambleSupported =
4486 wdaStaParams->shortPreambleSupported;
4487 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4488 sizeof(tSirMacAddr)) ;
4489 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4490
4491 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4492
4493 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4494 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4495 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4496 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4497 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4498 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4499 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4500
4501 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4502 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 wdiStaParams->wdiSupportedRates.opRateMode =
4504 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4506 {
4507 wdiStaParams->wdiSupportedRates.llbRates[i] =
4508 wdaStaParams->supportedRates.llbRates[i];
4509 }
4510 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4511 {
4512 wdiStaParams->wdiSupportedRates.llaRates[i] =
4513 wdaStaParams->supportedRates.llaRates[i];
4514 }
4515 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4516 {
4517 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4518 wdaStaParams->supportedRates.aniLegacyRates[i];
4519 }
4520 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4521 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004522#ifdef WLAN_FEATURE_11AC
4523 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4524 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4525 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4526 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4527#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4529 {
4530 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4531 wdaStaParams->supportedRates.supportedMCSSet[i];
4532 }
4533 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4534 wdaStaParams->supportedRates.rxHighestDataRate;
4535
4536 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4537
4538 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4539
4540 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4541 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4542 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4543
4544 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4545 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4546 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4547 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004549#ifdef WLAN_FEATURE_11AC
4550 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4551 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004552 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304553 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4554 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4555 * must be set by default */
4556 if ( wdiStaParams->vhtTxMUBformeeCapable )
4557 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004558#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004559 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4560 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 return ;
4562}
Jeff Johnson295189b2012-06-20 16:38:30 -07004563/*
4564 * -------------------------------------------------------------------------
4565 * CFG update to WDI
4566 * -------------------------------------------------------------------------
4567 */
4568
4569 /*
4570 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4571 * Convert the WNI CFG ID to HAL CFG ID
4572 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004573static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004574{
4575 switch(wniCfgId)
4576 {
4577 case WNI_CFG_STA_ID:
4578 return QWLAN_HAL_CFG_STA_ID;
4579 case WNI_CFG_CURRENT_TX_ANTENNA:
4580 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4581 case WNI_CFG_CURRENT_RX_ANTENNA:
4582 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4583 case WNI_CFG_LOW_GAIN_OVERRIDE:
4584 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4585 case WNI_CFG_POWER_STATE_PER_CHAIN:
4586 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4587 case WNI_CFG_CAL_PERIOD:
4588 return QWLAN_HAL_CFG_CAL_PERIOD;
4589 case WNI_CFG_CAL_CONTROL:
4590 return QWLAN_HAL_CFG_CAL_CONTROL;
4591 case WNI_CFG_PROXIMITY:
4592 return QWLAN_HAL_CFG_PROXIMITY;
4593 case WNI_CFG_NETWORK_DENSITY:
4594 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4595 case WNI_CFG_MAX_MEDIUM_TIME:
4596 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4597 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4598 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4599 case WNI_CFG_RTS_THRESHOLD:
4600 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4601 case WNI_CFG_SHORT_RETRY_LIMIT:
4602 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4603 case WNI_CFG_LONG_RETRY_LIMIT:
4604 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4605 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4606 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4607 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4608 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4609 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4610 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4611 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4612 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4613 case WNI_CFG_FIXED_RATE:
4614 return QWLAN_HAL_CFG_FIXED_RATE;
4615 case WNI_CFG_RETRYRATE_POLICY:
4616 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4617 case WNI_CFG_RETRYRATE_SECONDARY:
4618 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4619 case WNI_CFG_RETRYRATE_TERTIARY:
4620 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4621 case WNI_CFG_FORCE_POLICY_PROTECTION:
4622 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4623 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4624 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4625 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4626 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4627 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4628 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4629 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4630 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4631 case WNI_CFG_MAX_BA_SESSIONS:
4632 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4633 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4634 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4635 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4636 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4637 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4638 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4639 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4640 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4641 case WNI_CFG_STATS_PERIOD:
4642 return QWLAN_HAL_CFG_STATS_PERIOD;
4643 case WNI_CFG_CFP_MAX_DURATION:
4644 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4645#if 0 /*This is not part of CFG*/
4646 case WNI_CFG_FRAME_TRANS_ENABLED:
4647 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4648#endif
4649 case WNI_CFG_DTIM_PERIOD:
4650 return QWLAN_HAL_CFG_DTIM_PERIOD;
4651 case WNI_CFG_EDCA_WME_ACBK:
4652 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4653 case WNI_CFG_EDCA_WME_ACBE:
4654 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4655 case WNI_CFG_EDCA_WME_ACVI:
4656 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4657 case WNI_CFG_EDCA_WME_ACVO:
4658 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4659#if 0
4660 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4661 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4662 case WNI_CFG_TELE_BCN_TRANS_LI:
4663 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4664 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4665 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4666 case WNI_CFG_TELE_BCN_MAX_LI:
4667 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4668 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4669 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4670#endif
4671 case WNI_CFG_ENABLE_CLOSE_LOOP:
4672 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004673 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4674 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004675 default:
4676 {
4677 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004678 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 wniCfgId);
4680 return VOS_STATUS_E_INVAL;
4681 }
4682 }
4683}
Jeff Johnson295189b2012-06-20 16:38:30 -07004684/*
4685 * FUNCTION: WDA_UpdateCfgCallback
4686 *
4687 */
4688void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4689{
4690 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4691 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4692 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004695 /*
4696 * currently there is no response message is expected between PE and
4697 * WDA, Failure return from WDI is a ASSERT condition
4698 */
4699 if(WDI_STATUS_SUCCESS != wdiStatus)
4700 {
4701 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004702 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4704 }
4705
4706 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4707 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4708 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 return ;
4710}
Jeff Johnson295189b2012-06-20 16:38:30 -07004711/*
4712 * FUNCTION: WDA_UpdateCfg
4713 *
4714 */
4715VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4716{
4717
4718 WDI_Status status = WDI_STATUS_SUCCESS ;
4719 tANI_U32 val =0;
4720 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4721 tHalCfg *configData;
4722 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4723 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004725 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 if (NULL == pMac )
4727 {
4728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004729 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 return VOS_STATUS_E_FAILURE;
4731 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004732 if(WDA_START_STATE != pWDA->wdaState)
4733 {
4734 return VOS_STATUS_E_FAILURE;
4735 }
4736
4737 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4738 {
4739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004740 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 VOS_ASSERT(0);
4742 return VOS_STATUS_E_FAILURE;
4743 }
4744
4745 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4746 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 if(NULL == wdiCfgReqParam)
4748 {
4749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004750 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 VOS_ASSERT(0);
4752 return VOS_STATUS_E_NOMEM;
4753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004754 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4755 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004756 if(NULL == wdiCfgReqParam->pConfigBuffer)
4757 {
4758 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004759 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 vos_mem_free(wdiCfgReqParam);
4761 VOS_ASSERT(0);
4762 return VOS_STATUS_E_NOMEM;
4763 }
4764
4765 /*convert the WNI CFG Id to HAL CFG Id*/
4766 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4767 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4768
4769 /*TODO: revisit this for handling string parameters */
4770 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4771 &val) != eSIR_SUCCESS)
4772 {
4773 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004774 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4776 vos_mem_free(wdiCfgReqParam);
4777 return eSIR_FAILURE;
4778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4780 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4781 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4782 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4783 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4784
4785 /* store Params pass it to WDI */
4786 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004787#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4788 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4789 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 if(IS_WDI_STATUS_FAILURE(status))
4791 {
4792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4793 "Failure in Update CFG WDI API, free all the memory " );
4794 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4795 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4796 pWDA->wdaWdiCfgApiMsgParam = NULL;
4797 /* Failure is not expected */
4798 VOS_ASSERT(0) ;
4799 }
4800#else
4801 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4802 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4803 pWDA->wdaWdiCfgApiMsgParam = NULL;
4804#endif
4805 return CONVERT_WDI2VOS_STATUS(status) ;
4806}
4807
Jeff Johnson295189b2012-06-20 16:38:30 -07004808VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4809 v_U8_t *pDefaultKeyId,
4810 v_U8_t *pNumKeys,
4811 WDI_KeysType *pWdiKeys )
4812{
4813 v_U32_t i, j, defKeyId = 0;
4814 v_U32_t val = SIR_MAC_KEY_LENGTH;
4815 VOS_STATUS status = WDI_STATUS_SUCCESS;
4816 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004817 if (NULL == pMac )
4818 {
4819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004820 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 return VOS_STATUS_E_FAILURE;
4822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004823 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4824 &defKeyId ))
4825 {
4826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4827 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4828 }
4829
4830 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 /* Need to extract ALL of the configured WEP Keys */
4832 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4833 {
4834 val = SIR_MAC_KEY_LENGTH;
4835 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4836 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4837 pWdiKeys[j].key,
4838 &val ))
4839 {
4840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004841 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 }
4843 else
4844 {
4845 pWdiKeys[j].keyId = (tANI_U8) i;
4846 /*
4847 * Actually, a DC (Don't Care) because
4848 * this is determined (and set) by PE/MLME
4849 */
4850 pWdiKeys[j].unicast = 0;
4851 /*
4852 * Another DC (Don't Care)
4853 */
4854 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4855 /* Another DC (Don't Care). Unused for WEP */
4856 pWdiKeys[j].paeRole = 0;
4857 /* Determined from wlan_cfgGetStr() above.*/
4858 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 j++;
4860 *pNumKeys = (tANI_U8) j;
4861 }
4862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 return status;
4864}
Jeff Johnson295189b2012-06-20 16:38:30 -07004865/*
4866 * FUNCTION: WDA_SetBssKeyReqCallback
4867 * send SET BSS key RSP back to PE
4868 */
4869void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4870{
4871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4872 tWDA_CbContext *pWDA;
4873 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004875 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 if(NULL == pWdaParams)
4877 {
4878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004879 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 VOS_ASSERT(0) ;
4881 return ;
4882 }
4883 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4884 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304885 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4886 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4888 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004889 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 return ;
4892}
Jeff Johnson295189b2012-06-20 16:38:30 -07004893/*
4894 * FUNCTION: WDA_ProcessSetBssKeyReq
4895 * Request to WDI for programming the BSS key( key for
4896 * broadcast/multicast frames Encryption)
4897 */
4898VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4899 tSetBssKeyParams *setBssKeyParams )
4900{
4901 WDI_Status status = WDI_STATUS_SUCCESS ;
4902 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4903 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4904 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4905 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 if(NULL == wdiSetBssKeyParam)
4910 {
4911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 VOS_ASSERT(0);
4914 return VOS_STATUS_E_NOMEM;
4915 }
4916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4917 if(NULL == pWdaParams)
4918 {
4919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 VOS_ASSERT(0);
4922 vos_mem_free(wdiSetBssKeyParam);
4923 return VOS_STATUS_E_NOMEM;
4924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 /* copy set BSS params to WDI structure */
4927 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4928 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4929 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 if(setBssKeyParams->encType != eSIR_ED_NONE)
4931 {
4932 if( setBssKeyParams->numKeys == 0 &&
4933 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4934 setBssKeyParams->encType == eSIR_ED_WEP104))
4935 {
4936 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004937 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4938 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4939 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4940 }
4941 else
4942 {
4943 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4944 {
4945 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4946 setBssKeyParams->key[keyIndex].keyId;
4947 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4948 setBssKeyParams->key[keyIndex].unicast;
4949 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4950 setBssKeyParams->key[keyIndex].keyDirection;
4951 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4952 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4953 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4954 setBssKeyParams->key[keyIndex].paeRole;
4955 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4956 setBssKeyParams->key[keyIndex].keyLength;
4957 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4958 setBssKeyParams->key[keyIndex].key,
4959 SIR_MAC_MAX_KEY_LENGTH);
4960 }
4961 }
4962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004963 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4964 setBssKeyParams->singleTidRc;
4965 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 /* Store set key pointer, as this will be used for response */
4967 /* store Params pass it to WDI */
4968 pWdaParams->pWdaContext = pWDA;
4969 pWdaParams->wdaMsgParam = setBssKeyParams;
4970 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4972 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4973
4974 if(IS_WDI_STATUS_FAILURE(status))
4975 {
4976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4977 "Failure in Set BSS Key Req WDI API, free all the memory " );
4978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4979 vos_mem_free(pWdaParams) ;
4980 setBssKeyParams->status = eSIR_FAILURE ;
4981 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004983 return CONVERT_WDI2VOS_STATUS(status) ;
4984}
Jeff Johnson295189b2012-06-20 16:38:30 -07004985/*
4986 * FUNCTION: WDA_RemoveBssKeyReqCallback
4987 * send SET BSS key RSP back to PE
4988 */
4989void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4990{
4991 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4992 tWDA_CbContext *pWDA;
4993 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004995 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 if(NULL == pWdaParams)
4997 {
4998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004999 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005000 VOS_ASSERT(0) ;
5001 return ;
5002 }
5003 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5004 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5006 vos_mem_free(pWdaParams) ;
5007
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005008 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005010 return ;
5011}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305012
5013/*
5014 * FUNCTION: WDA_SpoofMacAddrRspCallback
5015 * recieves spoof mac addr response from FW
5016 */
5017void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5018{
5019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5020 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305021
Siddharth Bhal171788a2014-09-29 21:02:40 +05305022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5023 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305024
Siddharth Bhal171788a2014-09-29 21:02:40 +05305025 if(NULL == pWdaParams)
5026 {
5027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5028 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305029 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305030 return ;
5031 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305032 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305033
Siddharth Bhal029d6732014-10-09 21:31:23 +05305034 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305036 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305037 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305038 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5039 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305040
Siddharth Bhal171788a2014-09-29 21:02:40 +05305041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305042 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305043 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305044
5045 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305046}
5047
Jeff Johnson295189b2012-06-20 16:38:30 -07005048/*
5049 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5050 * Request to WDI to remove the BSS key( key for broadcast/multicast
5051 * frames Encryption)
5052 */
5053VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5054 tRemoveBssKeyParams *removeBssKeyParams )
5055{
5056 WDI_Status status = WDI_STATUS_SUCCESS ;
5057 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5058 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5059 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5060 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005062 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 if(NULL == wdiRemoveBssKeyParam)
5064 {
5065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005066 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 VOS_ASSERT(0);
5068 return VOS_STATUS_E_NOMEM;
5069 }
5070 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5071 if(NULL == pWdaParams)
5072 {
5073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005074 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 VOS_ASSERT(0);
5076 vos_mem_free(wdiRemoveBssKeyParam);
5077 return VOS_STATUS_E_NOMEM;
5078 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 /* copy Remove BSS key params to WDI structure*/
5080 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5081 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5082 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5083 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5084 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005085 /* Store remove key pointer, as this will be used for response */
5086 /* store Params pass it to WDI */
5087 pWdaParams->pWdaContext = pWDA;
5088 pWdaParams->wdaMsgParam = removeBssKeyParams;
5089 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005090 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5091 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 if(IS_WDI_STATUS_FAILURE(status))
5093 {
5094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5095 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5096 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5097 vos_mem_free(pWdaParams) ;
5098 removeBssKeyParams->status = eSIR_FAILURE ;
5099 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005101 return CONVERT_WDI2VOS_STATUS(status) ;
5102}
Jeff Johnson295189b2012-06-20 16:38:30 -07005103/*
5104 * FUNCTION: WDA_SetBssKeyReqCallback
5105 * send SET BSS key RSP back to PE
5106 */
5107void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5108{
5109 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5110 tWDA_CbContext *pWDA;
5111 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005113 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005114 if(NULL == pWdaParams)
5115 {
5116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005117 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005118 VOS_ASSERT(0) ;
5119 return ;
5120 }
5121 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5122 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305123 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5124 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5126 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005127 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 return ;
5130}
Jeff Johnson295189b2012-06-20 16:38:30 -07005131/*
5132 * FUNCTION: WDA_ProcessSetStaKeyReq
5133 * Request to WDI for programming the STA key( key for Unicast frames
5134 * Encryption)
5135 */
5136VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5137 tSetStaKeyParams *setStaKeyParams )
5138{
5139 WDI_Status status = WDI_STATUS_SUCCESS ;
5140 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5141 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5142 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5143 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005146 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 if(NULL == wdiSetStaKeyParam)
5148 {
5149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 VOS_ASSERT(0);
5152 return VOS_STATUS_E_NOMEM;
5153 }
5154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5155 if(NULL == pWdaParams)
5156 {
5157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 VOS_ASSERT(0);
5160 vos_mem_free(wdiSetStaKeyParam);
5161 return VOS_STATUS_E_NOMEM;
5162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 /* copy set STA key params to WDI structure */
5166 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5167 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5168 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5169 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 if(setStaKeyParams->encType != eSIR_ED_NONE)
5171 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005172 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005173 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5174 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5175 {
5176 WDA_GetWepKeysFromCfg( pWDA,
5177 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5178 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5179 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5180 }
5181 else
5182 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5184 keyIndex++)
5185 {
5186 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5187 setStaKeyParams->key[keyIndex].keyId;
5188 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5189 setStaKeyParams->key[keyIndex].unicast;
5190 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5191 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005192 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5193 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5194 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5195 setStaKeyParams->key[keyIndex].paeRole;
5196 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5197 setStaKeyParams->key[keyIndex].keyLength;
5198 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5199 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5200 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5201 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5202 {
5203 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5204 }
5205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5207 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005208 }
5209 }
5210 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5211 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 /* Store set key pointer, as this will be used for response */
5213 /* store Params pass it to WDI */
5214 pWdaParams->pWdaContext = pWDA;
5215 pWdaParams->wdaMsgParam = setStaKeyParams;
5216 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005217 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5218 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 if(IS_WDI_STATUS_FAILURE(status))
5220 {
5221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5222 "Failure in set STA Key Req WDI API, free all the memory " );
5223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5224 vos_mem_free(pWdaParams) ;
5225 setStaKeyParams->status = eSIR_FAILURE ;
5226 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 return CONVERT_WDI2VOS_STATUS(status) ;
5229}
Jeff Johnson295189b2012-06-20 16:38:30 -07005230/*
5231 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5232 * send SET Bcast STA key RSP back to PE
5233 */
5234void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5235{
5236 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5237 tWDA_CbContext *pWDA;
5238 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005240 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005241 if(NULL == pWdaParams)
5242 {
5243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005244 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 VOS_ASSERT(0) ;
5246 return ;
5247 }
5248 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5249 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5251 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005252 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005253 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 return ;
5255}
5256
Jeff Johnson295189b2012-06-20 16:38:30 -07005257/*
5258 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5259 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5260 * Encryption)
5261 */
5262VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5263 tSetStaKeyParams *setStaKeyParams )
5264{
5265 WDI_Status status = WDI_STATUS_SUCCESS ;
5266 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5267 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5268 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5269 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005270 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005272 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005273 if(NULL == wdiSetStaKeyParam)
5274 {
5275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005276 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 VOS_ASSERT(0);
5278 return VOS_STATUS_E_NOMEM;
5279 }
5280 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5281 if(NULL == pWdaParams)
5282 {
5283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005284 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005285 VOS_ASSERT(0);
5286 vos_mem_free(wdiSetStaKeyParam);
5287 return VOS_STATUS_E_NOMEM;
5288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005290 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 /* copy set STA key params to WDI structure */
5292 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5293 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5294 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5295 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 if(setStaKeyParams->encType != eSIR_ED_NONE)
5297 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005298 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5299 keyIndex++)
5300 {
5301 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5302 setStaKeyParams->key[keyIndex].keyId;
5303 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5304 setStaKeyParams->key[keyIndex].unicast;
5305 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5306 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5308 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5309 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5310 setStaKeyParams->key[keyIndex].paeRole;
5311 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5312 setStaKeyParams->key[keyIndex].keyLength;
5313 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5314 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5317 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 }
5319 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 /* Store set key pointer, as this will be used for response */
5321 /* store Params pass it to WDI */
5322 pWdaParams->pWdaContext = pWDA;
5323 pWdaParams->wdaMsgParam = setStaKeyParams;
5324 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5326 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 if(IS_WDI_STATUS_FAILURE(status))
5328 {
5329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5330 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5332 vos_mem_free(pWdaParams) ;
5333 setStaKeyParams->status = eSIR_FAILURE ;
5334 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 return CONVERT_WDI2VOS_STATUS(status) ;
5337}
Jeff Johnson295189b2012-06-20 16:38:30 -07005338/*
5339 * FUNCTION: WDA_RemoveStaKeyReqCallback
5340 * send SET BSS key RSP back to PE
5341 */
5342void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5343{
5344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5345 tWDA_CbContext *pWDA;
5346 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005348 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 if(NULL == pWdaParams)
5350 {
5351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005352 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 VOS_ASSERT(0) ;
5354 return ;
5355 }
5356 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5357 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5359 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005360 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 return ;
5363}
5364
Jeff Johnson295189b2012-06-20 16:38:30 -07005365/*
5366 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5367 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5368 */
5369VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5370 tRemoveStaKeyParams *removeStaKeyParams )
5371{
5372 WDI_Status status = WDI_STATUS_SUCCESS ;
5373 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5374 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5375 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5376 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005378 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(NULL == wdiRemoveStaKeyParam)
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 VOS_ASSERT(0);
5384 return VOS_STATUS_E_NOMEM;
5385 }
5386 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5387 if(NULL == pWdaParams)
5388 {
5389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 VOS_ASSERT(0);
5392 vos_mem_free(wdiRemoveStaKeyParam);
5393 return VOS_STATUS_E_NOMEM;
5394 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005395 /* copy remove STA key params to WDI structure*/
5396 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5397 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5398 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5399 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5400 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 /* Store remove key pointer, as this will be used for response */
5402 /* store Params pass it to WDI */
5403 pWdaParams->pWdaContext = pWDA;
5404 pWdaParams->wdaMsgParam = removeStaKeyParams;
5405 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5407 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 if(IS_WDI_STATUS_FAILURE(status))
5409 {
5410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5411 "Failure in remove STA Key Req WDI API, free all the memory " );
5412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5413 vos_mem_free(pWdaParams) ;
5414 removeStaKeyParams->status = eSIR_FAILURE ;
5415 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 return CONVERT_WDI2VOS_STATUS(status) ;
5418}
Jeff Johnson295189b2012-06-20 16:38:30 -07005419/*
5420 * FUNCTION: WDA_IsHandleSetLinkStateReq
5421 * Update the WDA state and return the status to handle this message or not
5422 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005423WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5424 tWDA_CbContext *pWDA,
5425 tLinkStateParams *linkStateParams)
5426{
5427 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 switch(linkStateParams->state)
5429 {
5430 case eSIR_LINK_PREASSOC_STATE:
5431 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5432 /*
5433 * set the WDA state to PRE ASSOC
5434 * copy the BSSID into pWDA to use it in join request and return,
5435 * No need to handle these messages.
5436 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005437 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5438 {
5439 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005441 }
5442 else
5443 {
5444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005445 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005446 VOS_ASSERT(0);
5447 }
5448
5449 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5450 {
5451 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005452 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005453 }
5454 else
5455 {
5456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005457 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005458 VOS_ASSERT(0);
5459 }
5460
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5462 *channel and after ) so reset the WDA state to ready when the second
5463 * time UMAC issue the link state with PREASSOC
5464 */
5465 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5466 {
5467 /* RESET WDA state back to WDA_READY_STATE */
5468 pWDA->wdaState = WDA_READY_STATE;
5469 }
5470 else
5471 {
5472 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5473 }
5474 //populate linkState info in WDACbCtxt
5475 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 default:
5478 if(pWDA->wdaState != WDA_READY_STATE)
5479 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005480 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5481 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5482 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5483 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5484 *the ASSERT in WDA_Stop during module unload.*/
5485 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5486 {
5487 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005488 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005489 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005490 else
5491 {
5492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005493 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005494 status = WDA_IGNORE_SET_LINK_STATE;
5495 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005496 }
5497 break;
5498 }
5499
5500 return status;
5501}
Jeff Johnson295189b2012-06-20 16:38:30 -07005502/*
5503 * FUNCTION: WDA_SetLinkStateCallback
5504 * call back function for set link state from WDI
5505 */
5506void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5507{
5508 tWDA_CbContext *pWDA;
5509 tLinkStateParams *linkStateParams;
5510 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005512 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 if(NULL == pWdaParams)
5514 {
5515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005516 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005517 VOS_ASSERT(0) ;
5518 return ;
5519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 /*
5523 * In STA mode start the BA activity check timer after association
5524 * and in AP mode start BA activity check timer after BSS start */
5525 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5526 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005527 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5528 ((status == WDI_STATUS_SUCCESS) &&
5529 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005530 {
5531 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5532 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005534 /*
5535 * No respone required for WDA_SET_LINK_STATE so free the request
5536 * param here
5537 */
5538 if( pWdaParams != NULL )
5539 {
5540 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5541 {
5542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5543 }
5544 vos_mem_free(pWdaParams);
5545 }
5546 return ;
5547}
Jeff Johnson295189b2012-06-20 16:38:30 -07005548/*
5549 * FUNCTION: WDA_ProcessSetLinkState
5550 * Request to WDI to set the link status.
5551 */
5552VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5553 tLinkStateParams *linkStateParams)
5554{
5555 WDI_Status status = WDI_STATUS_SUCCESS ;
5556 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5557 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5558 sizeof(WDI_SetLinkReqParamsType)) ;
5559 tWDA_ReqParams *pWdaParams ;
5560 tpAniSirGlobal pMac;
5561 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5562
5563 if(NULL == pMac)
5564 {
5565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005566 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005567 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005568 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 return VOS_STATUS_E_FAILURE;
5570 }
5571
5572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005573 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 if(NULL == wdiSetLinkStateParam)
5575 {
5576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 VOS_ASSERT(0);
5579 return VOS_STATUS_E_NOMEM;
5580 }
5581 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5582 if(NULL == pWdaParams)
5583 {
5584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005586 VOS_ASSERT(0);
5587 vos_mem_free(wdiSetLinkStateParam);
5588 return VOS_STATUS_E_NOMEM;
5589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 if(WDA_IGNORE_SET_LINK_STATE ==
5591 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5592 {
5593 status = WDI_STATUS_E_FAILURE;
5594 }
5595 else
5596 {
5597 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5598 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005599 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5600 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5602 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 pWdaParams->pWdaContext = pWDA;
5604 /* Store remove key pointer, as this will be used for response */
5605 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 /* store Params pass it to WDI */
5607 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5608 /* Stop Timer only other than GO role and concurrent session */
5609 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005610 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5612 {
5613 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5616 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 if(IS_WDI_STATUS_FAILURE(status))
5618 {
5619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5620 "Failure in set link state Req WDI API, free all the memory " );
5621 }
5622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005623 if(IS_WDI_STATUS_FAILURE(status))
5624 {
5625 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005626 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 vos_mem_free(pWdaParams);
5628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 return CONVERT_WDI2VOS_STATUS(status) ;
5630}
Jeff Johnson295189b2012-06-20 16:38:30 -07005631/*
5632 * FUNCTION: WDA_GetStatsReqParamsCallback
5633 * send the response to PE with Stats received from WDI
5634 */
5635void WDA_GetStatsReqParamsCallback(
5636 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5637 void* pUserData)
5638{
5639 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5640 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5641
5642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005643 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005644 pGetPEStatsRspParams =
5645 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5646 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5647
5648 if(NULL == pGetPEStatsRspParams)
5649 {
5650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005651 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 VOS_ASSERT(0);
5653 return;
5654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5656 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5657 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5658 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005659
5660 //Fill the Session Id Properly in PE
5661 pGetPEStatsRspParams->sessionId = 0;
5662 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005663 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005664 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5665 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005666 vos_mem_copy( pGetPEStatsRspParams + 1,
5667 wdiGetStatsRsp + 1,
5668 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005669 /* send response to UMAC*/
5670 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5671
5672 return;
5673}
5674
Jeff Johnson295189b2012-06-20 16:38:30 -07005675/*
5676 * FUNCTION: WDA_ProcessGetStatsReq
5677 * Request to WDI to get the statistics
5678 */
5679VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5680 tAniGetPEStatsReq *pGetStatsParams)
5681{
5682 WDI_Status status = WDI_STATUS_SUCCESS ;
5683 WDI_GetStatsReqParamsType wdiGetStatsParam;
5684 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005686 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5688 pGetStatsParams->staId;
5689 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5690 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 status = WDI_GetStatsReq(&wdiGetStatsParam,
5693 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005694 if(IS_WDI_STATUS_FAILURE(status))
5695 {
5696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5697 "Failure in Get Stats Req WDI API, free all the memory " );
5698 pGetPEStatsRspParams =
5699 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5700 if(NULL == pGetPEStatsRspParams)
5701 {
5702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005703 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005705 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005706 return VOS_STATUS_E_NOMEM;
5707 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005708 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5709 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5710 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5711 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5712 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5713 (void *)pGetPEStatsRspParams, 0) ;
5714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005715 /* Free the request message */
5716 vos_mem_free(pGetStatsParams);
5717 return CONVERT_WDI2VOS_STATUS(status);
5718}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005719
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005720#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005721/*
5722 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5723 * send the response to PE with roam Rssi received from WDI
5724 */
5725void WDA_GetRoamRssiReqParamsCallback(
5726 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5727 void* pUserData)
5728{
5729 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5730 tWDA_CbContext *pWDA = NULL;
5731 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5732 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5734 "<------ %s " ,__func__);
5735 if(NULL == pWdaParams)
5736 {
5737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5738 "%s: pWdaParams received NULL", __func__);
5739 VOS_ASSERT(0) ;
5740 return ;
5741 }
5742 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5743 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5744
5745 if(NULL == pGetRoamRssiReqParams)
5746 {
5747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5748 "%s: pGetRoamRssiReqParams received NULL", __func__);
5749 VOS_ASSERT(0);
5750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5751 vos_mem_free(pWdaParams);
5752 return ;
5753 }
5754 pGetRoamRssiRspParams =
5755 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5756
5757 if(NULL == pGetRoamRssiRspParams)
5758 {
5759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5760 "%s: VOS MEM Alloc Failure", __func__);
5761 VOS_ASSERT(0);
5762 return;
5763 }
5764 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5765 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005766 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005767 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5768 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5769
5770 /* Assign get roam rssi req (backup) in to the response */
5771 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5772
5773 /* free WDI command buffer */
5774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5775 vos_mem_free(pWdaParams) ;
5776
5777 /* send response to UMAC*/
5778 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5779
5780 return;
5781}
5782
5783
5784
5785/*
5786 * FUNCTION: WDA_ProcessGetRoamRssiReq
5787 * Request to WDI to get the statistics
5788 */
5789VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5790 tAniGetRssiReq *pGetRoamRssiParams)
5791{
5792 WDI_Status status = WDI_STATUS_SUCCESS ;
5793 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5794 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5795 tWDA_ReqParams *pWdaParams = NULL;
5796
5797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5798 "------> %s " ,__func__);
5799 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5800 pGetRoamRssiParams->staId;
5801 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5802
5803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5804 if(NULL == pWdaParams)
5805 {
5806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5807 "%s: VOS MEM Alloc Failure", __func__);
5808 VOS_ASSERT(0);
5809 return VOS_STATUS_E_NOMEM;
5810 }
5811
5812 /* Store Init Req pointer, as this will be used for response */
5813 pWdaParams->pWdaContext = pWDA;
5814
5815 /* Take Get roam Rssi req backup as it stores the callback to be called after
5816 receiving the response */
5817 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5818 pWdaParams->wdaWdiApiMsgParam = NULL;
5819
5820 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5821 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5822 if(IS_WDI_STATUS_FAILURE(status))
5823 {
5824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5825 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5826 pGetRoamRssiRspParams =
5827 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5828 if(NULL == pGetRoamRssiRspParams)
5829 {
5830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5831 "%s: VOS MEM Alloc Failure", __func__);
5832 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305833 vos_mem_free(pGetRoamRssiParams);
5834 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005835 return VOS_STATUS_E_NOMEM;
5836 }
5837 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5838 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5839 pGetRoamRssiRspParams->rssi = 0;
5840 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5841 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5842 (void *)pGetRoamRssiRspParams, 0) ;
5843 }
5844 return CONVERT_WDI2VOS_STATUS(status);
5845}
5846#endif
5847
5848
Jeff Johnson295189b2012-06-20 16:38:30 -07005849/*
5850 * FUNCTION: WDA_UpdateEDCAParamCallback
5851 * call back function for Update EDCA params from WDI
5852 */
5853void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5854{
5855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5856 tEdcaParams *pEdcaParams;
5857
5858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005859 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 if(NULL == pWdaParams)
5861 {
5862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005863 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 VOS_ASSERT(0) ;
5865 return ;
5866 }
5867 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5869 vos_mem_free(pWdaParams);
5870 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 return ;
5872}
Jeff Johnson295189b2012-06-20 16:38:30 -07005873/*
5874 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5875 * Request to WDI to Update the EDCA params.
5876 */
5877VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5878 tEdcaParams *pEdcaParams)
5879{
5880 WDI_Status status = WDI_STATUS_SUCCESS ;
5881 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5882 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5883 sizeof(WDI_UpdateEDCAParamsType)) ;
5884 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 if(NULL == wdiEdcaParam)
5888 {
5889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005890 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005892 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 return VOS_STATUS_E_NOMEM;
5894 }
5895 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5896 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 VOS_ASSERT(0);
5901 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005902 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 return VOS_STATUS_E_NOMEM;
5904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005906 /*
5907 Since firmware is not using highperformance flag, we have removed
5908 this flag from wdiEDCAInfo structure to match sizeof the structure
5909 between host and firmware.In future if we are planning to use
5910 highperformance flag then Please define this flag in wdiEDCAInfo
5911 structure, update it here and send it to firmware. i.e.
5912 Following is the original line which we removed as part of the fix
5913 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5914 pEdcaParams->highPerformance;
5915 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5917 &pEdcaParams->acbe);
5918 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5919 &pEdcaParams->acbk);
5920 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5921 &pEdcaParams->acvi);
5922 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5923 &pEdcaParams->acvo);
5924 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 pWdaParams->pWdaContext = pWDA;
5926 /* Store remove key pointer, as this will be used for response */
5927 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 /* store Params pass it to WDI */
5929 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5931 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 if(IS_WDI_STATUS_FAILURE(status))
5933 {
5934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5935 "Failure in Update EDCA Params WDI API, free all the memory " );
5936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5937 vos_mem_free(pWdaParams);
5938 vos_mem_free(pEdcaParams);
5939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 return CONVERT_WDI2VOS_STATUS(status) ;
5941}
Jeff Johnson295189b2012-06-20 16:38:30 -07005942/*
5943 * FUNCTION: WDA_AddBAReqCallback
5944 * send ADD BA RSP back to PE
5945 */
5946void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5947 void* pUserData)
5948{
5949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5950 tWDA_CbContext *pWDA;
5951 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 if(NULL == pWdaParams)
5955 {
5956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005957 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 VOS_ASSERT(0) ;
5959 return ;
5960 }
5961 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5962 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5964 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005965 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 return ;
5968}
5969
Jeff Johnson295189b2012-06-20 16:38:30 -07005970/*
5971 * FUNCTION: WDA_ProcessAddBAReq
5972 * Request to WDI to Update the ADDBA REQ params.
5973 */
5974VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5975 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5976{
Jeff Johnson43971f52012-07-17 12:26:56 -07005977 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005978 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5979 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5980 sizeof(WDI_AddBAReqParamsType)) ;
5981 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005983 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 if(NULL == wdiAddBAReqParam)
5985 {
5986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005987 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 VOS_ASSERT(0);
5989 return VOS_STATUS_E_NOMEM;
5990 }
5991 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5992 if(NULL == pWdaParams)
5993 {
5994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005996 VOS_ASSERT(0);
5997 vos_mem_free(wdiAddBAReqParam);
5998 return VOS_STATUS_E_NOMEM;
5999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 do
6001 {
6002 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 wdiAddBaInfo->ucSTAIdx = staIdx ;
6004 wdiAddBaInfo->ucBaSessionID = baSessionID ;
6005 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 } while(0) ;
6007 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006008 pWdaParams->pWdaContext = pWDA;
6009 /* store Params pass it to WDI */
6010 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6011 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006012 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6013 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006014
Jeff Johnson43971f52012-07-17 12:26:56 -07006015 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 {
6017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006018 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6019 status = CONVERT_WDI2VOS_STATUS(wstatus);
6020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006021 vos_mem_free(pWdaParams);
6022 pAddBAReqParams->status = eSIR_FAILURE;
6023 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6024 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006025 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006026}
Jeff Johnson295189b2012-06-20 16:38:30 -07006027/*
6028 * FUNCTION: WDA_AddBASessionReqCallback
6029 * send ADD BA SESSION RSP back to PE/(or TL)
6030 */
6031void WDA_AddBASessionReqCallback(
6032 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6033{
6034 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6035 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6036 tWDA_CbContext *pWDA;
6037 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006039 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006040 if(NULL == pWdaParams)
6041 {
6042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006043 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 VOS_ASSERT(0) ;
6045 return ;
6046 }
6047 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6048 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006049 if( NULL == pAddBAReqParams )
6050 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006052 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6055 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 return ;
6057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 /*
6061 * if WDA in update TL state, update TL with BA session parama and send
6062 * another request to HAL(/WDI) (ADD_BA_REQ)
6063 */
6064
6065 if((VOS_STATUS_SUCCESS ==
6066 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6067 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6068 {
6069 /* Update TL with BA info received from HAL/WDI */
6070 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6071 wdiAddBaSession->usBaSessionID,
6072 wdiAddBaSession->ucSTAIdx,
6073 wdiAddBaSession->ucBaTID,
6074 wdiAddBaSession->ucBaBufferSize,
6075 wdiAddBaSession->ucWinSize,
6076 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6078 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6079 }
6080 else
6081 {
6082 pAddBAReqParams->status =
6083 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6084
6085 /* Setting Flag to indicate that Set BA is success */
6086 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6087 {
6088 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6089 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6090 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 /*Reset the WDA state to READY */
6095 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 return ;
6097}
6098
Jeff Johnson295189b2012-06-20 16:38:30 -07006099/*
6100 * FUNCTION: WDA_ProcessAddBASessionReq
6101 * Request to WDI to Update the ADDBA REQ params.
6102 */
6103VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6104 tAddBAParams *pAddBAReqParams)
6105{
6106 WDI_Status status = WDI_STATUS_SUCCESS ;
6107 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6108 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6109 sizeof(WDI_AddBASessionReqParamsType)) ;
6110 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006111 WLANTL_STAStateType tlSTAState = 0;
6112
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006114 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 if(NULL == wdiAddBASessionReqParam)
6116 {
6117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 VOS_ASSERT(0);
6120 return VOS_STATUS_E_NOMEM;
6121 }
6122 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6123 if(NULL == pWdaParams)
6124 {
6125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 VOS_ASSERT(0);
6128 vos_mem_free(wdiAddBASessionReqParam);
6129 return VOS_STATUS_E_NOMEM;
6130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 /*
6132 * Populate ADD BA parameters and pass these paarmeters to WDI.
6133 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6134 * the state to track if these is BA recipient case or BA initiator
6135 * case.
6136 */
6137 do
6138 {
6139 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6140 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6141 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6142 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6143 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6144 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6145 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6148 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6149 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6150 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6151 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006152 /* check the BA direction and update state accordingly */
6153 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6154 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6155 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6156
6157 }while(0) ;
6158 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 pWdaParams->pWdaContext = pWDA;
6160 /* Store ADD BA pointer, as this will be used for response */
6161 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6162 /* store Params pass it to WDI */
6163 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006164
6165 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6166 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6167 */
6168 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6169 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6170 {
6171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006172 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006173 status = WDI_STATUS_E_NOT_ALLOWED;
6174 pAddBAReqParams->status =
6175 CONVERT_WDI2SIR_STATUS(status) ;
6176 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6177 /*Reset the WDA state to READY */
6178 pWDA->wdaState = WDA_READY_STATE;
6179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6180 vos_mem_free(pWdaParams);
6181
6182 return CONVERT_WDI2VOS_STATUS(status) ;
6183 }
6184
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6186 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006187 if(IS_WDI_STATUS_FAILURE(status))
6188 {
6189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006190 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006192 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006193 pAddBAReqParams->status =
6194 CONVERT_WDI2SIR_STATUS(status) ;
6195 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006196 /*Reset the WDA state to READY */
6197 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 vos_mem_free(pWdaParams);
6200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006201 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006202}
Jeff Johnson295189b2012-06-20 16:38:30 -07006203/*
6204 * FUNCTION: WDA_DelBANotifyTL
6205 * send DEL BA IND to TL
6206 */
6207void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6208 tDelBAParams *pDelBAReqParams)
6209{
6210 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6211 //tSirMsgQ msg;
6212 vos_msg_t vosMsg;
6213 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 if(NULL == pDelBAInd)
6215 {
6216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006218 VOS_ASSERT(0) ;
6219 return;
6220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6222 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6223 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6224 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006225
Jeff Johnson295189b2012-06-20 16:38:30 -07006226
6227 vosMsg.type = WDA_DELETEBA_IND;
6228 vosMsg.bodyptr = pDelBAInd;
6229 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6230 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6231 {
6232 vosStatus = VOS_STATUS_E_BADMSG;
6233 }
6234}
Jeff Johnson295189b2012-06-20 16:38:30 -07006235/*
6236 * FUNCTION: WDA_DelBAReqCallback
6237 * send DEL BA RSP back to PE
6238 */
6239void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6240{
6241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6242 tWDA_CbContext *pWDA;
6243 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006245 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006246 if(NULL == pWdaParams)
6247 {
6248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006249 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 VOS_ASSERT(0) ;
6251 return ;
6252 }
6253 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6254 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 /* Notify TL about DEL BA in case of recipinet */
6256 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6257 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6258 {
6259 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6260 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 /*
6262 * No respone required for WDA_DELBA_IND so just free the request
6263 * param here
6264 */
6265 vos_mem_free(pDelBAReqParams);
6266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6267 vos_mem_free(pWdaParams);
6268 return ;
6269}
6270
Jeff Johnson295189b2012-06-20 16:38:30 -07006271/*
6272 * FUNCTION: WDA_ProcessDelBAReq
6273 * Request to WDI to Update the DELBA REQ params.
6274 */
6275VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6276 tDelBAParams *pDelBAReqParams)
6277{
6278 WDI_Status status = WDI_STATUS_SUCCESS ;
6279 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6280 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6281 sizeof(WDI_DelBAReqParamsType)) ;
6282 tWDA_ReqParams *pWdaParams ;
6283 tANI_U16 staIdx = 0;
6284 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006286 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 if(NULL == wdiDelBAReqParam)
6288 {
6289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 VOS_ASSERT(0);
6292 return VOS_STATUS_E_NOMEM;
6293 }
6294 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6295 if(NULL == pWdaParams)
6296 {
6297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 VOS_ASSERT(0);
6300 vos_mem_free(wdiDelBAReqParam);
6301 return VOS_STATUS_E_NOMEM;
6302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6304 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6305 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6306 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 pWdaParams->pWdaContext = pWDA;
6308 /* Store DEL BA pointer, as this will be used for response */
6309 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 /* store Params pass it to WDI */
6311 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6313 * maintained in WDA, so that WDA can retry for another BA session
6314 */
6315 staIdx = pDelBAReqParams->staIdx;
6316 tid = pDelBAReqParams->baTID;
6317 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 status = WDI_DelBAReq(wdiDelBAReqParam,
6319 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 if(IS_WDI_STATUS_FAILURE(status))
6321 {
6322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6323 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6325 vos_mem_free(pWdaParams->wdaMsgParam);
6326 vos_mem_free(pWdaParams);
6327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006329}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006330
6331/*
6332 * FUNCTION: WDA_UpdateChReqCallback
6333 *
6334 */
6335void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6336{
Siddharth Bhala006c122014-05-03 12:13:27 +05306337 tWDA_ReqParams *pWdaParams;
6338 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6339 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6340 WDI_UpdateChannelReqinfoType *pChanInfoType;
6341 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006342
6343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6344 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306345 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006346 {
6347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306348 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006349 VOS_ASSERT(0);
6350 return;
6351 }
6352
Siddharth Bhala006c122014-05-03 12:13:27 +05306353 pWdaParams = (tWDA_ReqParams *)pUserData;
6354 pwdiUpdateChReqParam =
6355 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6356 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6357 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6358 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006359 /*
6360 * currently there is no response message is expected between PE and
6361 * WDA, Failure return from WDI is a ASSERT condition
6362 */
6363 vos_mem_free(pChanInfoType);
6364 vos_mem_free(pChanList);
6365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6366 vos_mem_free(pWdaParams);
6367
6368 return;
6369}
6370
6371/*
6372 * FUNCTION: WDA_ProcessUpdateChannelList
6373 * Request to WDI to Update the ChannelList params.
6374 */
6375VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6376 tSirUpdateChanList *pChanList)
6377{
6378 WDI_Status status = WDI_STATUS_SUCCESS;
6379 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6380 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6381 WDI_UpdateChannelReqinfoType *pChanInfoType;
6382 tWDA_ReqParams *pWdaParams;
6383 wpt_uint8 i;
6384
6385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6386 "------> %s " ,__func__);
6387 if(NULL == pChanList)
6388 {
6389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6390 "%s: NULL pChanList", __func__);
6391 VOS_ASSERT(0);
6392 return VOS_STATUS_E_INVAL;
6393 }
6394
6395 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6396 {
6397 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6398 "Update channel list capability Not Supported");
6399 vos_mem_free(pChanList);
6400 return VOS_STATUS_E_INVAL;
6401 }
6402
6403 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6404 sizeof(WDI_UpdateChReqParamsType));
6405 if(NULL == pwdiUpdateChReqParam)
6406 {
6407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6408 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6409 __func__);
6410 VOS_ASSERT(0);
6411 vos_mem_free(pChanList);
6412 return VOS_STATUS_E_NOMEM;
6413 }
6414 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6415 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6416 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6417 pChanList->numChan);
6418 if(NULL == pChanInfoType)
6419 {
6420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6421 "%s: VOS MEM Alloc Failure", __func__);
6422 VOS_ASSERT(0);
6423 vos_mem_free(pChanList);
6424 vos_mem_free(pwdiUpdateChReqParam);
6425 return VOS_STATUS_E_NOMEM;
6426 }
6427 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6428 * pChanList->numChan);
6429 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6430
6431 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6432 if(NULL == pWdaParams)
6433 {
6434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6435 "%s: VOS MEM Alloc Failure", __func__);
6436 VOS_ASSERT(0);
6437 vos_mem_free(pChanList);
6438 vos_mem_free(pChanInfoType);
6439 vos_mem_free(pwdiUpdateChReqParam);
6440 return VOS_STATUS_E_NOMEM;
6441 }
6442 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6443
6444 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6445 {
6446 pChanInfoType->mhz =
6447 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6448
6449 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6450 pChanInfoType->band_center_freq2 = 0;
6451
6452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6453 "chan[%d] = %u", i, pChanInfoType->mhz);
6454 if (pChanList->chanParam[i].dfsSet)
6455 {
6456 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6458 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6459 pChanList->chanParam[i].dfsSet);
6460 }
6461
6462 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6463 {
6464 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6465 }
6466 else
6467 {
6468 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6469 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6470 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6471 }
6472
6473 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6474 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6475
6476 pChanInfoType++;
6477 }
6478
6479 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6480 pWdaParams->pWdaContext = pWDA;
6481 pWdaParams->wdaMsgParam = (void *)pChanList;
6482 /* store Params pass it to WDI */
6483 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6484 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6485 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6486 if(IS_WDI_STATUS_FAILURE(status))
6487 {
6488 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6489 "Failure in Update Channel REQ Params WDI API, free all the memory");
6490 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6491 vos_mem_free(pwdiUpdateChReqParam);
6492 vos_mem_free(pWdaParams->wdaMsgParam);
6493 vos_mem_free(pWdaParams);
6494 }
6495 return CONVERT_WDI2VOS_STATUS(status);
6496}
6497
Jeff Johnson295189b2012-06-20 16:38:30 -07006498/*
6499 * FUNCTION: WDA_AddTSReqCallback
6500 * send ADD TS RSP back to PE
6501 */
6502void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6503{
6504 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6505 tWDA_CbContext *pWDA;
6506 tAddTsParams *pAddTsReqParams;
6507
6508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006509 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006510 if(NULL == pWdaParams)
6511 {
6512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006513 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 VOS_ASSERT(0) ;
6515 return ;
6516 }
6517 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6518 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6520 vos_mem_free(pWdaParams);
6521
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006522 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006523 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 return ;
6525}
6526
Jeff Johnson295189b2012-06-20 16:38:30 -07006527/*
6528 * FUNCTION: WDA_ProcessAddTSReq
6529 * Request to WDI to Update the ADD TS REQ params.
6530 */
6531VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6532 tAddTsParams *pAddTsReqParams)
6533{
6534 WDI_Status status = WDI_STATUS_SUCCESS ;
6535 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6536 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6537 sizeof(WDI_AddTSReqParamsType)) ;
6538 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006540 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006541 if(NULL == wdiAddTSReqParam)
6542 {
6543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006545 VOS_ASSERT(0);
6546 return VOS_STATUS_E_NOMEM;
6547 }
6548 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6549 if(NULL == pWdaParams)
6550 {
6551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006553 VOS_ASSERT(0);
6554 vos_mem_free(wdiAddTSReqParam);
6555 return VOS_STATUS_E_NOMEM;
6556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6558 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 //TS IE
6560 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6561 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6562 pAddTsReqParams->tspec.length;
6563
6564 //TS IE : TS INFO : TRAFFIC
6565 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6566 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6567 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6568 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6569 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6570 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6571 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6572 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6573 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6574 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6575 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6576 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6577 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6578 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6579 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6580 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6581
6582 //TS IE : TS INFO : SCHEDULE
6583 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6584 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6585 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6586 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006587 //TS IE
6588 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6589 pAddTsReqParams->tspec.nomMsduSz;
6590 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6591 pAddTsReqParams->tspec.maxMsduSz;
6592 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6593 pAddTsReqParams->tspec.minSvcInterval;
6594 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6595 pAddTsReqParams->tspec.maxSvcInterval;
6596 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6597 pAddTsReqParams->tspec.inactInterval;
6598 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6599 pAddTsReqParams->tspec.suspendInterval;
6600 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6601 pAddTsReqParams->tspec.svcStartTime;
6602 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6603 pAddTsReqParams->tspec.minDataRate;
6604 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6605 pAddTsReqParams->tspec.meanDataRate;
6606 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6607 pAddTsReqParams->tspec.peakDataRate;
6608 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6609 pAddTsReqParams->tspec.maxBurstSz;
6610 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6611 pAddTsReqParams->tspec.delayBound;
6612 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6613 pAddTsReqParams->tspec.minPhyRate;
6614 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6615 pAddTsReqParams->tspec.surplusBw;
6616 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6617 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 /* TODO: tAddTsParams doesn't have the following fields */
6619#if 0
6620 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6621 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6622 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6623 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6624#endif
6625 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6626
6627 pWdaParams->pWdaContext = pWDA;
6628 /* Store ADD TS pointer, as this will be used for response */
6629 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006630 /* store Params pass it to WDI */
6631 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 status = WDI_AddTSReq(wdiAddTSReqParam,
6633 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006634 if(IS_WDI_STATUS_FAILURE(status))
6635 {
6636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6637 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6639 vos_mem_free(pWdaParams);
6640 pAddTsReqParams->status = eSIR_FAILURE ;
6641 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6642 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006643 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006644}
6645
Jeff Johnson295189b2012-06-20 16:38:30 -07006646/*
6647 * FUNCTION: WDA_DelTSReqCallback
6648 * send DEL TS RSP back to PE
6649 */
6650void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6651{
6652 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006654 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6656 vos_mem_free(pWdaParams->wdaMsgParam) ;
6657 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 /*
6659 * No respone required for WDA_DEL_TS_REQ so just free the request
6660 * param here
6661 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 return ;
6663}
6664
Jeff Johnson295189b2012-06-20 16:38:30 -07006665/*
6666 * FUNCTION: WDA_ProcessDelTSReq
6667 * Request to WDI to Update the DELTS REQ params.
6668 */
6669VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6670 tDelTsParams *pDelTSReqParams)
6671{
6672 WDI_Status status = WDI_STATUS_SUCCESS ;
6673 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6674 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6675 sizeof(WDI_DelTSReqParamsType)) ;
6676 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006678 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 if(NULL == wdiDelTSReqParam)
6680 {
6681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006683 VOS_ASSERT(0);
6684 return VOS_STATUS_E_NOMEM;
6685 }
6686 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6687 if(NULL == pWdaParams)
6688 {
6689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006690 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 VOS_ASSERT(0);
6692 vos_mem_free(wdiDelTSReqParam);
6693 return VOS_STATUS_E_NOMEM;
6694 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6696 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6697 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6698 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6699 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006700 pWdaParams->pWdaContext = pWDA;
6701 /* Store DEL TS pointer, as this will be used for response */
6702 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 /* store Params pass it to WDI */
6704 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006705 status = WDI_DelTSReq(wdiDelTSReqParam,
6706 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 if(IS_WDI_STATUS_FAILURE(status))
6708 {
6709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6710 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6712 vos_mem_free(pWdaParams->wdaMsgParam);
6713 vos_mem_free(pWdaParams);
6714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006716}
Jeff Johnson295189b2012-06-20 16:38:30 -07006717/*
6718 * FUNCTION: WDA_UpdateBeaconParamsCallback
6719 * Free the memory. No need to send any response to PE in this case
6720 */
6721void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6722{
6723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006725 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 if(NULL == pWdaParams)
6727 {
6728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006729 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006730 VOS_ASSERT(0) ;
6731 return ;
6732 }
6733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6734 vos_mem_free(pWdaParams->wdaMsgParam) ;
6735 vos_mem_free(pWdaParams);
6736 /*
6737 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6738 * param here
6739 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 return ;
6741}
Jeff Johnson295189b2012-06-20 16:38:30 -07006742/*
6743 * FUNCTION: WDA_ProcessUpdateBeaconParams
6744 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6745 */
6746VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6747 tUpdateBeaconParams *pUpdateBeaconParams)
6748{
6749 WDI_Status status = WDI_STATUS_SUCCESS ;
6750 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6751 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6752 sizeof(WDI_UpdateBeaconParamsType)) ;
6753 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006755 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 if(NULL == wdiUpdateBeaconParams)
6757 {
6758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006759 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 VOS_ASSERT(0);
6761 return VOS_STATUS_E_NOMEM;
6762 }
6763 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6764 if(NULL == pWdaParams)
6765 {
6766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006767 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 VOS_ASSERT(0);
6769 vos_mem_free(wdiUpdateBeaconParams);
6770 return VOS_STATUS_E_NOMEM;
6771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6773 pUpdateBeaconParams->bssIdx;
6774 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6775 pUpdateBeaconParams->fShortPreamble;
6776 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6777 pUpdateBeaconParams->fShortSlotTime;
6778 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6779 pUpdateBeaconParams->beaconInterval;
6780 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6781 pUpdateBeaconParams->llaCoexist;
6782 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6783 pUpdateBeaconParams->llbCoexist;
6784 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6785 pUpdateBeaconParams->llgCoexist;
6786 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6787 pUpdateBeaconParams->ht20MhzCoexist;
6788 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6789 pUpdateBeaconParams->llnNonGFCoexist;
6790 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6791 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6792 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6793 pUpdateBeaconParams->fRIFSMode;
6794 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6795 pUpdateBeaconParams->paramChangeBitmap;
6796 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6797
6798 pWdaParams->pWdaContext = pWDA;
6799 /* Store UpdateBeacon Req pointer, as this will be used for response */
6800 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006801 /* store Params pass it to WDI */
6802 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6804 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6805 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 if(IS_WDI_STATUS_FAILURE(status))
6807 {
6808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6809 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6811 vos_mem_free(pWdaParams->wdaMsgParam);
6812 vos_mem_free(pWdaParams);
6813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006815}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006816#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006817/*
6818 * FUNCTION: WDA_TSMStatsReqCallback
6819 * send TSM Stats RSP back to PE
6820 */
6821void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6822{
6823 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6824 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006825 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6826 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006827
6828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006829 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 if(NULL == pWdaParams)
6831 {
6832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006833 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 VOS_ASSERT(0) ;
6835 return ;
6836 }
6837 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006838 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6839
6840 if(NULL == pGetTsmStatsReqParams)
6841 {
6842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6843 "%s: pGetTsmStatsReqParams received NULL", __func__);
6844 VOS_ASSERT(0);
6845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6846 vos_mem_free(pWdaParams);
6847 return;
6848 }
6849
6850 pTsmRspParams =
6851 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 if( NULL == pTsmRspParams )
6853 {
6854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006855 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 VOS_ASSERT( 0 );
6857 return ;
6858 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006859 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6860 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6861 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6862
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6864 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6865 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6866 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6867 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6868 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6869 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6870 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6871 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6872 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006873
6874 /* Assign get tsm stats req req (backup) in to the response */
6875 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6876
6877 /* free WDI command buffer */
6878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6879 vos_mem_free(pWdaParams);
6880
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 return ;
6883}
6884
6885
Jeff Johnson295189b2012-06-20 16:38:30 -07006886/*
6887 * FUNCTION: WDA_ProcessTsmStatsReq
6888 * Request to WDI to get the TSM Stats params.
6889 */
6890VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006891 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006892{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006893 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006894 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006895 tWDA_ReqParams *pWdaParams = NULL;
6896 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6897
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006899 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006900 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6901 sizeof(WDI_TSMStatsReqParamsType));
6902 if(NULL == wdiTSMReqParam)
6903 {
6904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006905 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 VOS_ASSERT(0);
6907 return VOS_STATUS_E_NOMEM;
6908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6910 if(NULL == pWdaParams)
6911 {
6912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 VOS_ASSERT(0);
6915 vos_mem_free(wdiTSMReqParam);
6916 return VOS_STATUS_E_NOMEM;
6917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6919 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6920 pTsmStats->bssId,
6921 sizeof(wpt_macAddr));
6922 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6923
6924 pWdaParams->pWdaContext = pWDA;
6925 /* Store TSM Stats pointer, as this will be used for response */
6926 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006927 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 status = WDI_TSMStatsReq(wdiTSMReqParam,
6929 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 if(IS_WDI_STATUS_FAILURE(status))
6931 {
6932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6933 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006934 vos_mem_free(pWdaParams);
6935
6936 pGetTsmStatsRspParams =
6937 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6938 if(NULL == pGetTsmStatsRspParams)
6939 {
6940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6941 "%s: VOS MEM Alloc Failure", __func__);
6942 VOS_ASSERT(0);
6943 vos_mem_free(pTsmStats);
6944 return VOS_STATUS_E_NOMEM;
6945 }
6946 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6947 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6948 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6949
6950 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 return CONVERT_WDI2VOS_STATUS(status) ;
6953}
6954#endif
6955/*
6956 * FUNCTION: WDA_SendBeaconParamsCallback
6957 * No need to send any response to PE in this case
6958 */
6959void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6960{
6961
Jeff Johnson295189b2012-06-20 16:38:30 -07006962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006963 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 return ;
6965}
Jeff Johnson295189b2012-06-20 16:38:30 -07006966/*
6967 * FUNCTION: WDA_ProcessSendBeacon
6968 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6969 * start beacon trasmission
6970 */
6971VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6972 tSendbeaconParams *pSendbeaconParams)
6973{
6974 WDI_Status status = WDI_STATUS_SUCCESS ;
6975 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006977 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6979 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6980 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6981 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006982 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6983 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306984 /* p2pIeOffset should be atleast greater than timIeOffset */
6985 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6986 (pSendbeaconParams->p2pIeOffset <
6987 pSendbeaconParams->timIeOffset))
6988 {
6989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6990 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6991 VOS_ASSERT( 0 );
6992 return WDI_STATUS_E_FAILURE;
6993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6995 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 /* Copy the beacon template to local buffer */
6997 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6998 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6999 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7000
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7002 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 if(IS_WDI_STATUS_FAILURE(status))
7004 {
7005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7006 "Failure in SEND BEACON REQ Params WDI API" );
7007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 vos_mem_free(pSendbeaconParams);
7009 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007010}
Jeff Johnson295189b2012-06-20 16:38:30 -07007011/*
7012 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7013 * No need to send any response to PE in this case
7014 */
7015void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7016{
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007018 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 return ;
7020}
7021
Jeff Johnson295189b2012-06-20 16:38:30 -07007022/*
7023 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7024 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7025 * send probe response
7026 */
7027VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7028 tSendProbeRespParams *pSendProbeRspParams)
7029{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007030 WDI_Status status = WDI_STATUS_SUCCESS;
7031 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7032 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007034 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007035
7036 if (!wdiSendProbeRspParam)
7037 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7038
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007040 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007042 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 /* Copy the Probe Response template to local buffer */
7045 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007046 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 pSendProbeRspParams->pProbeRespTemplate,
7048 pSendProbeRspParams->probeRespTemplateLen);
7049 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007050 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7052 WDI_PROBE_REQ_BITMAP_IE_LEN);
7053
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007054 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007055
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007056 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 if(IS_WDI_STATUS_FAILURE(status))
7059 {
7060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7061 "Failure in SEND Probe RSP Params WDI API" );
7062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007064 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007066}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007067#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007068/*
7069 * FUNCTION: WDA_SetMaxTxPowerCallBack
7070 * send the response to PE with power value received from WDI
7071 */
7072void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7073 void* pUserData)
7074{
7075 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7076 tWDA_CbContext *pWDA = NULL;
7077 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7078
7079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007080 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 if(NULL == pWdaParams)
7082 {
7083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007084 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007085 VOS_ASSERT(0) ;
7086 return ;
7087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7089 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 if( NULL == pMaxTxPowerParams )
7091 {
7092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007093 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007094 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7096 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 return ;
7098 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007099
Jeff Johnson295189b2012-06-20 16:38:30 -07007100
7101 /*need to free memory for the pointers used in the
7102 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7104 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007105 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007106
Jeff Johnson295189b2012-06-20 16:38:30 -07007107
7108 /* send response to UMAC*/
7109 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7110
7111 return;
7112}
Jeff Johnson295189b2012-06-20 16:38:30 -07007113/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007114 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 * Request to WDI to send set Max Tx Power Request
7116 */
7117 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7118 tMaxTxPowerParams *MaxTxPowerParams)
7119{
7120 WDI_Status status = WDI_STATUS_SUCCESS;
7121 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7122 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007123
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007125 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007126
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7128 sizeof(WDI_SetMaxTxPowerParamsType));
7129 if(NULL == wdiSetMaxTxPowerParams)
7130 {
7131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 VOS_ASSERT(0);
7134 return VOS_STATUS_E_NOMEM;
7135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7137 if(NULL == pWdaParams)
7138 {
7139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 vos_mem_free(wdiSetMaxTxPowerParams);
7142 VOS_ASSERT(0);
7143 return VOS_STATUS_E_NOMEM;
7144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007145 /* Copy.Max.Tx.Power Params to WDI structure */
7146 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7147 MaxTxPowerParams->bssId,
7148 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7150 MaxTxPowerParams->selfStaMacAddr,
7151 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7153 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 pWdaParams->pWdaContext = pWDA;
7156 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 /* store Params pass it to WDI */
7158 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7160 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 if(IS_WDI_STATUS_FAILURE(status))
7162 {
7163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7164 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7166 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007167 /* send response to UMAC*/
7168 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 }
7170 return CONVERT_WDI2VOS_STATUS(status);
7171
7172}
Jeff Johnson295189b2012-06-20 16:38:30 -07007173#endif
schang86c22c42013-03-13 18:41:24 -07007174
7175/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007176 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7177 * send the response to PE with power value received from WDI
7178 */
7179void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7180 *pwdiSetMaxTxPowerPerBandRsp,
7181 void* pUserData)
7182{
7183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7184 tWDA_CbContext *pWDA = NULL;
7185 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7186
7187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7188 "<------ %s ", __func__);
7189 if (NULL == pWdaParams)
7190 {
7191 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7192 "%s: pWdaParams received NULL", __func__);
7193 VOS_ASSERT(0);
7194 return ;
7195 }
7196 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7197 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7198 if ( NULL == pMxTxPwrPerBandParams )
7199 {
7200 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7201 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7202 VOS_ASSERT(0);
7203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7204 vos_mem_free(pWdaParams);
7205 return;
7206 }
7207
7208 /*need to free memory for the pointers used in the
7209 WDA Process.Set Max Tx Power Req function*/
7210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7211 vos_mem_free(pWdaParams);
7212 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7213
7214 /* send response to UMAC*/
7215 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7216 pMxTxPwrPerBandParams, 0);
7217
7218 return;
7219}
7220
7221/*
7222 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7223 * Request to WDI to send set Max Tx Power Per band Request
7224 */
7225 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7226 tMaxTxPowerPerBandParams
7227 *MaxTxPowerPerBandParams)
7228{
7229 WDI_Status status = WDI_STATUS_SUCCESS;
7230 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7231 tWDA_ReqParams *pWdaParams = NULL;
7232
7233 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7234 "------> %s ", __func__);
7235
7236 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7237 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7238
7239 if (NULL == wdiSetMxTxPwrPerBandParams)
7240 {
7241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7242 "%s: VOS MEM Alloc Failure", __func__);
7243 VOS_ASSERT(0);
7244 return VOS_STATUS_E_NOMEM;
7245 }
7246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7247 if (NULL == pWdaParams)
7248 {
7249 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7250 "%s: VOS MEM Alloc Failure", __func__);
7251 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7252 VOS_ASSERT(0);
7253 return VOS_STATUS_E_NOMEM;
7254 }
7255 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7256 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7257 MaxTxPowerPerBandParams->bandInfo;
7258 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7259 MaxTxPowerPerBandParams->power;
7260 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7261 pWdaParams->pWdaContext = pWDA;
7262 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7263 /* store Params pass it to WDI */
7264 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7265 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7266 WDA_SetMaxTxPowerPerBandCallBack,
7267 pWdaParams);
7268 if (IS_WDI_STATUS_FAILURE(status))
7269 {
7270 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7271 "Failure in SET MAX TX Power REQ Params WDI API,"
7272 " free all the memory");
7273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7274 vos_mem_free(pWdaParams);
7275 /* send response to UMAC*/
7276 WDA_SendMsg(pWDA,
7277 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7278 MaxTxPowerPerBandParams, 0);
7279 }
7280 return CONVERT_WDI2VOS_STATUS(status);
7281}
7282
7283/*
schang86c22c42013-03-13 18:41:24 -07007284 * FUNCTION: WDA_SetTxPowerCallBack
7285 * send the response to PE with power value received from WDI
7286 */
7287void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7288 void* pUserData)
7289{
7290 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7291 tWDA_CbContext *pWDA = NULL;
7292 tSirSetTxPowerReq *pTxPowerParams = NULL;
7293
7294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7295 "<------ %s ", __func__);
7296 if(NULL == pWdaParams)
7297 {
7298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7299 "%s: pWdaParams received NULL", __func__);
7300 VOS_ASSERT(0) ;
7301 return ;
7302 }
7303 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7304 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7305 if(NULL == pTxPowerParams)
7306 {
7307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7308 "%s: pTxPowerParams received NULL " ,__func__);
7309 VOS_ASSERT(0);
7310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7311 vos_mem_free(pWdaParams);
7312 return ;
7313 }
7314
7315 /*need to free memory for the pointers used in the
7316 WDA Process.Set Max Tx Power Req function*/
7317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7318 vos_mem_free(pWdaParams);
7319
7320 /* send response to UMAC*/
7321 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7322 return;
7323}
7324
7325/*
7326 * FUNCTION: WDA_ProcessSetTxPowerReq
7327 * Request to WDI to send set Tx Power Request
7328 */
7329 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7330 tSirSetTxPowerReq *txPowerParams)
7331{
7332 WDI_Status status = WDI_STATUS_SUCCESS;
7333 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7334 tWDA_ReqParams *pWdaParams = NULL;
7335
7336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7337 "------> %s ", __func__);
7338
7339 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7340 sizeof(WDI_SetTxPowerParamsType));
7341 if(NULL == wdiSetTxPowerParams)
7342 {
7343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7344 "%s: VOS MEM Alloc Failure", __func__);
7345 VOS_ASSERT(0);
7346 return VOS_STATUS_E_NOMEM;
7347 }
7348 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7349 if(NULL == pWdaParams)
7350 {
7351 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7352 "%s: VOS MEM Alloc Failure", __func__);
7353 vos_mem_free(wdiSetTxPowerParams);
7354 VOS_ASSERT(0);
7355 return VOS_STATUS_E_NOMEM;
7356 }
7357 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7358 txPowerParams->bssIdx;
7359 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7360 txPowerParams->mwPower;
7361 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7362 pWdaParams->pWdaContext = pWDA;
7363 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7364 /* store Params pass it to WDI */
7365 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7366 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7367 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7368 if(IS_WDI_STATUS_FAILURE(status))
7369 {
7370 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7371 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7373 vos_mem_free(pWdaParams);
7374 /* send response to UMAC*/
7375 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7376 }
7377 return CONVERT_WDI2VOS_STATUS(status);
7378}
7379
Jeff Johnson295189b2012-06-20 16:38:30 -07007380/*
7381 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7382 * Free the memory. No need to send any response to PE in this case
7383 */
7384void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7385{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007386 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7387
Jeff Johnson295189b2012-06-20 16:38:30 -07007388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007389 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007390
7391 if(NULL == pWdaParams)
7392 {
7393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007394 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007395 VOS_ASSERT(0) ;
7396 return ;
7397 }
7398
7399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7400 vos_mem_free(pWdaParams->wdaMsgParam) ;
7401 vos_mem_free(pWdaParams);
7402
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 /*
7404 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7405 * so just free the request param here
7406 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 return ;
7408}
7409
Jeff Johnson295189b2012-06-20 16:38:30 -07007410/*
7411 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7412 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7413 */
7414VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7415 tP2pPsParams *pP2pPsConfigParams)
7416{
7417 WDI_Status status = WDI_STATUS_SUCCESS ;
7418 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7419 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7420 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007421 tWDA_ReqParams *pWdaParams = NULL;
7422
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007424 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007425 if(NULL == wdiSetP2PGONOAReqParam)
7426 {
7427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 VOS_ASSERT(0);
7430 return VOS_STATUS_E_NOMEM;
7431 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007432
7433 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7434 if(NULL == pWdaParams)
7435 {
7436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007437 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007438 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007439 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007440 VOS_ASSERT(0);
7441 return VOS_STATUS_E_NOMEM;
7442 }
7443
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7445 pP2pPsConfigParams->opp_ps;
7446 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7447 pP2pPsConfigParams->ctWindow;
7448 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7449 pP2pPsConfigParams->count;
7450 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7451 pP2pPsConfigParams->duration;
7452 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7453 pP2pPsConfigParams->interval;
7454 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7455 pP2pPsConfigParams->single_noa_duration;
7456 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7457 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007458
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7460 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007461 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7462
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007464 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7465 pWdaParams->pWdaContext = pWDA;
7466
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007468 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7469
Jeff Johnson295189b2012-06-20 16:38:30 -07007470 if(IS_WDI_STATUS_FAILURE(status))
7471 {
7472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7473 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7475 vos_mem_free(pWdaParams->wdaMsgParam);
7476 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 return CONVERT_WDI2VOS_STATUS(status);
7479
Jeff Johnson295189b2012-06-20 16:38:30 -07007480}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307481
7482#ifdef FEATURE_WLAN_TDLS
7483/*
7484 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7485 * Free the memory. No need to send any response to PE in this case
7486 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307487void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7488 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307489{
7490 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7491 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307492 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307493
7494
7495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7496 "<------ %s " ,__func__);
7497 if(NULL == pWdaParams)
7498 {
7499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7500 "%s: pWdaParams received NULL", __func__);
7501 VOS_ASSERT(0) ;
7502 return ;
7503 }
7504 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7505
7506 if(NULL == pWdaParams)
7507 {
7508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7509 "%s: pWdaParams received NULL", __func__);
7510 VOS_ASSERT(0) ;
7511 return ;
7512 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307513 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7514 if( NULL == pTdlsLinkEstablishParams )
7515 {
7516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7517 "%s: pTdlsLinkEstablishParams "
7518 "received NULL " ,__func__);
7519 VOS_ASSERT(0);
7520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7521 vos_mem_free(pWdaParams);
7522 return ;
7523 }
7524 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7525 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307527 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307528 /* send response to UMAC*/
7529 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7530
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307531 return ;
7532}
7533
7534VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7535 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7536{
7537 WDI_Status status = WDI_STATUS_SUCCESS ;
7538 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7539 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7540 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7541 tWDA_ReqParams *pWdaParams = NULL;
7542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7543 "------> %s " ,__func__);
7544 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7545 {
7546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7547 "%s: VOS MEM Alloc Failure", __func__);
7548 VOS_ASSERT(0);
7549 return VOS_STATUS_E_NOMEM;
7550 }
7551 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7552 if(NULL == pWdaParams)
7553 {
7554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7555 "%s: VOS MEM Alloc Failure", __func__);
7556 vos_mem_free(pTdlsLinkEstablishParams);
7557 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7558 VOS_ASSERT(0);
7559 return VOS_STATUS_E_NOMEM;
7560 }
7561 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307562 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307563 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307564 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307565 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307566 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307567 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307568 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307569 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307570 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307571 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7572 pTdlsLinkEstablishParams->isOffChannelSupported;
7573
7574 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7575 pTdlsLinkEstablishParams->validChannels,
7576 pTdlsLinkEstablishParams->validChannelsLen);
7577
7578 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7579 pTdlsLinkEstablishParams->validChannelsLen;
7580
7581 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7582 pTdlsLinkEstablishParams->validOperClasses,
7583 pTdlsLinkEstablishParams->validOperClassesLen);
7584 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7585 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307586
7587 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7588 /* Store msg pointer from PE, as this will be used for response */
7589 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7590 /* store Params pass it to WDI */
7591 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7592 pWdaParams->pWdaContext = pWDA;
7593
7594 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7595 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7596 WDA_SetTDLSLinkEstablishReqParamsCallback,
7597 pWdaParams);
7598 if(IS_WDI_STATUS_FAILURE(status))
7599 {
7600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7601 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7603 vos_mem_free(pWdaParams->wdaMsgParam);
7604 vos_mem_free(pWdaParams);
7605 }
7606 return CONVERT_WDI2VOS_STATUS(status);
7607}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307608
7609// tdlsoffchan
7610void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7611 void* pUserData)
7612{
7613 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7614 tWDA_CbContext *pWDA = NULL;
7615 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7616
7617
7618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7619 "<------ %s " ,__func__);
7620 if(NULL == pWdaParams)
7621 {
7622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7623 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307624 VOS_ASSERT(0) ;
7625 return ;
7626 }
7627 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7628
Atul Mittal60bd4292014-08-14 12:19:27 +05307629 if(NULL == pWdaParams)
7630 {
7631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7632 "%s: pWdaParams received NULL", __func__);
7633 VOS_ASSERT(0) ;
7634 return ;
7635 }
Atul Mittalc0f739f2014-07-31 13:47:47 +05307636 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307637 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307638 {
7639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7640 "%s: pTdlsChanSwitchParams "
7641 "received NULL " ,__func__);
7642 VOS_ASSERT(0);
7643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7644 vos_mem_free(pWdaParams);
7645 return ;
7646 }
7647 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7648 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7650 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307651 /* send response to UMAC*/
7652 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307653
7654 return ;
7655}
7656VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7657 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7658{
7659 WDI_Status status = WDI_STATUS_SUCCESS ;
7660 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7661 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7662 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7663 tWDA_ReqParams *pWdaParams = NULL;
7664
7665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7666 "Enter: %s ",__func__);
7667 if(NULL == wdiSetTDLSChanSwitchReqParam)
7668 {
7669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7670 "%s: VOS MEM Alloc Failure", __func__);
7671 VOS_ASSERT(0);
7672 return VOS_STATUS_E_NOMEM;
7673 }
7674
7675 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7676 if(NULL == pWdaParams)
7677 {
7678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7679 "%s: VOS MEM Alloc Failure", __func__);
7680 vos_mem_free(pTdlsChanSwitchParams);
7681 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7682 VOS_ASSERT(0);
7683 return VOS_STATUS_E_NOMEM;
7684 }
7685 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7686 pTdlsChanSwitchParams->staIdx;
7687 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7688 pTdlsChanSwitchParams->tdlsSwMode;
7689 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7690 pTdlsChanSwitchParams->operClass;
7691 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7692 pTdlsChanSwitchParams->tdlsOffCh;
7693 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7694 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7695
7696
7697 /* Store msg pointer from PE, as this will be used for response */
7698 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7699 /* store Params pass it to WDI */
7700 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7701 pWdaParams->pWdaContext = pWDA;
7702 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7703 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7704 WDA_SetTDLSChanSwitchReqParamsCallback,
7705 pWdaParams);
7706 if(IS_WDI_STATUS_FAILURE(status))
7707 {
7708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7709 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7711 vos_mem_free(pWdaParams->wdaMsgParam);
7712 vos_mem_free(pWdaParams);
7713 }
7714 return CONVERT_WDI2VOS_STATUS(status);
7715}
7716#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307717
7718
Jeff Johnson295189b2012-06-20 16:38:30 -07007719#ifdef WLAN_FEATURE_VOWIFI_11R
7720/*
7721 * FUNCTION: WDA_AggrAddTSReqCallback
7722 * send ADD AGGREGATED TS RSP back to PE
7723 */
7724void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7725{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007726 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7727 tWDA_CbContext *pWDA;
7728 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007729 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007731 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007732 if(NULL == pWdaParams)
7733 {
7734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007735 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007736 VOS_ASSERT(0) ;
7737 return ;
7738 }
7739
7740 pWDA = pWdaParams->pWdaContext;
7741 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742
7743 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7744 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007745 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007748
7749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7750 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 return ;
7752}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007753/*
7754 * FUNCTION: WDA_ProcessAddTSReq
7755 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7756 */
7757VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7758 tAggrAddTsParams *pAggrAddTsReqParams)
7759{
7760 WDI_Status status = WDI_STATUS_SUCCESS ;
7761 int i;
7762 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007763 tWDA_ReqParams *pWdaParams = NULL;
7764
7765
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__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7769 sizeof(WDI_AggrAddTSReqParamsType)) ;
7770 if(NULL == wdiAggrAddTSReqParam)
7771 {
7772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007773 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 VOS_ASSERT(0);
7775 return VOS_STATUS_E_NOMEM;
7776 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007777
7778
7779 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7780 if(NULL == pWdaParams)
7781 {
7782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007783 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007784 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007785 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007786 VOS_ASSERT(0);
7787 return VOS_STATUS_E_NOMEM;
7788 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7790 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7791 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7793 {
7794 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7795 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7796 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7798 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7799 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7800 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7801 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7802 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7803 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7804 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7805 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7806 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7807 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7808 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7809 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7810 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7811 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7812 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7814 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7816 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7817 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7818 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7819 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7820 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7821 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7822 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7823 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7824 pAggrAddTsReqParams->tspec[i].inactInterval;
7825 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7826 pAggrAddTsReqParams->tspec[i].suspendInterval;
7827 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7828 pAggrAddTsReqParams->tspec[i].svcStartTime;
7829 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7830 pAggrAddTsReqParams->tspec[i].minDataRate;
7831 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7832 pAggrAddTsReqParams->tspec[i].meanDataRate;
7833 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7834 pAggrAddTsReqParams->tspec[i].peakDataRate;
7835 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7836 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7837 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7838 pAggrAddTsReqParams->tspec[i].delayBound;
7839 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7840 pAggrAddTsReqParams->tspec[i].minPhyRate;
7841 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7842 pAggrAddTsReqParams->tspec[i].surplusBw;
7843 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7844 pAggrAddTsReqParams->tspec[i].mediumTime;
7845 }
7846
7847 /* TODO: tAggrAddTsParams doesn't have the following fields */
7848#if 0
7849 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7850 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7851 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7852 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7853#endif
7854 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7855
7856 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007857 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007858 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007859 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7860
7861 pWdaParams->pWdaContext = pWDA;
7862
Jeff Johnson295189b2012-06-20 16:38:30 -07007863 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007864 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7865
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 if(IS_WDI_STATUS_FAILURE(status))
7867 {
7868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7869 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7871 vos_mem_free(pWdaParams);
7872
7873 /* send the failure response back to PE*/
7874 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7875 {
7876 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7877 }
7878
7879 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7880 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007882 return CONVERT_WDI2VOS_STATUS(status) ;
7883}
7884#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007885/*
Mihir Shetea4306052014-03-25 00:02:54 +05307886 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 * send Enter IMPS RSP back to PE
7888 */
Mihir Shetea4306052014-03-25 00:02:54 +05307889void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007890{
Mihir Shetea4306052014-03-25 00:02:54 +05307891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7892 tWDA_CbContext *pWDA;
7893
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307895 "<------ %s status=%d" ,__func__,status);
7896 if(NULL == pWdaParams)
7897 {
7898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7899 "%s: pWdaParams received NULL", __func__);
7900 VOS_ASSERT(0);
7901 return;
7902 }
7903
7904 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7905
7906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7907 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007908 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 return ;
7910}
Mihir Shetea4306052014-03-25 00:02:54 +05307911
7912
7913/*
7914 * FUNCTION: WDA_EnterImpsReqCallback
7915 * Free memory and send Enter IMPS RSP back to PE.
7916 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7917 */
7918void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7919{
7920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7921 tWDA_CbContext *pWDA;
7922
7923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7924 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7925
7926 if(NULL == pWdaParams)
7927 {
7928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7929 "%s: pWdaParams received NULL", __func__);
7930 VOS_ASSERT(0);
7931 return;
7932 }
7933
7934 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7935
7936 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7937 {
7938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7939 vos_mem_free(pWdaParams);
7940 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7941 CONVERT_WDI2SIR_STATUS(wdiStatus));
7942 }
7943
7944 return;
7945}
Jeff Johnson295189b2012-06-20 16:38:30 -07007946/*
7947 * FUNCTION: WDA_ProcessEnterImpsReq
7948 * Request to WDI to Enter IMPS power state.
7949 */
7950VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7951{
7952 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307953 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7954 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007956 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307957
7958
7959 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7960 if (NULL == wdiEnterImpsReqParams)
7961 {
7962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7963 "%s: VOS MEM Alloc Failure", __func__);
7964 VOS_ASSERT(0);
7965 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7966 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7967 return VOS_STATUS_E_NOMEM;
7968 }
7969
7970 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7971 if (NULL == pWdaParams)
7972 {
7973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7974 "%s: VOS MEM Alloc Failure", __func__);
7975 VOS_ASSERT(0);
7976 vos_mem_free(wdiEnterImpsReqParams);
7977 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7978 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7979 return VOS_STATUS_E_NOMEM;
7980 }
7981
7982 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7983 wdiEnterImpsReqParams->pUserData = pWdaParams;
7984
7985 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7986 pWdaParams->wdaMsgParam = NULL;
7987 pWdaParams->pWdaContext = pWDA;
7988
7989 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7990 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7991 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 if(IS_WDI_STATUS_FAILURE(status))
7993 {
7994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7995 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05307996 vos_mem_free(wdiEnterImpsReqParams);
7997 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007998 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 return CONVERT_WDI2VOS_STATUS(status) ;
8001}
Jeff Johnson295189b2012-06-20 16:38:30 -07008002/*
8003 * FUNCTION: WDA_ExitImpsReqCallback
8004 * send Exit IMPS RSP back to PE
8005 */
8006void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8007{
8008 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008010 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008011 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 return ;
8013}
Jeff Johnson295189b2012-06-20 16:38:30 -07008014/*
8015 * FUNCTION: WDA_ProcessExitImpsReq
8016 * Request to WDI to Exit IMPS power state.
8017 */
8018VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8019{
8020 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008022 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 if(IS_WDI_STATUS_FAILURE(status))
8025 {
8026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8027 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008028 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 return CONVERT_WDI2VOS_STATUS(status) ;
8031}
Jeff Johnson295189b2012-06-20 16:38:30 -07008032/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008033 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 * send Enter BMPS RSP back to PE
8035 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008036void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008037{
8038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8039 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008040 tEnterBmpsParams *pEnterBmpsRspParams;
8041
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008043 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 if(NULL == pWdaParams)
8045 {
8046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008047 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 VOS_ASSERT(0) ;
8049 return ;
8050 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008051
8052 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8053 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8054
8055 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008056 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008057
8058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008060 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8061
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 return ;
8063}
Jeff Johnson295189b2012-06-20 16:38:30 -07008064/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008065 * FUNCTION: WDA_EnterBmpsReqCallback
8066 * Free memory and send Enter BMPS RSP back to PE.
8067 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8068 */
8069void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8070{
8071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8072 tWDA_CbContext *pWDA;
8073 tEnterBmpsParams *pEnterBmpsRspParams;
8074
8075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8076 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8077
8078 if(NULL == pWdaParams)
8079 {
8080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8081 "%s: pWdaParams received NULL", __func__);
8082 VOS_ASSERT(0);
8083 return;
8084 }
8085
8086 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8087 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8088 pEnterBmpsRspParams->status = wdiStatus;
8089
8090 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8091 {
8092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8093 vos_mem_free(pWdaParams);
8094 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8095 }
8096
8097 return;
8098}
8099/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008100 * FUNCTION: WDA_ProcessEnterBmpsReq
8101 * Request to WDI to Enter BMPS power state.
8102 */
8103VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8104 tEnterBmpsParams *pEnterBmpsReqParams)
8105{
8106 WDI_Status status = WDI_STATUS_SUCCESS;
8107 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8108 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008110 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008111 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8112 {
8113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008114 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008115 VOS_ASSERT(0);
8116 return VOS_STATUS_E_FAILURE;
8117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8119 if (NULL == wdiEnterBmpsReqParams)
8120 {
8121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008124 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8125 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 return VOS_STATUS_E_NOMEM;
8127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8129 if (NULL == pWdaParams)
8130 {
8131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008133 VOS_ASSERT(0);
8134 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008135 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8136 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008137 return VOS_STATUS_E_NOMEM;
8138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8140 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8141 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8142 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008143 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8145 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8146 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008147 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8148 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008149
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 /* Store param pointer as passed in by caller */
8151 /* store Params pass it to WDI */
8152 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008153 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008154 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008155 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008156 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008157 if (IS_WDI_STATUS_FAILURE(status))
8158 {
8159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8160 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008162 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008163 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008164 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 return CONVERT_WDI2VOS_STATUS(status);
8167}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008168
8169
8170static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8171 WDI_Status wdiStatus,
8172 tExitBmpsParams *pExitBmpsReqParams)
8173{
8174 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8175
8176 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8177}
8178
8179
Jeff Johnson295189b2012-06-20 16:38:30 -07008180/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008181 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 * send Exit BMPS RSP back to PE
8183 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008184void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008185{
8186 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8187 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008188 tExitBmpsParams *pExitBmpsRspParams;
8189
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008191 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008192 if(NULL == pWdaParams)
8193 {
8194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008195 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008196 VOS_ASSERT(0) ;
8197 return ;
8198 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008199
8200 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8201 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8202
8203 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008204 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008205
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8207 vos_mem_free(pWdaParams) ;
8208
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008209 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008210 return ;
8211}
Jeff Johnson295189b2012-06-20 16:38:30 -07008212/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008213 * FUNCTION: WDA_ExitBmpsReqCallback
8214 * Free memory and send Exit BMPS RSP back to PE.
8215 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8216 */
8217void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8218{
8219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8220 tWDA_CbContext *pWDA;
8221 tExitBmpsParams *pExitBmpsRspParams;
8222
8223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8224 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8225
8226 if(NULL == pWdaParams)
8227 {
8228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8229 "%s: pWdaParams received NULL", __func__);
8230 VOS_ASSERT(0);
8231 return;
8232 }
8233
8234 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8235 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8236 pExitBmpsRspParams->status = wdiStatus;
8237
8238 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8239 {
8240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8241 vos_mem_free(pWdaParams);
8242 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8243 }
8244
8245 return;
8246}
8247/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008248 * FUNCTION: WDA_ProcessExitBmpsReq
8249 * Request to WDI to Exit BMPS power state.
8250 */
8251VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8252 tExitBmpsParams *pExitBmpsReqParams)
8253{
8254 WDI_Status status = WDI_STATUS_SUCCESS ;
8255 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8256 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8257 sizeof(WDI_ExitBmpsReqParamsType)) ;
8258 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008260 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 if(NULL == wdiExitBmpsReqParams)
8262 {
8263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008264 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008266 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008267 return VOS_STATUS_E_NOMEM;
8268 }
8269 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8270 if(NULL == pWdaParams)
8271 {
8272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008273 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008274 VOS_ASSERT(0);
8275 vos_mem_free(wdiExitBmpsReqParams);
8276 return VOS_STATUS_E_NOMEM;
8277 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008278 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008279
8280 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8281
Yue Ma7f44bbe2013-04-12 11:47:39 -07008282 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8283 wdiExitBmpsReqParams->pUserData = pWdaParams;
8284
Jeff Johnson295189b2012-06-20 16:38:30 -07008285 /* Store param pointer as passed in by caller */
8286 /* store Params pass it to WDI */
8287 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8288 pWdaParams->pWdaContext = pWDA;
8289 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008290 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008291 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 if(IS_WDI_STATUS_FAILURE(status))
8293 {
8294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8295 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8297 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008298 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 return CONVERT_WDI2VOS_STATUS(status) ;
8301}
Jeff Johnson295189b2012-06-20 16:38:30 -07008302/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008303 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 * send Enter UAPSD RSP back to PE
8305 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008306void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008307{
8308 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8309 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008310 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 if(NULL == pWdaParams)
8314 {
8315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008316 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 VOS_ASSERT(0) ;
8318 return ;
8319 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008320
8321 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8322 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8323
8324 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008325 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008326
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8328 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008329 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 return ;
8331}
Jeff Johnson295189b2012-06-20 16:38:30 -07008332/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008333 * FUNCTION: WDA_EnterUapsdReqCallback
8334 * Free memory and send Enter UAPSD RSP back to PE.
8335 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8336 */
8337void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8338{
8339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8340 tWDA_CbContext *pWDA;
8341 tUapsdParams *pEnterUapsdRsqParams;
8342
8343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8344 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8345
8346 if(NULL == pWdaParams)
8347 {
8348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8349 "%s: pWdaParams received NULL", __func__);
8350 VOS_ASSERT(0);
8351 return;
8352 }
8353
8354 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8355 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8356 pEnterUapsdRsqParams->status = wdiStatus;
8357
8358 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8359 {
8360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8361 vos_mem_free(pWdaParams);
8362 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8363 }
8364
8365 return;
8366}
8367/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 * FUNCTION: WDA_ProcessEnterUapsdReq
8369 * Request to WDI to Enter UAPSD power state.
8370 */
8371VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8372 tUapsdParams *pEnterUapsdReqParams)
8373{
8374 WDI_Status status = WDI_STATUS_SUCCESS ;
8375 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8376 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8377 sizeof(WDI_EnterUapsdReqParamsType)) ;
8378 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008380 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 if(NULL == wdiEnterUapsdReqParams)
8382 {
8383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008384 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 VOS_ASSERT(0);
8386 return VOS_STATUS_E_NOMEM;
8387 }
8388 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8389 if(NULL == pWdaParams)
8390 {
8391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008392 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008393 VOS_ASSERT(0);
8394 vos_mem_free(wdiEnterUapsdReqParams);
8395 return VOS_STATUS_E_NOMEM;
8396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8398 pEnterUapsdReqParams->beDeliveryEnabled;
8399 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8400 pEnterUapsdReqParams->beTriggerEnabled;
8401 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8402 pEnterUapsdReqParams->bkDeliveryEnabled;
8403 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8404 pEnterUapsdReqParams->bkTriggerEnabled;
8405 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8406 pEnterUapsdReqParams->viDeliveryEnabled;
8407 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8408 pEnterUapsdReqParams->viTriggerEnabled;
8409 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8410 pEnterUapsdReqParams->voDeliveryEnabled;
8411 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8412 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008413 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008414
Yue Ma7f44bbe2013-04-12 11:47:39 -07008415 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8416 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008417
Jeff Johnson295189b2012-06-20 16:38:30 -07008418 /* Store param pointer as passed in by caller */
8419 /* store Params pass it to WDI */
8420 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8421 pWdaParams->pWdaContext = pWDA;
8422 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008424 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 if(IS_WDI_STATUS_FAILURE(status))
8426 {
8427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8428 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8429 vos_mem_free(pWdaParams->wdaMsgParam) ;
8430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8431 vos_mem_free(pWdaParams) ;
8432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 return CONVERT_WDI2VOS_STATUS(status) ;
8434}
Jeff Johnson295189b2012-06-20 16:38:30 -07008435/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008436 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 * send Exit UAPSD RSP back to PE
8438 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008439void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008440{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008441
8442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8443 tWDA_CbContext *pWDA;
8444 tExitUapsdParams *pExitUapsdRspParams;
8445
Jeff Johnson295189b2012-06-20 16:38:30 -07008446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008447 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008448 if(NULL == pWdaParams)
8449 {
8450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008451 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008452 VOS_ASSERT(0);
8453 return;
8454 }
8455
8456 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8457 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8458
8459 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008460 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008461
8462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8463 vos_mem_free(pWdaParams) ;
8464
8465 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008466 return ;
8467}
Jeff Johnson295189b2012-06-20 16:38:30 -07008468/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008469 * FUNCTION: WDA_ExitUapsdReqCallback
8470 * Free memory and send Exit UAPSD RSP back to PE.
8471 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8472 */
8473void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8474{
8475 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8476 tWDA_CbContext *pWDA;
8477 tExitUapsdParams *pExitUapsdRspParams;
8478
8479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8480 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8481
8482 if(NULL == pWdaParams)
8483 {
8484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8485 "%s: pWdaParams received NULL", __func__);
8486 VOS_ASSERT(0);
8487 return;
8488 }
8489
8490 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8491 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8492 pExitUapsdRspParams->status = wdiStatus;
8493
8494 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8495 {
8496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8497 vos_mem_free(pWdaParams);
8498 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8499 }
8500
8501 return;
8502}
8503/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 * FUNCTION: WDA_ProcessExitUapsdReq
8505 * Request to WDI to Exit UAPSD power state.
8506 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008507VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8508 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008509{
8510 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008511 tWDA_ReqParams *pWdaParams ;
8512 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8513 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8514 sizeof(WDI_ExitUapsdReqParamsType)) ;
8515
Jeff Johnson295189b2012-06-20 16:38:30 -07008516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008517 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008518
8519 if(NULL == wdiExitUapsdReqParams)
8520 {
8521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008522 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008523 VOS_ASSERT(0);
8524 return VOS_STATUS_E_NOMEM;
8525 }
8526 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8527 if(NULL == pWdaParams)
8528 {
8529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008530 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008531 VOS_ASSERT(0);
8532 vos_mem_free(wdiExitUapsdReqParams);
8533 return VOS_STATUS_E_NOMEM;
8534 }
8535
8536 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008537 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8538 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008539
8540 /* Store param pointer as passed in by caller */
8541 /* store Params pass it to WDI */
8542 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8543 pWdaParams->pWdaContext = pWDA;
8544 pWdaParams->wdaMsgParam = pExitUapsdParams;
8545
Yue Ma7f44bbe2013-04-12 11:47:39 -07008546 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008547 if(IS_WDI_STATUS_FAILURE(status))
8548 {
8549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8550 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008551 vos_mem_free(pWdaParams->wdaMsgParam) ;
8552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8553 vos_mem_free(pWdaParams) ;
8554
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 return CONVERT_WDI2VOS_STATUS(status) ;
8557}
8558
Jeff Johnson295189b2012-06-20 16:38:30 -07008559/*
8560 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8561 *
8562 */
8563void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8564{
8565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008567 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 if(NULL == pWdaParams)
8569 {
8570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008571 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008572 VOS_ASSERT(0) ;
8573 return ;
8574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 if( pWdaParams != NULL )
8576 {
8577 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8578 {
8579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8580 }
8581 if( pWdaParams->wdaMsgParam != NULL )
8582 {
8583 vos_mem_free(pWdaParams->wdaMsgParam) ;
8584 }
8585 vos_mem_free(pWdaParams) ;
8586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008587 return ;
8588}
Jeff Johnson295189b2012-06-20 16:38:30 -07008589/*
8590 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8591 * Request to WDI to set the power save params at start.
8592 */
8593VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8594 tSirPowerSaveCfg *pPowerSaveCfg)
8595{
8596 WDI_Status status = WDI_STATUS_SUCCESS ;
8597 tHalCfg *tlvStruct = NULL ;
8598 tANI_U8 *tlvStructStart = NULL ;
8599 v_PVOID_t *configParam;
8600 tANI_U32 configParamSize;
8601 tANI_U32 *configDataValue;
8602 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8603 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008605 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008606 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8607 {
8608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008609 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008611 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 return VOS_STATUS_E_FAILURE;
8613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008614 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8615 if (NULL == wdiPowerSaveCfg)
8616 {
8617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008620 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008621 return VOS_STATUS_E_NOMEM;
8622 }
8623 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8624 if(NULL == pWdaParams)
8625 {
8626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008627 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008628 VOS_ASSERT(0);
8629 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008630 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 return VOS_STATUS_E_NOMEM;
8632 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8634 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008635 if(NULL == configParam)
8636 {
8637 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008638 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008639 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008640 vos_mem_free(pWdaParams);
8641 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008642 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008643 return VOS_STATUS_E_NOMEM;
8644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 vos_mem_set(configParam, configParamSize, 0);
8646 wdiPowerSaveCfg->pConfigBuffer = configParam;
8647 tlvStruct = (tHalCfg *)configParam;
8648 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8650 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8651 tlvStruct->length = sizeof(tANI_U32);
8652 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8653 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8655 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8657 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8658 tlvStruct->length = sizeof(tANI_U32);
8659 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8660 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8662 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008663 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8664 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8665 tlvStruct->length = sizeof(tANI_U32);
8666 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8667 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8669 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008670 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8671 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8672 tlvStruct->length = sizeof(tANI_U32);
8673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8674 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008675 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8676 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008677 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8678 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8679 tlvStruct->length = sizeof(tANI_U32);
8680 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8681 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8683 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008684 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8685 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8686 tlvStruct->length = sizeof(tANI_U32);
8687 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8688 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8690 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8692 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8693 tlvStruct->length = sizeof(tANI_U32);
8694 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8695 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008696 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8697 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8699 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8700 tlvStruct->length = sizeof(tANI_U32);
8701 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8702 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8703 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8704 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8706 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8707 tlvStruct->length = sizeof(tANI_U32);
8708 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8709 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8710 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8711 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008712 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8713 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8714 tlvStruct->length = sizeof(tANI_U32);
8715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8716 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8718 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008719 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8720 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8721 tlvStruct->length = sizeof(tANI_U32);
8722 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8723 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008724 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8725 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008727 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 /* store Params pass it to WDI */
8729 pWdaParams->wdaMsgParam = configParam;
8730 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8731 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008732 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8733 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 if(IS_WDI_STATUS_FAILURE(status))
8735 {
8736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8737 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8738 vos_mem_free(pWdaParams->wdaMsgParam);
8739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8740 vos_mem_free(pWdaParams);
8741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008742 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008743 return CONVERT_WDI2VOS_STATUS(status);
8744}
Jeff Johnson295189b2012-06-20 16:38:30 -07008745/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008746 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008747 *
8748 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008749void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008750{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008751 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8752
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008754 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008755
8756 if(NULL == pWdaParams)
8757 {
8758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8759 "%s: pWdaParams received NULL", __func__);
8760 VOS_ASSERT(0);
8761 return ;
8762 }
8763
8764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008765 vos_mem_free(pWdaParams);
8766
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 return ;
8768}
Jeff Johnson295189b2012-06-20 16:38:30 -07008769/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008770 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8771 * Free memory.
8772 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8773 */
8774void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8775{
8776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8777
8778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8779 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8780
8781 if(NULL == pWdaParams)
8782 {
8783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8784 "%s: pWdaParams received NULL", __func__);
8785 VOS_ASSERT(0);
8786 return;
8787 }
8788
8789 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8790 {
8791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8792 vos_mem_free(pWdaParams);
8793 }
8794
8795 return;
8796}
8797/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 * FUNCTION: WDA_SetUapsdAcParamsReq
8799 * Request to WDI to set the UAPSD params for an ac (sta mode).
8800 */
8801VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8802 tUapsdInfo *pUapsdInfo)
8803{
8804 WDI_Status status = WDI_STATUS_SUCCESS;
8805 tWDA_CbContext *pWDA = NULL ;
8806 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8807 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8808 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8809 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008811 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 if(NULL == wdiUapsdParams)
8813 {
8814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008815 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 VOS_ASSERT(0);
8817 return VOS_STATUS_E_NOMEM;
8818 }
8819 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8820 if(NULL == pWdaParams)
8821 {
8822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008823 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008824 VOS_ASSERT(0);
8825 vos_mem_free(wdiUapsdParams);
8826 return VOS_STATUS_E_NOMEM;
8827 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8829 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8830 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8831 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8832 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8833 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008834 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8835 wdiUapsdParams->pUserData = pWdaParams;
8836
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 pWdaParams->pWdaContext = pWDA;
8839 /* Store param pointer as passed in by caller */
8840 pWdaParams->wdaMsgParam = pUapsdInfo;
8841 /* store Params pass it to WDI */
8842 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008844 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008845 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008846 if(IS_WDI_STATUS_FAILURE(status))
8847 {
8848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8849 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8851 vos_mem_free(pWdaParams);
8852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008853 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8854 return VOS_STATUS_SUCCESS;
8855 else
8856 return VOS_STATUS_E_FAILURE;
8857
Jeff Johnson295189b2012-06-20 16:38:30 -07008858}
8859/*
8860 * FUNCTION: WDA_ClearUapsdAcParamsReq
8861 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8862 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8863 * and again enter the UPASD with the modified params. Hence the disable
8864 * function was kept empty.
8865 *
8866 */
8867VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8868{
8869 /* do nothing */
8870 return VOS_STATUS_SUCCESS;
8871}
Jeff Johnson295189b2012-06-20 16:38:30 -07008872/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008873 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008874 *
8875 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008876void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008877{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008878 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8879
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008881 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008882
8883 if(NULL == pWdaParams)
8884 {
8885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008886 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008887 VOS_ASSERT(0) ;
8888 return ;
8889 }
8890
8891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8892 vos_mem_free(pWdaParams->wdaMsgParam);
8893 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008894
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 //print a msg, nothing else to do
8896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008897 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008898 return ;
8899}
Jeff Johnson295189b2012-06-20 16:38:30 -07008900/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008901 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8902 * Free memory.
8903 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8904 */
8905void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8906{
8907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8908
8909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8910 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8911
8912 if(NULL == pWdaParams)
8913 {
8914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8915 "%s: pWdaParams received NULL", __func__);
8916 VOS_ASSERT(0);
8917 return;
8918 }
8919
8920 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8921 {
8922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8923 vos_mem_free(pWdaParams->wdaMsgParam);
8924 vos_mem_free(pWdaParams);
8925 }
8926
8927 return;
8928}
8929/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008930 * FUNCTION: WDA_UpdateUapsdParamsReq
8931 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8932 */
8933VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8934 tUpdateUapsdParams* pUpdateUapsdInfo)
8935{
8936 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008937 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008938 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8939 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8940 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008941 tWDA_ReqParams *pWdaParams = NULL;
8942
Jeff Johnson295189b2012-06-20 16:38:30 -07008943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008944 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008945 if(NULL == wdiUpdateUapsdParams)
8946 {
8947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008948 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008949 VOS_ASSERT(0);
8950 return VOS_STATUS_E_NOMEM;
8951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008952 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8953 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8954 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008955 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8956 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008957
8958 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8959 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008960 {
8961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008962 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008963 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008964 vos_mem_free(pUpdateUapsdInfo);
8965 vos_mem_free(wdiUpdateUapsdParams);
8966 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008968 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008969 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008970 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008971 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8972 pWdaParams->pWdaContext = pWDA;
8973
Jeff Johnson43971f52012-07-17 12:26:56 -07008974 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008975 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008976 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008977
Jeff Johnson43971f52012-07-17 12:26:56 -07008978 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008979 {
8980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8981 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008982 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8984 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008985 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008986 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008987 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008988}
Jeff Johnson295189b2012-06-20 16:38:30 -07008989/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008990 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008991 *
8992 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008993void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008994{
8995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008997 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 if(WDI_STATUS_SUCCESS != wdiStatus)
8999 {
9000 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009001 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009003 if(NULL == pWdaParams)
9004 {
9005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009006 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009007 VOS_ASSERT(0) ;
9008 return ;
9009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9011 vos_mem_free(pWdaParams->wdaMsgParam);
9012 vos_mem_free(pWdaParams);
9013 return ;
9014}
Jeff Johnson295189b2012-06-20 16:38:30 -07009015/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009016 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9017 * Free memory.
9018 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9019 */
9020void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9021{
9022 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9023
9024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9025 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9026
9027 if(NULL == pWdaParams)
9028 {
9029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9030 "%s: pWdaParams received NULL", __func__);
9031 VOS_ASSERT(0);
9032 return;
9033 }
9034
9035 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9036 {
9037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9038 vos_mem_free(pWdaParams->wdaMsgParam);
9039 vos_mem_free(pWdaParams);
9040 }
9041
9042 return;
9043}
9044/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009045 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9046 *
9047 */
9048VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9049 tSirWlanSetRxpFilters *pWlanSuspendParam)
9050{
Jeff Johnson295189b2012-06-20 16:38:30 -07009051 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009052 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309053 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309055 /* Sanity Check
9056 * This is very unlikely and add assert to collect more info next time */
9057 if(NULL == pWlanSuspendParam)
9058 {
9059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9060 "%s: pWlanSuspendParam received NULL", __func__);
9061 VOS_ASSERT(0) ;
9062 return VOS_STATUS_E_FAULT;
9063 }
9064 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9065 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009067 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009068 if(NULL == wdiRxpFilterParams)
9069 {
9070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009072 VOS_ASSERT(0);
9073 vos_mem_free(pWlanSuspendParam);
9074 return VOS_STATUS_E_NOMEM;
9075 }
9076 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9077 if(NULL == pWdaParams)
9078 {
9079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009081 VOS_ASSERT(0);
9082 vos_mem_free(wdiRxpFilterParams);
9083 vos_mem_free(pWlanSuspendParam);
9084 return VOS_STATUS_E_NOMEM;
9085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9087 pWlanSuspendParam->setMcstBcstFilter;
9088 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9089 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9090
Yue Ma7f44bbe2013-04-12 11:47:39 -07009091 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9092 wdiRxpFilterParams->pUserData = pWdaParams;
9093
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 pWdaParams->pWdaContext = pWDA;
9095 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9096 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009097 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009098 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009099 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009100 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009101 {
9102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9103 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009104 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9106 vos_mem_free(pWdaParams->wdaMsgParam);
9107 vos_mem_free(pWdaParams);
9108 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009109 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009110}
Jeff Johnson295189b2012-06-20 16:38:30 -07009111/*
9112 * FUNCTION: WDA_WdiIndicationCallback
9113 *
9114 */
9115void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9116 void* pUserData)
9117{
9118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009119 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009120}
Jeff Johnson295189b2012-06-20 16:38:30 -07009121/*
9122 * FUNCTION: WDA_ProcessWlanSuspendInd
9123 *
9124 */
9125VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9126 tSirWlanSuspendParam *pWlanSuspendParam)
9127{
9128 WDI_Status wdiStatus;
9129 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009131 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009132 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9133 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9134 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9135 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009137 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9138 if(WDI_STATUS_PENDING == wdiStatus)
9139 {
9140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009141 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 }
9143 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9144 {
9145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009146 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009148 vos_mem_free(pWlanSuspendParam);
9149 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9150}
9151
Chet Lanctot186b5732013-03-18 10:26:30 -07009152#ifdef WLAN_FEATURE_11W
9153/*
9154 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9155 *
9156 */
9157VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9158 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9159{
9160 WDI_Status wdiStatus;
9161 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9163 "------> %s ", __func__);
9164
9165 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9166 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9167 sizeof(tSirMacAddr));
9168
9169 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9170 wdiExclUnencryptParams.pUserData = pWDA;
9171
9172 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9173 if(WDI_STATUS_PENDING == wdiStatus)
9174 {
9175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9176 "Pending received for %s:%d ", __func__, __LINE__ );
9177 }
9178 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9179 {
9180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9181 "Failure in %s:%d ", __func__, __LINE__ );
9182 }
9183 vos_mem_free(pExclUnencryptParam);
9184 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9185}
9186#endif
9187
Jeff Johnson295189b2012-06-20 16:38:30 -07009188/*
9189 * FUNCTION: WDA_ProcessWlanResumeCallback
9190 *
9191 */
9192void WDA_ProcessWlanResumeCallback(
9193 WDI_SuspendResumeRspParamsType *resumeRspParams,
9194 void* pUserData)
9195{
9196 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009198 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009199 if(NULL == pWdaParams)
9200 {
9201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009202 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009203 VOS_ASSERT(0) ;
9204 return ;
9205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9207 {
9208 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009209 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9212 vos_mem_free(pWdaParams->wdaMsgParam);
9213 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 return ;
9215}
Jeff Johnson295189b2012-06-20 16:38:30 -07009216/*
9217 * FUNCTION: WDA_ProcessWlanResumeReq
9218 *
9219 */
9220VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9221 tSirWlanResumeParam *pWlanResumeParam)
9222{
9223 WDI_Status wdiStatus;
9224 WDI_ResumeParamsType *wdiResumeParams =
9225 (WDI_ResumeParamsType *)vos_mem_malloc(
9226 sizeof(WDI_ResumeParamsType) ) ;
9227 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009229 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009230 if(NULL == wdiResumeParams)
9231 {
9232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009233 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009234 VOS_ASSERT(0);
9235 return VOS_STATUS_E_NOMEM;
9236 }
9237 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9238 if(NULL == pWdaParams)
9239 {
9240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009242 VOS_ASSERT(0);
9243 vos_mem_free(wdiResumeParams);
9244 return VOS_STATUS_E_NOMEM;
9245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009246 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9247 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009249 wdiResumeParams->wdiReqStatusCB = NULL;
9250 pWdaParams->wdaMsgParam = pWlanResumeParam;
9251 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9252 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009253 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9254 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9255 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009256 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9257 {
9258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9259 "Failure in Host Resume REQ WDI API, free all the memory " );
9260 VOS_ASSERT(0);
9261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9262 vos_mem_free(pWdaParams->wdaMsgParam);
9263 vos_mem_free(pWdaParams);
9264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9266}
9267
Jeff Johnson295189b2012-06-20 16:38:30 -07009268/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009269 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 *
9271 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009272void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009273{
9274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009276 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009277 if(NULL == pWdaParams)
9278 {
9279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009280 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009281 VOS_ASSERT(0) ;
9282 return ;
9283 }
9284
9285 vos_mem_free(pWdaParams->wdaMsgParam) ;
9286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9287 vos_mem_free(pWdaParams) ;
9288 /*
9289 * No respone required for SetBeaconFilter req so just free the request
9290 * param here
9291 */
9292
Jeff Johnson295189b2012-06-20 16:38:30 -07009293 return ;
9294}
Jeff Johnson295189b2012-06-20 16:38:30 -07009295/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009296 * FUNCTION: WDA_SetBeaconFilterReqCallback
9297 * Free memory.
9298 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9299 */
9300void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9301{
9302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9303
9304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9305 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9306
9307 if(NULL == pWdaParams)
9308 {
9309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9310 "%s: pWdaParams received NULL", __func__);
9311 VOS_ASSERT(0);
9312 return;
9313 }
9314
9315 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9316 {
9317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9318 vos_mem_free(pWdaParams->wdaMsgParam);
9319 vos_mem_free(pWdaParams);
9320 }
9321
9322 return;
9323}
9324/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009325 * FUNCTION: WDA_SetBeaconFilterReq
9326 * Request to WDI to send the beacon filtering related information.
9327 */
9328VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9329 tBeaconFilterMsg* pBeaconFilterInfo)
9330{
9331 WDI_Status status = WDI_STATUS_SUCCESS;
9332 tANI_U8 *dstPtr, *srcPtr;
9333 tANI_U8 filterLength;
9334 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9335 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9336 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9337 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009339 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 if(NULL == wdiBeaconFilterInfo)
9341 {
9342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009344 VOS_ASSERT(0);
9345 return VOS_STATUS_E_NOMEM;
9346 }
9347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9348 if(NULL == pWdaParams)
9349 {
9350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009352 VOS_ASSERT(0);
9353 vos_mem_free(wdiBeaconFilterInfo);
9354 return VOS_STATUS_E_NOMEM;
9355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9357 pBeaconFilterInfo->beaconInterval;
9358 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9359 pBeaconFilterInfo->capabilityInfo;
9360 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9361 pBeaconFilterInfo->capabilityMask;
9362 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009363
9364 //Fill the BssIdx
9365 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9366
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 //Fill structure with info contained in the beaconFilterTable
9368 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9369 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9370 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9371 if(WDI_BEACON_FILTER_LEN < filterLength)
9372 {
9373 filterLength = WDI_BEACON_FILTER_LEN;
9374 }
9375 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009376 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9377 wdiBeaconFilterInfo->pUserData = pWdaParams;
9378
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 /* Store param pointer as passed in by caller */
9380 /* store Params pass it to WDI */
9381 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9382 pWdaParams->pWdaContext = pWDA;
9383 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9384
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009386 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 if(IS_WDI_STATUS_FAILURE(status))
9388 {
9389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9390 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9391 vos_mem_free(pWdaParams->wdaMsgParam) ;
9392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9393 vos_mem_free(pWdaParams) ;
9394 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009395 return CONVERT_WDI2VOS_STATUS(status) ;
9396}
Jeff Johnson295189b2012-06-20 16:38:30 -07009397/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009398 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009399 *
9400 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009401void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009402{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009403 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9404
Jeff Johnson295189b2012-06-20 16:38:30 -07009405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009406 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009407
9408 if(NULL == pWdaParams)
9409 {
9410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009411 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009412 VOS_ASSERT(0) ;
9413 return ;
9414 }
9415
9416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9417 vos_mem_free(pWdaParams->wdaMsgParam);
9418 vos_mem_free(pWdaParams);
9419
Jeff Johnson295189b2012-06-20 16:38:30 -07009420 //print a msg, nothing else to do
9421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009422 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 return ;
9424}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009425/*
9426 * FUNCTION: WDA_RemBeaconFilterReqCallback
9427 * Free memory.
9428 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9429 */
9430void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9431{
9432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9433
9434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9435 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9436
9437 if(NULL == pWdaParams)
9438 {
9439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9440 "%s: pWdaParams received NULL", __func__);
9441 VOS_ASSERT(0);
9442 return;
9443 }
9444
9445 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9446 {
9447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9448 vos_mem_free(pWdaParams->wdaMsgParam);
9449 vos_mem_free(pWdaParams);
9450 }
9451
9452 return;
9453}
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 // TODO: PE does not have this feature for now implemented,
9455 // but the support for removing beacon filter exists between
9456 // HAL and FW. This function can be called whenever PE defines
9457 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009458/*
9459 * FUNCTION: WDA_RemBeaconFilterReq
9460 * Request to WDI to send the removal of beacon filtering related information.
9461 */
9462VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9463 tRemBeaconFilterMsg* pBeaconFilterInfo)
9464{
9465 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009466 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9468 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9469 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009470 tWDA_ReqParams *pWdaParams ;
9471
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009474 if(NULL == wdiBeaconFilterInfo)
9475 {
9476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 VOS_ASSERT(0);
9479 return VOS_STATUS_E_NOMEM;
9480 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009481 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9482 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 {
9484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009486 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009487 vos_mem_free(wdiBeaconFilterInfo);
9488 vos_mem_free(pBeaconFilterInfo);
9489 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009491
9492 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9493 pBeaconFilterInfo->ucIeCount;
9494 //Fill structure with info contained in the ucRemIeId
9495 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9496 pBeaconFilterInfo->ucRemIeId,
9497 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9498 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9499 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009500
9501 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009502 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009504 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9505
9506 pWdaParams->pWdaContext = pWDA;
9507
Jeff Johnson43971f52012-07-17 12:26:56 -07009508 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009509 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009510 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 {
9512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9513 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009514 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9516 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009517 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009518 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009519 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009520}
Jeff Johnson295189b2012-06-20 16:38:30 -07009521/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009522 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009523 *
9524 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009525void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009526{
9527 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009529 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009530 if(NULL == pWdaParams)
9531 {
9532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009533 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 VOS_ASSERT(0) ;
9535 return ;
9536 }
9537
9538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9539 vos_mem_free(pWdaParams) ;
9540
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 return ;
9542}
Jeff Johnson295189b2012-06-20 16:38:30 -07009543/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009544 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9545 * Free memory.
9546 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9547 */
9548void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9549{
9550 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9551
9552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9553 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9554
9555 if(NULL == pWdaParams)
9556 {
9557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9558 "%s: pWdaParams received NULL", __func__);
9559 VOS_ASSERT(0);
9560 return;
9561 }
9562
9563 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9564 {
9565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9566 vos_mem_free(pWdaParams);
9567 }
9568
9569 return;
9570}
9571/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009572 * FUNCTION: WDA_SetRSSIThresholdsReq
9573 * Request to WDI to set the RSSI thresholds (sta mode).
9574 */
9575VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9576{
9577 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009578 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009579 tWDA_CbContext *pWDA = NULL ;
9580 v_PVOID_t pVosContext = NULL;
9581 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9582 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9583 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9584 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009586 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009587 if(NULL == wdiRSSIThresholdsInfo)
9588 {
9589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009590 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009591 VOS_ASSERT(0);
9592 return VOS_STATUS_E_NOMEM;
9593 }
9594 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9595 if(NULL == pWdaParams)
9596 {
9597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 VOS_ASSERT(0);
9600 vos_mem_free(wdiRSSIThresholdsInfo);
9601 return VOS_STATUS_E_NOMEM;
9602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9605 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9606 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009607 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9608 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9609 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009610 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9611 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9612 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009613 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9614 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9616 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9617
Jeff Johnson295189b2012-06-20 16:38:30 -07009618 /* Store param pointer as passed in by caller */
9619 /* store Params pass it to WDI */
9620 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9621 pWdaParams->pWdaContext = pWDA;
9622 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009623 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009624 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009625 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009626 {
9627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9628 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009629 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9631 vos_mem_free(pWdaParams) ;
9632 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009633 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009634
9635}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009636/*
Yue Madb90ac12013-04-04 13:39:13 -07009637 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009638 *
9639 */
Yue Madb90ac12013-04-04 13:39:13 -07009640void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009641{
9642 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9643
9644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009645 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 if(NULL == pWdaParams)
9647 {
9648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009649 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 VOS_ASSERT(0) ;
9651 return ;
9652 }
9653
9654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9655 vos_mem_free(pWdaParams->wdaMsgParam);
9656 vos_mem_free(pWdaParams) ;
9657
9658 //print a msg, nothing else to do
9659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009660 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009661 return ;
9662}
Jeff Johnson295189b2012-06-20 16:38:30 -07009663/*
Yue Madb90ac12013-04-04 13:39:13 -07009664 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009665 * Free memory.
9666 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009667 */
9668void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9669{
9670 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9671
9672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9673 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9674
9675 if(NULL == pWdaParams)
9676 {
9677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9678 "%s: Invalid pWdaParams pointer", __func__);
9679 VOS_ASSERT(0);
9680 return;
9681 }
9682
9683 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9684 {
9685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9686 vos_mem_free(pWdaParams->wdaMsgParam);
9687 vos_mem_free(pWdaParams);
9688 }
9689
9690 return;
9691}
9692/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009693 * FUNCTION: WDA_ProcessHostOffloadReq
9694 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9695 * to broadcast traffic (sta mode).
9696 */
9697VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9698 tSirHostOffloadReq *pHostOffloadParams)
9699{
9700 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009701 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009702 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9703 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9704 sizeof(WDI_HostOffloadReqParamsType)) ;
9705 tWDA_ReqParams *pWdaParams ;
9706
9707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009708 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009709
9710 if(NULL == wdiHostOffloadInfo)
9711 {
9712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009713 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009714 VOS_ASSERT(0);
9715 return VOS_STATUS_E_NOMEM;
9716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009717 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9718 if(NULL == pWdaParams)
9719 {
9720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009721 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 VOS_ASSERT(0);
9723 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009724 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009725 return VOS_STATUS_E_NOMEM;
9726 }
9727
9728 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9729 pHostOffloadParams->offloadType;
9730 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9731 pHostOffloadParams->enableOrDisable;
9732
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009733 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9734 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9735
Jeff Johnson295189b2012-06-20 16:38:30 -07009736 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9737 {
9738 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9739 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9740 pHostOffloadParams->params.hostIpv4Addr,
9741 4);
9742 break;
9743 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9744 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9745 pHostOffloadParams->params.hostIpv6Addr,
9746 16);
9747 break;
9748 case SIR_IPV6_NS_OFFLOAD:
9749 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9750 pHostOffloadParams->params.hostIpv6Addr,
9751 16);
9752
9753#ifdef WLAN_NS_OFFLOAD
9754 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9755 {
9756 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9757 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9758 16);
9759 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9760 }
9761 else
9762 {
9763 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9764 }
9765
9766 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9767 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9768 16);
9769 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9770 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9771 6);
9772
9773 //Only two are supported so let's go through them without a loop
9774 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9775 {
9776 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9777 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9778 16);
9779 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9780 }
9781 else
9782 {
9783 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9784 }
9785
9786 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9787 {
9788 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9789 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9790 16);
9791 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9792 }
9793 else
9794 {
9795 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9796 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309797 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9798 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009799 break;
9800#endif //WLAN_NS_OFFLOAD
9801 default:
9802 {
9803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9804 "No Handling for Offload Type %x in WDA "
9805 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9806 //WDA_VOS_ASSERT(0) ;
9807 }
9808 }
Yue Madb90ac12013-04-04 13:39:13 -07009809 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9810 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009811
Jeff Johnson295189b2012-06-20 16:38:30 -07009812 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009813 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 /* store Params pass it to WDI */
9815 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9816 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009817
Jeff Johnson295189b2012-06-20 16:38:30 -07009818
Jeff Johnson43971f52012-07-17 12:26:56 -07009819 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009820 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009821
Jeff Johnson43971f52012-07-17 12:26:56 -07009822 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 {
9824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +05309825 "Failure in host offload REQ WDI API, free all the memory %d",
9826 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -07009827 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9829 vos_mem_free(pWdaParams->wdaMsgParam);
9830 vos_mem_free(pWdaParams) ;
9831 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009832 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009833
9834}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009835/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009836 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009837 *
9838 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009839void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009840{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009841 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9842
Jeff Johnson295189b2012-06-20 16:38:30 -07009843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009844 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009845
9846 if(NULL == pWdaParams)
9847 {
9848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009849 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009850 VOS_ASSERT(0) ;
9851 return ;
9852 }
9853
9854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9855 vos_mem_free(pWdaParams->wdaMsgParam);
9856 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009857
Jeff Johnson295189b2012-06-20 16:38:30 -07009858 //print a msg, nothing else to do
9859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009860 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009861 return ;
9862}
Jeff Johnson295189b2012-06-20 16:38:30 -07009863/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009864 * FUNCTION: WDA_KeepAliveReqCallback
9865 * Free memory.
9866 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9867 */
9868void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9869{
9870 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9871
9872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9873 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9874
9875 if(NULL == pWdaParams)
9876 {
9877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9878 "%s: pWdaParams received NULL", __func__);
9879 VOS_ASSERT(0);
9880 return;
9881 }
9882
9883 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9884 {
9885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9886 vos_mem_free(pWdaParams->wdaMsgParam);
9887 vos_mem_free(pWdaParams);
9888 }
9889
9890 return;
9891}
9892/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 * FUNCTION: WDA_ProcessKeepAliveReq
9894 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9895 * wakeup due to broadcast traffic (sta mode).
9896 */
9897VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9898 tSirKeepAliveReq *pKeepAliveParams)
9899{
9900 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009901 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9903 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9904 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009905 tWDA_ReqParams *pWdaParams;
9906
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009909 if(NULL == wdiKeepAliveInfo)
9910 {
9911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009914 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 return VOS_STATUS_E_NOMEM;
9916 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009917
9918 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9919 if(NULL == pWdaParams)
9920 {
9921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009922 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009923 VOS_ASSERT(0);
9924 vos_mem_free(wdiKeepAliveInfo);
9925 vos_mem_free(pKeepAliveParams);
9926 return VOS_STATUS_E_NOMEM;
9927 }
9928
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9930 pKeepAliveParams->packetType;
9931 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9932 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009933
9934 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9935 pKeepAliveParams->bssId,
9936 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009937
9938 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9939 {
9940 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9941 pKeepAliveParams->hostIpv4Addr,
9942 SIR_IPV4_ADDR_LEN);
9943 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9944 pKeepAliveParams->destIpv4Addr,
9945 SIR_IPV4_ADDR_LEN);
9946 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9947 pKeepAliveParams->destMacAddr,
9948 SIR_MAC_ADDR_LEN);
9949 }
9950 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9951 {
9952 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9953 SIR_IPV4_ADDR_LEN,
9954 0);
9955 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9956 SIR_IPV4_ADDR_LEN,
9957 0);
9958 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9959 SIR_MAC_ADDR_LEN,
9960 0);
9961 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009962 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9963 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009964
Jeff Johnson295189b2012-06-20 16:38:30 -07009965 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009966 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009968 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9969 pWdaParams->pWdaContext = pWDA;
9970
Jeff Johnson295189b2012-06-20 16:38:30 -07009971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9972 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9973 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9974 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9975 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9977 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9978 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9979 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9980 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9982 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9983 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9984 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9985 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9986 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9987 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9988 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9990 "TimePeriod %d PacketType %d",
9991 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9992 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009993 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009994 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009995
Jeff Johnson43971f52012-07-17 12:26:56 -07009996 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009997 {
9998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9999 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010000 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10002 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010003 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010005 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010006
10007}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010008/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010009 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 *
10011 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010012void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010013 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10014 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010015{
10016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010018 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 if(NULL == pWdaParams)
10020 {
10021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010022 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 VOS_ASSERT(0) ;
10024 return ;
10025 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10027 vos_mem_free(pWdaParams->wdaMsgParam);
10028 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010029 return ;
10030}
Jeff Johnson295189b2012-06-20 16:38:30 -070010031/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010032 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10033 * Free memory.
10034 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10035 */
10036void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10037{
10038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10039
10040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10041 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10042
10043 if(NULL == pWdaParams)
10044 {
10045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10046 "%s: pWdaParams received NULL", __func__);
10047 VOS_ASSERT(0);
10048 return;
10049 }
10050
10051 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10052 {
10053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10054 vos_mem_free(pWdaParams->wdaMsgParam);
10055 vos_mem_free(pWdaParams);
10056 }
10057
10058 return;
10059}
10060
10061/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010062 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10063 * Request to WDI to add WOWL Bcast pattern
10064 */
10065VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10066 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10067{
10068 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010069 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010070 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10071 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10072 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10073 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010075 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010076 if(NULL == wdiWowlAddBcPtrnInfo)
10077 {
10078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010080 VOS_ASSERT(0);
10081 return VOS_STATUS_E_NOMEM;
10082 }
10083 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10084 if(NULL == pWdaParams)
10085 {
10086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010088 VOS_ASSERT(0);
10089 vos_mem_free(wdiWowlAddBcPtrnInfo);
10090 return VOS_STATUS_E_NOMEM;
10091 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10093 pWowlAddBcPtrnParams->ucPatternId;
10094 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10095 pWowlAddBcPtrnParams->ucPatternByteOffset;
10096 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10097 pWowlAddBcPtrnParams->ucPatternMaskSize;
10098 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10099 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010100 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10101 {
10102 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10103 pWowlAddBcPtrnParams->ucPattern,
10104 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10105 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10106 pWowlAddBcPtrnParams->ucPatternMask,
10107 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10108 }
10109 else
10110 {
10111 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10112 pWowlAddBcPtrnParams->ucPattern,
10113 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10114 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10115 pWowlAddBcPtrnParams->ucPatternMask,
10116 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10117
10118 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10119 pWowlAddBcPtrnParams->ucPatternExt,
10120 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10121 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10122 pWowlAddBcPtrnParams->ucPatternMaskExt,
10123 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10124 }
10125
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010126 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10127 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10128
Yue Ma7f44bbe2013-04-12 11:47:39 -070010129 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10130 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010131 /* Store param pointer as passed in by caller */
10132 /* store Params pass it to WDI */
10133 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10134 pWdaParams->pWdaContext = pWDA;
10135 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010136 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010137 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010138 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010139 {
10140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10141 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010142 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 vos_mem_free(pWdaParams->wdaMsgParam) ;
10144 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10145 vos_mem_free(pWdaParams) ;
10146 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010147 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010148
10149}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010150/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010151 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 *
10153 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010154void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010155 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10156 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010157{
10158 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010160 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010161 if(NULL == pWdaParams)
10162 {
10163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010164 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010165 VOS_ASSERT(0) ;
10166 return ;
10167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10169 vos_mem_free(pWdaParams->wdaMsgParam);
10170 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 return ;
10172}
Jeff Johnson295189b2012-06-20 16:38:30 -070010173/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010174 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10175 * Free memory.
10176 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10177 */
10178void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10179{
10180 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10181
10182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10183 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10184
10185 if(NULL == pWdaParams)
10186 {
10187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10188 "%s: pWdaParams received NULL", __func__);
10189 VOS_ASSERT(0);
10190 return;
10191 }
10192
10193 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10194 {
10195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10196 vos_mem_free(pWdaParams->wdaMsgParam);
10197 vos_mem_free(pWdaParams);
10198 }
10199
10200 return;
10201}
10202/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010203 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10204 * Request to WDI to delete WOWL Bcast pattern
10205 */
10206VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10207 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10208{
10209 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010210 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010211 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10212 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10213 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10214 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010216 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010217 if(NULL == wdiWowlDelBcPtrnInfo)
10218 {
10219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010221 VOS_ASSERT(0);
10222 return VOS_STATUS_E_NOMEM;
10223 }
10224 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10225 if(NULL == pWdaParams)
10226 {
10227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010228 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 VOS_ASSERT(0);
10230 vos_mem_free(wdiWowlDelBcPtrnInfo);
10231 return VOS_STATUS_E_NOMEM;
10232 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10234 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010235
10236 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10237 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10238
Yue Ma7f44bbe2013-04-12 11:47:39 -070010239 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10240 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010241 /* Store param pointer as passed in by caller */
10242 /* store Params pass it to WDI */
10243 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10244 pWdaParams->pWdaContext = pWDA;
10245 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010246 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010247 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010248 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 {
10250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10251 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010252 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 vos_mem_free(pWdaParams->wdaMsgParam) ;
10254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10255 vos_mem_free(pWdaParams) ;
10256 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010257 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010258
10259}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010260/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010261 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 *
10263 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010264void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010265{
10266 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10267 tWDA_CbContext *pWDA;
10268 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010270 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 if(NULL == pWdaParams)
10272 {
10273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010274 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 VOS_ASSERT(0) ;
10276 return ;
10277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10279 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10280
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010281 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10282
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10284 vos_mem_free(pWdaParams) ;
10285
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010286 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010287 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 return ;
10290}
Jeff Johnson295189b2012-06-20 16:38:30 -070010291/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010292 * FUNCTION: WDA_WowlEnterReqCallback
10293 * Free memory and send WOWL Enter RSP back to PE.
10294 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10295 */
10296void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10297{
10298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10299 tWDA_CbContext *pWDA;
10300 tSirHalWowlEnterParams *pWowlEnterParams;
10301
10302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10303 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10304
10305 if(NULL == pWdaParams)
10306 {
10307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10308 "%s: pWdaParams received NULL", __func__);
10309 VOS_ASSERT(0);
10310 return;
10311 }
10312
10313 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10314 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10315 pWowlEnterParams->status = wdiStatus;
10316
10317 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10318 {
10319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10320 vos_mem_free(pWdaParams);
10321 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10322 }
10323
10324 return;
10325}
10326/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010327 * FUNCTION: WDA_ProcessWowlEnterReq
10328 * Request to WDI to enter WOWL
10329 */
10330VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10331 tSirHalWowlEnterParams *pWowlEnterParams)
10332{
10333 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010334 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010335 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10336 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10337 sizeof(WDI_WowlEnterReqParamsType)) ;
10338 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010340 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010341 if(NULL == wdiWowlEnterInfo)
10342 {
10343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 VOS_ASSERT(0);
10346 return VOS_STATUS_E_NOMEM;
10347 }
10348 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10349 if(NULL == pWdaParams)
10350 {
10351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010352 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010353 VOS_ASSERT(0);
10354 vos_mem_free(wdiWowlEnterInfo);
10355 return VOS_STATUS_E_NOMEM;
10356 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010357
10358 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10359
Jeff Johnson295189b2012-06-20 16:38:30 -070010360 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10361 pWowlEnterParams->magicPtrn,
10362 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10364 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10366 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010367 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10368 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10370 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010371 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10372 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010373 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10374 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10376 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010377 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10378 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010379#ifdef WLAN_WAKEUP_EVENTS
10380 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10381 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10382
10383 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10384 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10385
10386 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10387 pWowlEnterParams->ucWowNetScanOffloadMatch;
10388
10389 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10390 pWowlEnterParams->ucWowGTKRekeyError;
10391
10392 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10393 pWowlEnterParams->ucWoWBSSConnLoss;
10394#endif // WLAN_WAKEUP_EVENTS
10395
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010396 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10397 pWowlEnterParams->bssIdx;
10398
Yue Ma7f44bbe2013-04-12 11:47:39 -070010399 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10400 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010401 /* Store param pointer as passed in by caller */
10402 /* store Params pass it to WDI */
10403 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10404 pWdaParams->pWdaContext = pWDA;
10405 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010406 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010407 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010408 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 {
10410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10411 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010412 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010413 vos_mem_free(pWdaParams->wdaMsgParam) ;
10414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10415 vos_mem_free(pWdaParams) ;
10416 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010417 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010418
10419}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010420/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010421 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 *
10423 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010424void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010425{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10427 tWDA_CbContext *pWDA;
10428 tSirHalWowlExitParams *pWowlExitParams;
10429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010430 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010431 if(NULL == pWdaParams)
10432 {
10433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010434 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010435 VOS_ASSERT(0) ;
10436 return ;
10437 }
10438 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10439 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10440
10441 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010442 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010443
10444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10445 vos_mem_free(pWdaParams) ;
10446
Jeff Johnson295189b2012-06-20 16:38:30 -070010447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010448 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010449 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010450 return ;
10451}
Jeff Johnson295189b2012-06-20 16:38:30 -070010452/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010453 * FUNCTION: WDA_WowlExitReqCallback
10454 * Free memory and send WOWL Exit RSP back to PE.
10455 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10456 */
10457void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10458{
10459 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10460 tWDA_CbContext *pWDA;
10461 tSirHalWowlExitParams *pWowlExitParams;
10462
10463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10464 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10465
10466 if(NULL == pWdaParams)
10467 {
10468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10469 "%s: pWdaParams received NULL", __func__);
10470 VOS_ASSERT(0);
10471 return;
10472 }
10473
10474 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10475 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10476 pWowlExitParams->status = wdiStatus;
10477
10478 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10479 {
10480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10481 vos_mem_free(pWdaParams);
10482 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10483 }
10484
10485 return;
10486}
10487/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010488 * FUNCTION: WDA_ProcessWowlExitReq
10489 * Request to WDI to add WOWL Bcast pattern
10490 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010491VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10492 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010493{
10494 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010495 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010496 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10497 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10498 sizeof(WDI_WowlExitReqParamsType)) ;
10499 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010501 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010502 if(NULL == wdiWowlExitInfo)
10503 {
10504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010505 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010506 VOS_ASSERT(0);
10507 return VOS_STATUS_E_NOMEM;
10508 }
10509 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10510 if(NULL == pWdaParams)
10511 {
10512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010513 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010514 VOS_ASSERT(0);
10515 vos_mem_free(wdiWowlExitInfo);
10516 return VOS_STATUS_E_NOMEM;
10517 }
10518
10519 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10520 pWowlExitParams->bssIdx;
10521
Yue Ma7f44bbe2013-04-12 11:47:39 -070010522 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10523 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010524
10525 /* Store param pointer as passed in by caller */
10526 /* store Params pass it to WDI */
10527 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10528 pWdaParams->pWdaContext = pWDA;
10529 pWdaParams->wdaMsgParam = pWowlExitParams;
10530
10531 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010532 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010533
Jeff Johnson43971f52012-07-17 12:26:56 -070010534 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010535 {
10536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10537 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010538 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10540 vos_mem_free(pWdaParams->wdaMsgParam);
10541 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010543 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010544}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010545/*
10546 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10547 * Request to WDI to determine whether a given station is capable of
10548 * using HW-based frame translation
10549 */
10550v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10551 tANI_U8 staIdx)
10552{
10553 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10554}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010555
10556/*
10557 * FUNCTION: WDA_IsSelfSTA
10558 * Request to WDI to determine whether a given STAID is self station
10559 * index.
10560 */
10561v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10562{
10563
10564 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10565
Girish Gowli05cf44e2014-06-12 21:53:37 +053010566 if (NULL != pWDA)
10567 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10568 else
10569 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010570}
Jeff Johnson295189b2012-06-20 16:38:30 -070010571/*
10572 * FUNCTION: WDA_NvDownloadReqCallback
10573 * send NV Download RSP back to PE
10574 */
10575void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10576 void* pUserData)
10577{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010578
10579 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10580 tWDA_CbContext *pWDA;
10581
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010583 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010584
10585 if(NULL == pWdaParams)
10586 {
10587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010588 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010589 VOS_ASSERT(0) ;
10590 return ;
10591 }
10592
10593 pWDA = pWdaParams->pWdaContext;
10594
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10597 vos_mem_free(pWdaParams);
10598
Jeff Johnson295189b2012-06-20 16:38:30 -070010599 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 return ;
10601}
Jeff Johnson295189b2012-06-20 16:38:30 -070010602/*
10603 * FUNCTION: WDA_ProcessNvDownloadReq
10604 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10605 */
10606VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10607{
10608 /* Initialize the local Variables*/
10609 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10610 v_VOID_t *pNvBuffer=NULL;
10611 v_SIZE_t bufferSize = 0;
10612 WDI_Status status = WDI_STATUS_E_FAILURE;
10613 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010614 tWDA_ReqParams *pWdaParams ;
10615
Jeff Johnson295189b2012-06-20 16:38:30 -070010616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010617 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010618 if(NULL == pWDA)
10619 {
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010621 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010622 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010623 return VOS_STATUS_E_FAILURE;
10624 }
10625
10626 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010627 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10628
Jeff Johnson295189b2012-06-20 16:38:30 -070010629 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10630 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010631 if(NULL == wdiNvDownloadReqParam)
10632 {
10633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010635 VOS_ASSERT(0);
10636 return VOS_STATUS_E_NOMEM;
10637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 /* Copy Params to wdiNvDownloadReqParam*/
10639 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10640 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010641
10642 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10643 if(NULL == pWdaParams)
10644 {
10645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010646 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010647 VOS_ASSERT(0);
10648 vos_mem_free(wdiNvDownloadReqParam);
10649 return VOS_STATUS_E_NOMEM;
10650 }
10651
Jeff Johnson295189b2012-06-20 16:38:30 -070010652 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010653 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10654 pWdaParams->wdaMsgParam = NULL;
10655 pWdaParams->pWdaContext = pWDA;
10656
10657
Jeff Johnson295189b2012-06-20 16:38:30 -070010658 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010659
Jeff Johnson295189b2012-06-20 16:38:30 -070010660 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010661 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10662
Jeff Johnson295189b2012-06-20 16:38:30 -070010663 if(IS_WDI_STATUS_FAILURE(status))
10664 {
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10666 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10668 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010669 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010670 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010671}
10672/*
10673 * FUNCTION: WDA_FlushAcReqCallback
10674 * send Flush AC RSP back to TL
10675 */
10676void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10677{
10678 vos_msg_t wdaMsg = {0} ;
10679 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10680 tFlushACReq *pFlushACReqParams;
10681 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010683 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010684 if(NULL == pWdaParams)
10685 {
10686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010687 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010688 VOS_ASSERT(0) ;
10689 return ;
10690 }
10691
10692 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10693 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10694 if(NULL == pFlushACRspParams)
10695 {
10696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010698 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010699 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010700 return ;
10701 }
10702 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10703 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10704 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10705 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10706 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010707 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010708 vos_mem_free(pWdaParams->wdaMsgParam) ;
10709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10710 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010711 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10712 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10713 // POST message to TL
10714 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10715
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 return ;
10717}
Jeff Johnson295189b2012-06-20 16:38:30 -070010718/*
10719 * FUNCTION: WDA_ProcessFlushAcReq
10720 * Request to WDI to Update the DELBA REQ params.
10721 */
10722VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10723 tFlushACReq *pFlushAcReqParams)
10724{
10725 WDI_Status status = WDI_STATUS_SUCCESS ;
10726 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10727 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10728 sizeof(WDI_FlushAcReqParamsType)) ;
10729 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010730 if(NULL == wdiFlushAcReqParam)
10731 {
10732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010733 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010734 VOS_ASSERT(0);
10735 return VOS_STATUS_E_NOMEM;
10736 }
10737 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10738 if(NULL == pWdaParams)
10739 {
10740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010741 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010742 VOS_ASSERT(0);
10743 vos_mem_free(wdiFlushAcReqParam);
10744 return VOS_STATUS_E_NOMEM;
10745 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010747 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010748 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10749 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10750 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10751 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010752 /* Store Flush AC pointer, as this will be used for response */
10753 /* store Params pass it to WDI */
10754 pWdaParams->pWdaContext = pWDA;
10755 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10756 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10758 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010759 if(IS_WDI_STATUS_FAILURE(status))
10760 {
10761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10762 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10763 vos_mem_free(pWdaParams->wdaMsgParam) ;
10764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10765 vos_mem_free(pWdaParams) ;
10766 //TODO: respond to TL with failure
10767 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010769}
Jeff Johnson295189b2012-06-20 16:38:30 -070010770/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010771 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 *
10773 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010774void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010775{
10776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10777 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010778 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010779
10780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010781 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010782 if(NULL == pWdaParams)
10783 {
10784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010785 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010786 VOS_ASSERT(0) ;
10787 return ;
10788 }
10789 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10790 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10791 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10792 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10793 {
10794 pWDA->wdaAmpSessionOn = VOS_FALSE;
10795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010796 vos_mem_free(pWdaParams->wdaMsgParam) ;
10797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10798 vos_mem_free(pWdaParams) ;
10799 /*
10800 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10801 * param here
10802 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010803 return ;
10804}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010805/*
10806 * FUNCTION: WDA_BtAmpEventReqCallback
10807 * Free memory.
10808 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10809 */
10810void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10811{
10812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10813 tWDA_CbContext *pWDA;
10814 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010815
Yue Ma7f44bbe2013-04-12 11:47:39 -070010816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10817 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10818
10819 if(NULL == pWdaParams)
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10822 "%s: pWdaParams received NULL", __func__);
10823 VOS_ASSERT(0);
10824 return;
10825 }
10826
10827 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10828 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10829
10830 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10831 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10832 {
10833 pWDA->wdaAmpSessionOn = VOS_FALSE;
10834 }
10835
10836 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10837 {
10838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10839 vos_mem_free(pWdaParams->wdaMsgParam);
10840 vos_mem_free(pWdaParams);
10841 }
10842
10843 return;
10844}
Jeff Johnson295189b2012-06-20 16:38:30 -070010845/*
10846 * FUNCTION: WDA_ProcessBtAmpEventReq
10847 * Request to WDI to Update with BT AMP events.
10848 */
10849VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10850 tSmeBtAmpEvent *pBtAmpEventParams)
10851{
10852 WDI_Status status = WDI_STATUS_SUCCESS ;
10853 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10854 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10855 sizeof(WDI_BtAmpEventParamsType)) ;
10856 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010858 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010859 if(NULL == wdiBtAmpEventParam)
10860 {
10861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010862 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010863 VOS_ASSERT(0);
10864 return VOS_STATUS_E_NOMEM;
10865 }
10866 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10867 if(NULL == pWdaParams)
10868 {
10869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010870 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010871 VOS_ASSERT(0);
10872 vos_mem_free(wdiBtAmpEventParam);
10873 return VOS_STATUS_E_NOMEM;
10874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010875 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10876 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010877 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10878 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 /* Store BT AMP event pointer, as this will be used for response */
10880 /* store Params pass it to WDI */
10881 pWdaParams->pWdaContext = pWDA;
10882 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10883 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010885 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010886 if(IS_WDI_STATUS_FAILURE(status))
10887 {
10888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10889 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10890 vos_mem_free(pWdaParams->wdaMsgParam) ;
10891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10892 vos_mem_free(pWdaParams) ;
10893 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10895 {
10896 pWDA->wdaAmpSessionOn = VOS_TRUE;
10897 }
10898 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010899}
10900
Jeff Johnson295189b2012-06-20 16:38:30 -070010901/*
10902 * FUNCTION: WDA_FTMCommandReqCallback
10903 * Handle FTM CMD response came from HAL
10904 * Route responce to HDD FTM
10905 */
10906void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10907 void *usrData)
10908{
10909 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010910 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10911 {
10912 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010913 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010914 return;
10915 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 /* Release Current FTM Command Request */
10917 vos_mem_free(pWDA->wdaFTMCmdReq);
10918 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010919 /* Post FTM Responce to HDD FTM */
10920 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010921 return;
10922}
Jeff Johnson295189b2012-06-20 16:38:30 -070010923/*
10924 * FUNCTION: WDA_ProcessFTMCommand
10925 * Send FTM command to WDI
10926 */
10927VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10928 tPttMsgbuffer *pPTTFtmCmd)
10929{
10930 WDI_Status status = WDI_STATUS_SUCCESS;
10931 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 ftmCMDReq = (WDI_FTMCommandReqType *)
10933 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10934 if(NULL == ftmCMDReq)
10935 {
10936 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10937 "WDA FTM Command buffer alloc fail");
10938 return VOS_STATUS_E_NOMEM;
10939 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010940 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10941 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010943 /* Send command to WDI */
10944 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 return status;
10946}
Jeff Johnsone7245742012-09-05 17:12:55 -070010947#ifdef FEATURE_OEM_DATA_SUPPORT
10948/*
10949 * FUNCTION: WDA_StartOemDataReqCallback
10950 *
10951 */
10952void WDA_StartOemDataReqCallback(
10953 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10954 void* pUserData)
10955{
10956 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010957 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10958 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010959 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010960
Jeff Johnsone7245742012-09-05 17:12:55 -070010961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010962 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010963
10964 if(NULL == pWdaParams)
10965 {
10966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010967 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010968 VOS_ASSERT(0) ;
10969 return ;
10970 }
10971 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10972
Jeff Johnsone7245742012-09-05 17:12:55 -070010973 if(NULL == pWDA)
10974 {
10975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010976 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010977 VOS_ASSERT(0);
10978 return ;
10979 }
10980
10981 /*
10982 * Allocate memory for response params sent to PE
10983 */
10984 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10985
10986 // Check if memory is allocated for OemdataMeasRsp Params.
10987 if(NULL == pOemDataRspParams)
10988 {
10989 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10990 "OEM DATA WDA callback alloc fail");
10991 VOS_ASSERT(0) ;
10992 return;
10993 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010994
Jeff Johnsone7245742012-09-05 17:12:55 -070010995 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10997 vos_mem_free(pWdaParams->wdaMsgParam);
10998 vos_mem_free(pWdaParams) ;
10999
Jeff Johnsone7245742012-09-05 17:12:55 -070011000 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011001 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011002 * Also, here success always means that we have atleast one BSSID.
11003 */
11004 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11005
11006 //enable Tx
11007 status = WDA_ResumeDataTx(pWDA);
11008 if(status != VOS_STATUS_SUCCESS)
11009 {
11010 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11011 }
11012 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11013 return ;
11014}
11015/*
11016 * FUNCTION: WDA_ProcessStartOemDataReq
11017 * Send Start Oem Data Req to WDI
11018 */
11019VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11020 tStartOemDataReq *pOemDataReqParams)
11021{
11022 WDI_Status status = WDI_STATUS_SUCCESS;
11023 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011024 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011025
11026 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11027
11028 if(NULL == wdiOemDataReqParams)
11029 {
11030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011032 VOS_ASSERT(0);
11033 return VOS_STATUS_E_NOMEM;
11034 }
11035
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011036 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11037 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11038 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11039 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011040
11041 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11042
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011043 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11044 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011045 {
11046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011047 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011048 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011049 vos_mem_free(pOemDataReqParams);
11050 VOS_ASSERT(0);
11051 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011052 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011053
Bernald44a1ae2013-01-09 08:30:39 -080011054 pWdaParams->pWdaContext = (void*)pWDA;
11055 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11056 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011057
11058 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11059 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011060
11061 if(IS_WDI_STATUS_FAILURE(status))
11062 {
11063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11064 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11066 vos_mem_free(pWdaParams->wdaMsgParam);
11067 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011068 }
11069 return CONVERT_WDI2VOS_STATUS(status) ;
11070}
11071#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011072/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011073 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 *
11075 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011076void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011077{
11078 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011080 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011081 if(NULL == pWdaParams)
11082 {
11083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011084 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011085 VOS_ASSERT(0) ;
11086 return ;
11087 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011088
11089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11090 vos_mem_free(pWdaParams->wdaMsgParam);
11091 vos_mem_free(pWdaParams);
11092
11093 return ;
11094}
11095/*
11096 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11097 * Free memory.
11098 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11099 */
11100void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11101{
11102 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11103
11104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11105 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11106
11107 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011108 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11110 "%s: pWdaParams received NULL", __func__);
11111 VOS_ASSERT(0);
11112 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011114
11115 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011116 {
11117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011118 vos_mem_free(pWdaParams->wdaMsgParam);
11119 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011120 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011121
11122 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011123}
Jeff Johnson295189b2012-06-20 16:38:30 -070011124#ifdef WLAN_FEATURE_GTK_OFFLOAD
11125/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011126 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011127 *
11128 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011129void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011130 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011131{
11132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11133
11134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011135 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011136 if(NULL == pWdaParams)
11137 {
11138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11139 "%s: pWdaParams received NULL", __func__);
11140 VOS_ASSERT(0);
11141 return;
11142 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011143
Jeff Johnson295189b2012-06-20 16:38:30 -070011144 vos_mem_free(pWdaParams->wdaMsgParam) ;
11145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11146 vos_mem_free(pWdaParams) ;
11147
11148 //print a msg, nothing else to do
11149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011150 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011151
11152 return ;
11153}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011154/*
11155 * FUNCTION: WDA_GTKOffloadReqCallback
11156 * Free memory.
11157 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11158 */
11159void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11160{
11161 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011162
Yue Ma7f44bbe2013-04-12 11:47:39 -070011163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11164 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11165
11166 if(NULL == pWdaParams)
11167 {
11168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11169 "%s: pWdaParams received NULL", __func__);
11170 VOS_ASSERT(0);
11171 return;
11172 }
11173
11174 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11175 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011176 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11177 sizeof(WDI_GtkOffloadReqMsg));
11178 vos_mem_zero(pWdaParams->wdaMsgParam,
11179 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11181 vos_mem_free(pWdaParams->wdaMsgParam);
11182 vos_mem_free(pWdaParams);
11183 }
11184
11185 return;
11186}
Jeff Johnson295189b2012-06-20 16:38:30 -070011187/*
11188 * FUNCTION: WDA_ProcessGTKOffloadReq
11189 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11190 * to broadcast traffic (sta mode).
11191 */
11192VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11193 tpSirGtkOffloadParams pGtkOffloadParams)
11194{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011195 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011196 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11197 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11198 sizeof(WDI_GtkOffloadReqMsg)) ;
11199 tWDA_ReqParams *pWdaParams ;
11200
11201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011202 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011203
11204 if(NULL == wdiGtkOffloadReqMsg)
11205 {
11206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011207 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011208 VOS_ASSERT(0);
11209 return VOS_STATUS_E_NOMEM;
11210 }
11211
11212 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11213 if(NULL == pWdaParams)
11214 {
11215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011217 VOS_ASSERT(0);
11218 vos_mem_free(wdiGtkOffloadReqMsg);
11219 return VOS_STATUS_E_NOMEM;
11220 }
11221
11222 //
11223 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11224 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011225
11226 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011227 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011228
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11230 // Copy KCK
11231 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11232 // Copy KEK
11233 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11234 // Copy KeyReplayCounter
11235 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11236 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11237
Yue Ma7f44bbe2013-04-12 11:47:39 -070011238 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11239 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011240
Jeff Johnson295189b2012-06-20 16:38:30 -070011241
11242 /* Store Params pass it to WDI */
11243 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11244 pWdaParams->pWdaContext = pWDA;
11245 /* Store param pointer as passed in by caller */
11246 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11247
Yue Ma7f44bbe2013-04-12 11:47:39 -070011248 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011249
11250 if(IS_WDI_STATUS_FAILURE(status))
11251 {
11252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11253 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011254 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11255 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11257 vos_mem_free(pWdaParams->wdaMsgParam);
11258 vos_mem_free(pWdaParams);
11259 }
11260
11261 return CONVERT_WDI2VOS_STATUS(status) ;
11262}
11263
11264/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011265 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 *
11267 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011268void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011269 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011270{
11271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11272 tWDA_CbContext *pWDA;
11273 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011274 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011275 vos_msg_t vosMsg;
11276
11277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011278 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011279
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011280 if(NULL == pWdaParams)
11281 {
11282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11283 "%s: pWdaParams received NULL", __func__);
11284 VOS_ASSERT(0);
11285 return;
11286 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011287
Nirav Shah374de6e2014-02-13 16:40:01 +053011288 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11289 if(NULL == pGtkOffloadGetInfoRsp)
11290 {
11291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11292 "%s: vos_mem_malloc failed ", __func__);
11293 VOS_ASSERT(0);
11294 return;
11295 }
11296
Jeff Johnson295189b2012-06-20 16:38:30 -070011297 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11298 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11299
11300 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11301 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11302
11303 /* Message Header */
11304 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011305 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011306
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011307 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11308 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11309 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11310 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11311 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011312
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011313 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11314 pwdiGtkOffloadGetInfoRsparams->bssId,
11315 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011316 /* VOS message wrapper */
11317 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11318 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11319 vosMsg.bodyval = 0;
11320
11321 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11322 {
11323 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011324 vos_mem_zero(pGtkOffloadGetInfoRsp,
11325 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011326 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11327 }
11328
11329 vos_mem_free(pWdaParams->wdaMsgParam) ;
11330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11331 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011332
11333 return;
11334}
11335/*
11336 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11337 * Free memory and send RSP back to SME.
11338 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11339 */
11340void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11341{
11342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11343 vos_msg_t vosMsg;
11344
11345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11346 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11347
11348 if(NULL == pWdaParams)
11349 {
11350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11351 "%s: pWdaParams received NULL", __func__);
11352 VOS_ASSERT(0);
11353 return;
11354 }
11355
11356 /* VOS message wrapper */
11357 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11358 vosMsg.bodyptr = NULL;
11359 vosMsg.bodyval = 0;
11360
11361 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11362 {
11363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11364 vos_mem_free(pWdaParams->wdaMsgParam);
11365 vos_mem_free(pWdaParams);
11366 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11367 }
11368
11369 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011370}
11371#endif
11372
11373/*
11374 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11375 * Request to WDI to set Tx Per Tracking configurations
11376 */
11377VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11378{
11379 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011380 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011381 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11382 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11383 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11384 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011386 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011387 if(NULL == pwdiSetTxPerTrackingReqParams)
11388 {
11389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011391 vos_mem_free(pTxPerTrackingParams);
11392 VOS_ASSERT(0);
11393 return VOS_STATUS_E_NOMEM;
11394 }
11395 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11396 if(NULL == pWdaParams)
11397 {
11398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011399 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011400 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11401 vos_mem_free(pTxPerTrackingParams);
11402 VOS_ASSERT(0);
11403 return VOS_STATUS_E_NOMEM;
11404 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011405 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11406 pTxPerTrackingParams->ucTxPerTrackingEnable;
11407 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11408 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11409 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11410 pTxPerTrackingParams->ucTxPerTrackingRatio;
11411 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11412 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011413 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11414 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 /* Store param pointer as passed in by caller */
11416 /* store Params pass it to WDI
11417 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11418 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11419 pWdaParams->pWdaContext = pWDA;
11420 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011421 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011422 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011423 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011424 {
11425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11426 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011427 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 vos_mem_free(pWdaParams->wdaMsgParam) ;
11429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11430 vos_mem_free(pWdaParams) ;
11431 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011432 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011433
11434}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011435/*
11436 * FUNCTION: WDA_HALDumpCmdCallback
11437 * Send the VOS complete .
11438 */
11439void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11440 void* pUserData)
11441{
11442 tANI_U8 *buffer = NULL;
11443 tWDA_CbContext *pWDA = NULL;
11444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 if(NULL == pWdaParams)
11446 {
11447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011448 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011449 VOS_ASSERT(0) ;
11450 return ;
11451 }
11452
11453 pWDA = pWdaParams->pWdaContext;
11454 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011455 if(wdiRspParams->usBufferLen > 0)
11456 {
11457 /*Copy the Resp data to UMAC supplied buffer*/
11458 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11459 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11461 vos_mem_free(pWdaParams);
11462
11463 /* Indicate VOSS about the start complete */
11464 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 return ;
11466}
11467
Jeff Johnson295189b2012-06-20 16:38:30 -070011468/*
11469 * FUNCTION: WDA_ProcessHALDumpCmdReq
11470 * Send Dump command to WDI
11471 */
11472VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11473 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11474 tANI_U32 arg4, tANI_U8 *pBuffer)
11475{
11476 WDI_Status status = WDI_STATUS_SUCCESS;
11477 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11478 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11479 tWDA_ReqParams *pWdaParams ;
11480 pVosContextType pVosContext = NULL;
11481 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11483 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011484 if(pVosContext)
11485 {
11486 if (pVosContext->isLogpInProgress)
11487 {
11488 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11489 "%s:LOGP in Progress. Ignore!!!", __func__);
11490 return VOS_STATUS_E_BUSY;
11491 }
11492 }
11493 else
11494 {
11495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11496 "%s: VOS Context Null", __func__);
11497 return VOS_STATUS_E_RESOURCES;
11498 }
11499
Jeff Johnson295189b2012-06-20 16:38:30 -070011500 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11501 if(NULL == pWdaParams)
11502 {
11503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011505 return VOS_STATUS_E_NOMEM;
11506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 /* Allocate memory WDI request structure*/
11508 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11509 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11510 if(NULL == wdiHALDumpCmdReqParam)
11511 {
11512 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11513 "WDA HAL DUMP Command buffer alloc fail");
11514 vos_mem_free(pWdaParams);
11515 return WDI_STATUS_E_FAILURE;
11516 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011517 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011518 /* Extract the arguments */
11519 wdiHalDumpCmdInfo->command = cmd;
11520 wdiHalDumpCmdInfo->argument1 = arg1;
11521 wdiHalDumpCmdInfo->argument2 = arg2;
11522 wdiHalDumpCmdInfo->argument3 = arg3;
11523 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011524 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11526
11527 /* Response message will be passed through the buffer */
11528 pWdaParams->wdaMsgParam = (void *)pBuffer;
11529
11530 /* store Params pass it to WDI */
11531 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011532 /* Send command to WDI */
11533 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011534 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011535 if ( vStatus != VOS_STATUS_SUCCESS )
11536 {
11537 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11538 {
11539 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011540 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 }
11542 else
11543 {
11544 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011545 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011546 }
11547 VOS_ASSERT(0);
11548 }
11549 return status;
11550}
Jeff Johnson295189b2012-06-20 16:38:30 -070011551#ifdef WLAN_FEATURE_GTK_OFFLOAD
11552/*
11553 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11554 * Request to WDI to get GTK Offload Information
11555 */
11556VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11557 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11558{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011559 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011560 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11561 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11562 tWDA_ReqParams *pWdaParams ;
11563
11564 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11565 {
11566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011567 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011568 VOS_ASSERT(0);
11569 return VOS_STATUS_E_NOMEM;
11570 }
11571
11572 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11573 if(NULL == pWdaParams)
11574 {
11575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011576 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011577 VOS_ASSERT(0);
11578 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11579 return VOS_STATUS_E_NOMEM;
11580 }
11581
Yue Ma7f44bbe2013-04-12 11:47:39 -070011582 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11583 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011584
Jeff Johnson295189b2012-06-20 16:38:30 -070011585 /* Store Params pass it to WDI */
11586 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11587 pWdaParams->pWdaContext = pWDA;
11588 /* Store param pointer as passed in by caller */
11589 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11590
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011591 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011592 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011593
Yue Ma7f44bbe2013-04-12 11:47:39 -070011594 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011595
11596 if(IS_WDI_STATUS_FAILURE(status))
11597 {
11598 /* failure returned by WDI API */
11599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11600 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11602 vos_mem_free(pWdaParams) ;
11603 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11604 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11605 }
11606
11607 return CONVERT_WDI2VOS_STATUS(status) ;
11608}
11609#endif // WLAN_FEATURE_GTK_OFFLOAD
11610
11611/*
Yue Mab9c86f42013-08-14 15:59:08 -070011612 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11613 *
11614 */
11615VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11616 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11617{
11618 WDI_Status wdiStatus;
11619 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11620
11621 addPeriodicTxPtrnParams =
11622 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11623
11624 if (NULL == addPeriodicTxPtrnParams)
11625 {
11626 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11627 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11628 __func__);
11629
11630 return VOS_STATUS_E_NOMEM;
11631 }
11632
11633 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11634 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11635
11636 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11637 addPeriodicTxPtrnParams->pUserData = pWDA;
11638
11639 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11640
11641 if (WDI_STATUS_PENDING == wdiStatus)
11642 {
11643 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11644 "Pending received for %s:%d", __func__, __LINE__ );
11645 }
11646 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11647 {
11648 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11649 "Failure in %s:%d", __func__, __LINE__ );
11650 }
11651
11652 vos_mem_free(addPeriodicTxPtrnParams);
11653
11654 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11655}
11656
11657/*
11658 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11659 *
11660 */
11661VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11662 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11663{
11664 WDI_Status wdiStatus;
11665 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11666
11667 delPeriodicTxPtrnParams =
11668 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11669
11670 if (NULL == delPeriodicTxPtrnParams)
11671 {
11672 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11673 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11674 __func__);
11675
11676 return VOS_STATUS_E_NOMEM;
11677 }
11678
11679 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11680 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11681
11682 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11683 delPeriodicTxPtrnParams->pUserData = pWDA;
11684
11685 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11686
11687 if (WDI_STATUS_PENDING == wdiStatus)
11688 {
11689 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11690 "Pending received for %s:%d", __func__, __LINE__ );
11691 }
11692 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11693 {
11694 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11695 "Failure in %s:%d", __func__, __LINE__ );
11696 }
11697
11698 vos_mem_free(delPeriodicTxPtrnParams);
11699
11700 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11701}
11702
Rajeev79dbe4c2013-10-05 11:03:42 +053011703#ifdef FEATURE_WLAN_BATCH_SCAN
11704/*
11705 * FUNCTION: WDA_ProcessStopBatchScanInd
11706 *
11707 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11708 *
11709 * PARAM:
11710 * pWDA: pointer to WDA context
11711 * pReq: pointer to stop batch scan request
11712 */
11713VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11714 tSirStopBatchScanInd *pReq)
11715{
11716 WDI_Status wdiStatus;
11717 WDI_StopBatchScanIndType wdiReq;
11718
11719 wdiReq.param = pReq->param;
11720
11721 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11722
11723 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11724 {
11725 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11726 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11727 }
11728
11729 vos_mem_free(pReq);
11730
11731 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11732}
11733/*==========================================================================
11734 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11735
11736 DESCRIPTION
11737 API to pull batch scan result from FW
11738
11739 PARAMETERS
11740 pWDA: Pointer to WDA context
11741 pGetBatchScanReq: Pointer to get batch scan result indication
11742
11743 RETURN VALUE
11744 NONE
11745
11746===========================================================================*/
11747VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11748 tSirTriggerBatchScanResultInd *pReq)
11749{
11750 WDI_Status wdiStatus;
11751 WDI_TriggerBatchScanResultIndType wdiReq;
11752
11753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11754 "------> %s " ,__func__);
11755
11756 wdiReq.param = pReq->param;
11757
11758 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11759
11760 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11761 {
11762 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11763 "Trigger batch scan result ind failed %s:%d",
11764 __func__, wdiStatus);
11765 }
11766
11767 vos_mem_free(pReq);
11768
11769 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11770}
11771
11772/*==========================================================================
11773 FUNCTION WDA_SetBatchScanRespCallback
11774
11775 DESCRIPTION
11776 API to process set batch scan response from FW
11777
11778 PARAMETERS
11779 pRsp: Pointer to set batch scan response
11780 pUserData: Pointer to user data
11781
11782 RETURN VALUE
11783 NONE
11784
11785===========================================================================*/
11786void WDA_SetBatchScanRespCallback
11787(
11788 WDI_SetBatchScanRspType *pRsp,
11789 void* pUserData
11790)
11791{
11792 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11793 tpAniSirGlobal pMac;
11794 void *pCallbackContext;
11795 tWDA_CbContext *pWDA = NULL ;
11796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11797
11798
11799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11800 "<------ %s " ,__func__);
11801 if (NULL == pWdaParams)
11802 {
11803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11804 "%s: pWdaParams received NULL", __func__);
11805 VOS_ASSERT(0) ;
11806 return ;
11807 }
11808
11809 /*extract WDA context*/
11810 pWDA = pWdaParams->pWdaContext;
11811 if (NULL == pWDA)
11812 {
11813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11814 "%s:pWDA is NULL can't invole HDD callback",
11815 __func__);
11816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11817 vos_mem_free(pWdaParams->wdaMsgParam);
11818 vos_mem_free(pWdaParams);
11819 VOS_ASSERT(0);
11820 return;
11821 }
11822
11823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11824 vos_mem_free(pWdaParams->wdaMsgParam);
11825 vos_mem_free(pWdaParams);
11826
11827 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11828 if (NULL == pMac)
11829 {
11830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11831 "%s:pMac is NULL", __func__);
11832 VOS_ASSERT(0);
11833 return;
11834 }
11835
11836 pHddSetBatchScanRsp =
11837 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11838 if (NULL == pHddSetBatchScanRsp)
11839 {
11840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11841 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11842 VOS_ASSERT(0);
11843 return;
11844 }
11845
11846 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11847
11848 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11849 /*call hdd callback with set batch scan response data*/
11850 if(pMac->pmc.setBatchScanReqCallback)
11851 {
11852 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11853 }
11854 else
11855 {
11856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11857 "%s:HDD callback is null", __func__);
11858 VOS_ASSERT(0);
11859 }
11860
11861 vos_mem_free(pHddSetBatchScanRsp);
11862 return ;
11863}
11864
11865/*==========================================================================
11866 FUNCTION WDA_ProcessSetBatchScanReq
11867
11868 DESCRIPTION
11869 API to send set batch scan request to WDI
11870
11871 PARAMETERS
11872 pWDA: Pointer to WDA context
11873 pSetBatchScanReq: Pointer to set batch scan req
11874
11875 RETURN VALUE
11876 NONE
11877
11878===========================================================================*/
11879VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11880 tSirSetBatchScanReq *pSetBatchScanReq)
11881{
11882 WDI_Status status;
11883 tWDA_ReqParams *pWdaParams ;
11884 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11885
11886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11887 "------> %s " ,__func__);
11888
11889 pWdiSetBatchScanReq =
11890 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11891 if (NULL == pWdiSetBatchScanReq)
11892 {
11893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11894 "%s: VOS MEM Alloc Failure", __func__);
11895 vos_mem_free(pSetBatchScanReq);
11896 VOS_ASSERT(0);
11897 return VOS_STATUS_E_NOMEM;
11898 }
11899
11900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11901 if (NULL == pWdaParams)
11902 {
11903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11904 "%s: VOS MEM Alloc Failure", __func__);
11905 VOS_ASSERT(0);
11906 vos_mem_free(pSetBatchScanReq);
11907 vos_mem_free(pWdiSetBatchScanReq);
11908 return VOS_STATUS_E_NOMEM;
11909 }
11910
11911 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11912 pWdiSetBatchScanReq->numberOfScansToBatch =
11913 pSetBatchScanReq->numberOfScansToBatch;
11914 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11915 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11916 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11917
11918 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11919 pWdaParams->pWdaContext = pWDA;
11920 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11921
11922 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11923 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11924 if (IS_WDI_STATUS_FAILURE(status))
11925 {
11926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11927 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11929 vos_mem_free(pWdaParams->wdaMsgParam);
11930 vos_mem_free(pWdaParams);
11931 }
11932 return CONVERT_WDI2VOS_STATUS(status);
11933}
11934
11935#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011936/*
11937 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11938 *
11939 * DESCRIPTION: This function sends start/update OBSS scan
11940 * inidcation message to WDI
11941 *
11942 * PARAM:
11943 * pWDA: pointer to WDA context
11944 * pReq: pointer to start OBSS scan request
11945 */
11946VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11947 tSirHT40OBSSScanInd *pReq)
11948{
11949 WDI_Status status;
11950 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11951 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011952
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11954 "------> %s " ,__func__);
11955 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11956 wdiOBSSScanParams.pUserData = pWDA;
11957
11958 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11959 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11960 pWdiOBSSScanInd->scanType = pReq->scanType;
11961 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11962 pReq->OBSSScanActiveDwellTime;
11963 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11964 pReq->OBSSScanPassiveDwellTime;
11965 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11966 pReq->BSSChannelWidthTriggerScanInterval;
11967 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11968 pReq->BSSWidthChannelTransitionDelayFactor;
11969 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11970 pReq->OBSSScanActiveTotalPerChannel;
11971 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11972 pReq->OBSSScanPassiveTotalPerChannel;
11973 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11974 pReq->OBSSScanActivityThreshold;
11975 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11976 vos_mem_copy(pWdiOBSSScanInd->channels,
11977 pReq->channels,
11978 pReq->channelCount);
11979 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11980 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11981 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11982 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11983 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11984
11985 vos_mem_copy(pWdiOBSSScanInd->ieField,
11986 pReq->ieField,
11987 pReq->ieFieldLen);
11988
11989 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11990 if (WDI_STATUS_PENDING == status)
11991 {
11992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11993 "Pending received for %s:%d ",__func__,__LINE__ );
11994 }
11995 else if (WDI_STATUS_SUCCESS_SYNC != status)
11996 {
11997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11998 "Failure in %s:%d ",__func__,__LINE__ );
11999 }
12000 return CONVERT_WDI2VOS_STATUS(status) ;
12001}
12002/*
12003 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12004 *
12005 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12006 *
12007 * PARAM:
12008 * pWDA: pointer to WDA context
12009 * pReq: pointer to stop batch scan request
12010 */
12011VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12012 tANI_U8 *bssIdx)
12013{
12014 WDI_Status status;
12015
12016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12017 "------> %s " ,__func__);
12018
12019 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12020 if (WDI_STATUS_PENDING == status)
12021 {
12022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12023 "Pending received for %s:%d ",__func__,__LINE__ );
12024 }
12025 else if (WDI_STATUS_SUCCESS_SYNC != status)
12026 {
12027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12028 "Failure in %s:%d ",__func__,__LINE__ );
12029 }
12030 return CONVERT_WDI2VOS_STATUS(status) ;
12031}
Yue Mab9c86f42013-08-14 15:59:08 -070012032/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012033 * FUNCTION: WDA_ProcessRateUpdateInd
12034 *
12035 */
12036VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12037 tSirRateUpdateInd *pRateUpdateParams)
12038{
12039 WDI_Status wdiStatus;
12040 WDI_RateUpdateIndParams rateUpdateParams;
12041
12042 vos_mem_copy(rateUpdateParams.bssid,
12043 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12044
12045 rateUpdateParams.ucastDataRateTxFlag =
12046 pRateUpdateParams->ucastDataRateTxFlag;
12047 rateUpdateParams.reliableMcastDataRateTxFlag =
12048 pRateUpdateParams->reliableMcastDataRateTxFlag;
12049 rateUpdateParams.mcastDataRate24GHzTxFlag =
12050 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12051 rateUpdateParams.mcastDataRate5GHzTxFlag =
12052 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12053
12054 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12055 rateUpdateParams.reliableMcastDataRate =
12056 pRateUpdateParams->reliableMcastDataRate;
12057 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12058 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12059
12060 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12061 rateUpdateParams.pUserData = pWDA;
12062
12063 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12064
12065 if (WDI_STATUS_PENDING == wdiStatus)
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 != wdiStatus)
12071 {
12072 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12073 "Failure in %s:%d", __func__, __LINE__ );
12074 }
12075
12076 vos_mem_free(pRateUpdateParams);
12077
12078 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12079}
12080
12081/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012082 * -------------------------------------------------------------------------
12083 * DATA interface with WDI for Mgmt Frames
12084 * -------------------------------------------------------------------------
12085 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012086/*
12087 * FUNCTION: WDA_TxComplete
12088 * Callback function for the WDA_TxPacket
12089 */
12090VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12091 VOS_STATUS status )
12092{
12093
12094 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12095 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012096 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012097
12098 if(NULL == wdaContext)
12099 {
12100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12101 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012102 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 VOS_ASSERT(0);
12104 return VOS_STATUS_E_FAILURE;
12105 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012106
12107 /*Check if frame was timed out or not*/
12108 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12109 (v_PVOID_t)&uUserData);
12110
12111 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12112 {
12113 /*Discard frame - no further processing is needed*/
12114 vos_pkt_return_packet(pData);
12115 return VOS_STATUS_SUCCESS;
12116 }
12117
Jeff Johnson295189b2012-06-20 16:38:30 -070012118 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12119 if( NULL!=wdaContext->pTxCbFunc)
12120 {
12121 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012122 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012123 {
12124 wdaContext->pTxCbFunc(pMac, pData);
12125 }
12126 else
12127 {
12128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012129 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012130 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012131 //Return from here since we reaching here because the packet already timeout
12132 return status;
12133 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012134 }
12135
12136 /*
12137 * Trigger the event to bring the HAL TL Tx complete function to come
12138 * out of wait
12139 * Let the coe above to complete the packet first. When this event is set,
12140 * the thread waiting for the event may run and set Vospacket_freed causing the original
12141 * packet not being freed.
12142 */
12143 status = vos_event_set(&wdaContext->txFrameEvent);
12144 if(!VOS_IS_STATUS_SUCCESS(status))
12145 {
12146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012147 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012149 return status;
12150}
Jeff Johnson295189b2012-06-20 16:38:30 -070012151/*
12152 * FUNCTION: WDA_TxPacket
12153 * Forward TX management frame to WDI
12154 */
12155VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12156 void *pFrmBuf,
12157 tANI_U16 frmLen,
12158 eFrameType frmType,
12159 eFrameTxDir txDir,
12160 tANI_U8 tid,
12161 pWDATxRxCompFunc pCompFunc,
12162 void *pData,
12163 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012164 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012165{
12166 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12167 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12168 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12169 tANI_U8 eventIdx = 0;
12170 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12171 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012172 if((NULL == pWDA)||(NULL == pFrmBuf))
12173 {
12174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012175 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012176 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012177 VOS_ASSERT(0);
12178 return VOS_STATUS_E_FAILURE;
12179 }
12180
12181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012182 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012183 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12184 if(NULL == pMac)
12185 {
12186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012187 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012188 VOS_ASSERT(0);
12189 return VOS_STATUS_E_FAILURE;
12190 }
12191
12192
12193
12194 /* store the call back function in WDA context */
12195 pWDA->pTxCbFunc = pCompFunc;
12196 /* store the call back for the function of ackTxComplete */
12197 if( pAckTxComp )
12198 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012199 if( NULL != pWDA->pAckTxCbFunc )
12200 {
12201 /* Already TxComp is active no need to active again */
12202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012203 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012204 pWDA->pAckTxCbFunc( pMac, 0);
12205 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012206
Jeff Johnsone7245742012-09-05 17:12:55 -070012207 if( VOS_STATUS_SUCCESS !=
12208 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12209 {
12210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12211 "Tx Complete timeout Timer Stop Failed ");
12212 }
12213 else
12214 {
12215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012216 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012217 }
12218 }
12219
12220 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12221 pWDA->pAckTxCbFunc = pAckTxComp;
12222 if( VOS_STATUS_SUCCESS !=
12223 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12224 {
12225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12226 "Tx Complete Timer Start Failed ");
12227 pWDA->pAckTxCbFunc = NULL;
12228 return eHAL_STATUS_FAILURE;
12229 }
12230 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012231 /* Reset the event to be not signalled */
12232 status = vos_event_reset(&pWDA->txFrameEvent);
12233 if(!VOS_IS_STATUS_SUCCESS(status))
12234 {
12235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012236 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012237 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12238 if( pAckTxComp )
12239 {
12240 pWDA->pAckTxCbFunc = NULL;
12241 if( VOS_STATUS_SUCCESS !=
12242 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12243 {
12244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12245 "Tx Complete timeout Timer Stop Failed ");
12246 }
12247 }
12248 return VOS_STATUS_E_FAILURE;
12249 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012250
12251 /* If Peer Sta mask is set don't overwrite to self sta */
12252 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012253 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012254 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012255 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012256 else
12257 {
Ganesh K08bce952012-12-13 15:04:41 -080012258 /* Get system role, use the self station if in unknown role or STA role */
12259 systemRole = wdaGetGlobalSystemRole(pMac);
12260 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12261 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012262#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012263 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012264#endif
Ganesh K08bce952012-12-13 15:04:41 -080012265 ))
12266 {
12267 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12268 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012269 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012270
Jeff Johnsone7245742012-09-05 17:12:55 -070012271 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12272 disassoc frame reaches the HW, HAL has already deleted the peer station */
12273 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012274 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012275 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012276 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012277 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012278 /*Send Probe request frames on self sta idx*/
12279 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012280 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012281 /* Since we donot want probe responses to be retried, send probe responses
12282 through the NO_ACK queues */
12283 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12284 {
12285 //probe response is sent out using self station and no retries options.
12286 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12287 }
12288 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12289 {
12290 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12291 }
12292 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012293 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012294
12295 /*Set frame tag to 0
12296 We will use the WDA user data in order to tag a frame as expired*/
12297 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12298 (v_PVOID_t)0);
12299
12300
12301 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12302 frmLen, ucTypeSubType, tid,
12303 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12304 {
12305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012306 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012308 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 -070012309 if( pAckTxComp )
12310 {
12311 pWDA->pAckTxCbFunc = NULL;
12312 if( VOS_STATUS_SUCCESS !=
12313 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12314 {
12315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12316 "Tx Complete timeout Timer Stop Failed ");
12317 }
12318 }
12319 return VOS_STATUS_E_FAILURE;
12320 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012321 /*
12322 * Wait for the event to be set by the TL, to get the response of TX
12323 * complete, this event should be set by the Callback function called by TL
12324 */
12325 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12326 &eventIdx);
12327 if(!VOS_IS_STATUS_SUCCESS(status))
12328 {
12329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12330 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012331 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012332 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12333 after the packet gets completed(packet freed once)*/
12334
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012335 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012336 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012337
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012338 /*Tag Frame as timed out for later deletion*/
12339 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12340 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
12341
Jeff Johnson295189b2012-06-20 16:38:30 -070012342 /* check whether the packet was freed already,so need not free again when
12343 * TL calls the WDA_Txcomplete routine
12344 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012345 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12346 /*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 -070012347 {
12348 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012349 } */
12350
Jeff Johnson295189b2012-06-20 16:38:30 -070012351 if( pAckTxComp )
12352 {
12353 pWDA->pAckTxCbFunc = NULL;
12354 if( VOS_STATUS_SUCCESS !=
12355 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12356 {
12357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12358 "Tx Complete timeout Timer Stop Failed ");
12359 }
12360 }
12361 status = VOS_STATUS_E_FAILURE;
12362 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012363#ifdef WLAN_DUMP_MGMTFRAMES
12364 if (VOS_IS_STATUS_SUCCESS(status))
12365 {
12366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12367 "%s() TX packet : SubType %d", __func__,pFc->subType);
12368 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12369 pData, frmLen);
12370 }
12371#endif
12372
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012373 if (VOS_IS_STATUS_SUCCESS(status))
12374 {
12375 if (pMac->fEnableDebugLog & 0x1)
12376 {
12377 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12378 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12379 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12380 {
12381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12382 pFc->type, pFc->subType);
12383 }
12384 }
12385 }
12386
12387
Jeff Johnson295189b2012-06-20 16:38:30 -070012388 return status;
12389}
Jeff Johnson295189b2012-06-20 16:38:30 -070012390/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012391 * FUNCTION: WDA_ProcessDHCPStartInd
12392 * Forward DHCP Start to WDI
12393 */
12394static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12395 tAniDHCPInd *dhcpStartInd)
12396{
12397 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012398 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012399
c_hpothu0b0cab72014-02-13 21:52:40 +053012400 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12401 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012402 sizeof(tSirMacAddr));
12403
c_hpothu0b0cab72014-02-13 21:52:40 +053012404 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012405
c_hpothu0b0cab72014-02-13 21:52:40 +053012406 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012407 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12409 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012410 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012411 else if (WDI_STATUS_SUCCESS_SYNC != status)
12412 {
12413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12414 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12415 }
12416
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012417 vos_mem_free(dhcpStartInd);
12418 return CONVERT_WDI2VOS_STATUS(status) ;
12419}
12420
12421 /*
12422 * FUNCTION: WDA_ProcessDHCPStopInd
12423 * Forward DHCP Stop to WDI
12424 */
12425 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12426 tAniDHCPInd *dhcpStopInd)
12427 {
12428 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012429 WDI_DHCPInd wdiDHCPInd;
12430
12431 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12432 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12433
12434 status = WDI_dhcpStopInd(&wdiDHCPInd);
12435
12436 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012437 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12439 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012440 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012441 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012442 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12444 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012445 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012446
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012447 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012448
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012449 return CONVERT_WDI2VOS_STATUS(status) ;
12450 }
12451
12452/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012453 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12454 *
12455 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12456 *
12457 * PARAM:
12458 * pWDA: pointer to WDA context
12459 * pReq: pointer to stop batch scan request
12460 */
12461VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12462 tpSpoofMacAddrReqParams pReq)
12463{
12464 WDI_Status wdiStatus;
12465 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12466 tWDA_ReqParams *pWdaParams;
12467
12468 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12469 sizeof(WDI_SpoofMacAddrInfoType));
12470 if(NULL == WDI_SpoofMacAddrInfoParams) {
12471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12472 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12473 VOS_ASSERT(0);
12474 return VOS_STATUS_E_NOMEM;
12475 }
12476 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12477 if(NULL == pWdaParams) {
12478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12479 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012480 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012481 VOS_ASSERT(0);
12482 return VOS_STATUS_E_NOMEM;
12483 }
12484
12485 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12486 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12487
12488 pWdaParams->pWdaContext = pWDA;
12489 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012490 pWdaParams->wdaMsgParam = (void *)pReq;
12491
12492 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12493 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12494
Siddharth Bhal171788a2014-09-29 21:02:40 +053012495 /* store Params pass it to WDI */
12496 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12497
12498 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012499 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12500 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012501
12502 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12503 {
12504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12505 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12506 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12507 vos_mem_free(pWdaParams->wdaMsgParam);
12508 vos_mem_free(pWdaParams);
12509 }
12510
12511 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12512}
12513
12514/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012515 * FUNCTION: WDA_McProcessMsg
12516 * Trigger DAL-AL to start CFG download
12517 */
12518VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12519{
12520 VOS_STATUS status = VOS_STATUS_SUCCESS;
12521 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012522 if(NULL == pMsg)
12523 {
12524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012525 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012526 VOS_ASSERT(0);
12527 return VOS_STATUS_E_FAILURE;
12528 }
12529
12530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012531 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012532
12533 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12534 if(NULL == pWDA )
12535 {
12536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012537 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012539 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012540 return VOS_STATUS_E_FAILURE;
12541 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012542 /* Process all the WDA messages.. */
12543 switch( pMsg->type )
12544 {
12545 case WNI_CFG_DNLD_REQ:
12546 {
12547 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012548 /* call WDA complete event if config download success */
12549 if( VOS_IS_STATUS_SUCCESS(status) )
12550 {
12551 vos_WDAComplete_cback(pVosContext);
12552 }
12553 else
12554 {
12555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12556 "WDA Config Download failure" );
12557 }
12558 break ;
12559 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012560 /*
12561 * Init SCAN request from PE, convert it into DAL format
12562 * and send it to DAL
12563 */
12564 case WDA_INIT_SCAN_REQ:
12565 {
12566 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12567 break ;
12568 }
12569 /* start SCAN request from PE */
12570 case WDA_START_SCAN_REQ:
12571 {
12572 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12573 break ;
12574 }
12575 /* end SCAN request from PE */
12576 case WDA_END_SCAN_REQ:
12577 {
12578 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12579 break ;
12580 }
12581 /* end SCAN request from PE */
12582 case WDA_FINISH_SCAN_REQ:
12583 {
12584 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12585 break ;
12586 }
12587 /* join request from PE */
12588 case WDA_CHNL_SWITCH_REQ:
12589 {
12590 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12591 {
12592 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12593 }
12594 else
12595 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012596 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12597 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12598 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12599 {
12600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12601 "call ProcessChannelSwitchReq_V1" );
12602 WDA_ProcessChannelSwitchReq_V1(pWDA,
12603 (tSwitchChannelParams*)pMsg->bodyptr) ;
12604 }
12605 else
12606 {
12607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12608 "call ProcessChannelSwitchReq" );
12609 WDA_ProcessChannelSwitchReq(pWDA,
12610 (tSwitchChannelParams*)pMsg->bodyptr) ;
12611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012612 }
12613 break ;
12614 }
12615 /* ADD BSS request from PE */
12616 case WDA_ADD_BSS_REQ:
12617 {
12618 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12619 break ;
12620 }
12621 case WDA_ADD_STA_REQ:
12622 {
12623 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12624 break ;
12625 }
12626 case WDA_DELETE_BSS_REQ:
12627 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012628 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12629 break ;
12630 }
12631 case WDA_DELETE_STA_REQ:
12632 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012633 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12634 break ;
12635 }
12636 case WDA_CONFIG_PARAM_UPDATE_REQ:
12637 {
12638 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12639 break ;
12640 }
12641 case WDA_SET_BSSKEY_REQ:
12642 {
12643 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12644 break ;
12645 }
12646 case WDA_SET_STAKEY_REQ:
12647 {
12648 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12649 break ;
12650 }
12651 case WDA_SET_STA_BCASTKEY_REQ:
12652 {
12653 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12654 break ;
12655 }
12656 case WDA_REMOVE_BSSKEY_REQ:
12657 {
12658 WDA_ProcessRemoveBssKeyReq(pWDA,
12659 (tRemoveBssKeyParams *)pMsg->bodyptr);
12660 break ;
12661 }
12662 case WDA_REMOVE_STAKEY_REQ:
12663 {
12664 WDA_ProcessRemoveStaKeyReq(pWDA,
12665 (tRemoveStaKeyParams *)pMsg->bodyptr);
12666 break ;
12667 }
12668 case WDA_REMOVE_STA_BCASTKEY_REQ:
12669 {
12670 /* TODO: currently UMAC is not sending this request, Add the code for
12671 handling this request when UMAC supports */
12672 break;
12673 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012674#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012675 case WDA_TSM_STATS_REQ:
12676 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012677 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012678 break;
12679 }
12680#endif
12681 case WDA_UPDATE_EDCA_PROFILE_IND:
12682 {
12683 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12684 break;
12685 }
12686 case WDA_ADD_TS_REQ:
12687 {
12688 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12689 break;
12690 }
12691 case WDA_DEL_TS_REQ:
12692 {
12693 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12694 break;
12695 }
12696 case WDA_ADDBA_REQ:
12697 {
12698 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12699 break;
12700 }
12701 case WDA_DELBA_IND:
12702 {
12703 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12704 break;
12705 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012706 case WDA_UPDATE_CHAN_LIST_REQ:
12707 {
12708 WDA_ProcessUpdateChannelList(pWDA,
12709 (tSirUpdateChanList *)pMsg->bodyptr);
12710 break;
12711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012712 case WDA_SET_LINK_STATE:
12713 {
12714 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12715 break;
12716 }
12717 case WDA_GET_STATISTICS_REQ:
12718 {
12719 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12720 break;
12721 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012722#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012723 case WDA_GET_ROAM_RSSI_REQ:
12724 {
12725 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12726 break;
12727 }
12728#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012729 case WDA_PWR_SAVE_CFG:
12730 {
12731 if(pWDA->wdaState == WDA_READY_STATE)
12732 {
12733 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12734 }
12735 else
12736 {
12737 if(NULL != pMsg->bodyptr)
12738 {
12739 vos_mem_free(pMsg->bodyptr);
12740 }
12741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12742 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12743 }
12744 break;
12745 }
12746 case WDA_ENTER_IMPS_REQ:
12747 {
12748 if(pWDA->wdaState == WDA_READY_STATE)
12749 {
12750 WDA_ProcessEnterImpsReq(pWDA);
12751 }
12752 else
12753 {
12754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12755 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12756 }
12757 break;
12758 }
12759 case WDA_EXIT_IMPS_REQ:
12760 {
12761 if(pWDA->wdaState == WDA_READY_STATE)
12762 {
12763 WDA_ProcessExitImpsReq(pWDA);
12764 }
12765 else
12766 {
12767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12768 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12769 }
12770 break;
12771 }
12772 case WDA_ENTER_BMPS_REQ:
12773 {
12774 if(pWDA->wdaState == WDA_READY_STATE)
12775 {
12776 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12777 }
12778 else
12779 {
12780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12781 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12782 }
12783 break;
12784 }
12785 case WDA_EXIT_BMPS_REQ:
12786 {
12787 if(pWDA->wdaState == WDA_READY_STATE)
12788 {
12789 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12790 }
12791 else
12792 {
12793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12794 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12795 }
12796 break;
12797 }
12798 case WDA_ENTER_UAPSD_REQ:
12799 {
12800 if(pWDA->wdaState == WDA_READY_STATE)
12801 {
12802 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12803 }
12804 else
12805 {
12806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12807 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12808 }
12809 break;
12810 }
12811 case WDA_EXIT_UAPSD_REQ:
12812 {
12813 if(pWDA->wdaState == WDA_READY_STATE)
12814 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012815 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012816 }
12817 else
12818 {
12819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12820 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12821 }
12822 break;
12823 }
12824 case WDA_UPDATE_UAPSD_IND:
12825 {
12826 if(pWDA->wdaState == WDA_READY_STATE)
12827 {
12828 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12829 }
12830 else
12831 {
12832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12833 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12834 }
12835 break;
12836 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012837 case WDA_REGISTER_PE_CALLBACK :
12838 {
12839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12840 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12841 /*TODO: store the PE callback */
12842 /* Do Nothing? MSG Body should be freed at here */
12843 if(NULL != pMsg->bodyptr)
12844 {
12845 vos_mem_free(pMsg->bodyptr);
12846 }
12847 break;
12848 }
12849 case WDA_SYS_READY_IND :
12850 {
12851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12852 "Handling msg type WDA_SYS_READY_IND " );
12853 pWDA->wdaState = WDA_READY_STATE;
12854 if(NULL != pMsg->bodyptr)
12855 {
12856 vos_mem_free(pMsg->bodyptr);
12857 }
12858 break;
12859 }
12860 case WDA_BEACON_FILTER_IND :
12861 {
12862 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12863 break;
12864 }
12865 case WDA_BTC_SET_CFG:
12866 {
12867 /*TODO: handle this while dealing with BTC */
12868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12869 "Handling msg type WDA_BTC_SET_CFG " );
12870 /* Do Nothing? MSG Body should be freed at here */
12871 if(NULL != pMsg->bodyptr)
12872 {
12873 vos_mem_free(pMsg->bodyptr);
12874 }
12875 break;
12876 }
12877 case WDA_SIGNAL_BT_EVENT:
12878 {
12879 /*TODO: handle this while dealing with BTC */
12880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12881 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12882 /* Do Nothing? MSG Body should be freed at here */
12883 if(NULL != pMsg->bodyptr)
12884 {
12885 vos_mem_free(pMsg->bodyptr);
12886 }
12887 break;
12888 }
12889 case WDA_CFG_RXP_FILTER_REQ:
12890 {
12891 WDA_ProcessConfigureRxpFilterReq(pWDA,
12892 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12893 break;
12894 }
12895 case WDA_SET_HOST_OFFLOAD:
12896 {
12897 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12898 break;
12899 }
12900 case WDA_SET_KEEP_ALIVE:
12901 {
12902 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12903 break;
12904 }
12905#ifdef WLAN_NS_OFFLOAD
12906 case WDA_SET_NS_OFFLOAD:
12907 {
12908 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12909 break;
12910 }
12911#endif //WLAN_NS_OFFLOAD
12912 case WDA_ADD_STA_SELF_REQ:
12913 {
12914 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12915 break;
12916 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012917 case WDA_DEL_STA_SELF_REQ:
12918 {
12919 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12920 break;
12921 }
12922 case WDA_WOWL_ADD_BCAST_PTRN:
12923 {
12924 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12925 break;
12926 }
12927 case WDA_WOWL_DEL_BCAST_PTRN:
12928 {
12929 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12930 break;
12931 }
12932 case WDA_WOWL_ENTER_REQ:
12933 {
12934 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12935 break;
12936 }
12937 case WDA_WOWL_EXIT_REQ:
12938 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012939 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012940 break;
12941 }
12942 case WDA_TL_FLUSH_AC_REQ:
12943 {
12944 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12945 break;
12946 }
12947 case WDA_SIGNAL_BTAMP_EVENT:
12948 {
12949 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12950 break;
12951 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053012952#ifdef WLAN_FEATURE_LINK_LAYER_STATS
12953 case WDA_LINK_LAYER_STATS_SET_REQ:
12954 {
12955 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
12956 break;
12957 }
12958 case WDA_LINK_LAYER_STATS_GET_REQ:
12959 {
12960 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
12961 break;
12962 }
12963 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
12964 {
12965 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
12966 break;
12967 }
12968#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053012969#ifdef WLAN_FEATURE_EXTSCAN
12970 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
12971 {
12972 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
12973 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
12974 break;
12975 }
12976 case WDA_EXTSCAN_START_REQ:
12977 {
12978 WDA_ProcessEXTScanStartReq(pWDA,
12979 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
12980 break;
12981 }
12982 case WDA_EXTSCAN_STOP_REQ:
12983 {
12984 WDA_ProcessEXTScanStopReq(pWDA,
12985 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
12986 break;
12987 }
12988 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
12989 {
12990 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
12991 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
12992 break;
12993 }
12994 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
12995 {
12996 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
12997 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
12998 break;
12999 }
13000 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13001 {
13002 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13003 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13004 break;
13005 }
13006 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13007 {
13008 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13009 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13010 break;
13011 }
13012 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13013 {
13014 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13015 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13016 break;
13017 }
13018#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013019#ifdef WDA_UT
13020 case WDA_WDI_EVENT_MSG:
13021 {
13022 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13023 break ;
13024 }
13025#endif
13026 case WDA_UPDATE_BEACON_IND:
13027 {
13028 WDA_ProcessUpdateBeaconParams(pWDA,
13029 (tUpdateBeaconParams *)pMsg->bodyptr);
13030 break;
13031 }
13032 case WDA_SEND_BEACON_REQ:
13033 {
13034 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13035 break;
13036 }
13037 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13038 {
13039 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13040 (tSendProbeRespParams *)pMsg->bodyptr);
13041 break;
13042 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013043#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013044 case WDA_SET_MAX_TX_POWER_REQ:
13045 {
13046 WDA_ProcessSetMaxTxPowerReq(pWDA,
13047 (tMaxTxPowerParams *)pMsg->bodyptr);
13048 break;
13049 }
13050#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013051 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13052 {
13053 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13054 pMsg->bodyptr);
13055 break;
13056 }
schang86c22c42013-03-13 18:41:24 -070013057 case WDA_SET_TX_POWER_REQ:
13058 {
13059 WDA_ProcessSetTxPowerReq(pWDA,
13060 (tSirSetTxPowerReq *)pMsg->bodyptr);
13061 break;
13062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013063 case WDA_SET_P2P_GO_NOA_REQ:
13064 {
13065 WDA_ProcessSetP2PGONOAReq(pWDA,
13066 (tP2pPsParams *)pMsg->bodyptr);
13067 break;
13068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013069 /* timer related messages */
13070 case WDA_TIMER_BA_ACTIVITY_REQ:
13071 {
13072 WDA_BaCheckActivity(pWDA) ;
13073 break ;
13074 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013075
13076 /* timer related messages */
13077 case WDA_TIMER_TRAFFIC_STATS_IND:
13078 {
13079 WDA_TimerTrafficStatsInd(pWDA);
13080 break;
13081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013082#ifdef WLAN_FEATURE_VOWIFI_11R
13083 case WDA_AGGR_QOS_REQ:
13084 {
13085 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13086 break;
13087 }
13088#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013089 case WDA_FTM_CMD_REQ:
13090 {
13091 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13092 break ;
13093 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013094#ifdef FEATURE_OEM_DATA_SUPPORT
13095 case WDA_START_OEM_DATA_REQ:
13096 {
13097 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13098 break;
13099 }
13100#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013101 /* Tx Complete Time out Indication */
13102 case WDA_TX_COMPLETE_TIMEOUT_IND:
13103 {
13104 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13105 break;
13106 }
13107 case WDA_WLAN_SUSPEND_IND:
13108 {
13109 WDA_ProcessWlanSuspendInd(pWDA,
13110 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13111 break;
13112 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013113 case WDA_WLAN_RESUME_REQ:
13114 {
13115 WDA_ProcessWlanResumeReq(pWDA,
13116 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13117 break;
13118 }
13119
13120 case WDA_UPDATE_CF_IND:
13121 {
13122 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13123 pMsg->bodyptr = NULL;
13124 break;
13125 }
13126#ifdef FEATURE_WLAN_SCAN_PNO
13127 case WDA_SET_PNO_REQ:
13128 {
13129 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13130 break;
13131 }
13132 case WDA_UPDATE_SCAN_PARAMS_REQ:
13133 {
13134 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13135 break;
13136 }
13137 case WDA_SET_RSSI_FILTER_REQ:
13138 {
13139 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13140 break;
13141 }
13142#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013143#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013144 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013145 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013146 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013147 break;
13148 }
13149#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 case WDA_SET_TX_PER_TRACKING_REQ:
13151 {
13152 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13153 break;
13154 }
13155
13156#ifdef WLAN_FEATURE_PACKET_FILTERING
13157 case WDA_8023_MULTICAST_LIST_REQ:
13158 {
13159 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13160 break;
13161 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013162 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13163 {
13164 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13165 break;
13166 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013167 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13168 {
13169 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13170 break;
13171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013172 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13173 {
13174 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13175 break;
13176 }
13177#endif // WLAN_FEATURE_PACKET_FILTERING
13178
13179
13180 case WDA_TRANSMISSION_CONTROL_IND:
13181 {
13182 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13183 break;
13184 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013185 case WDA_SET_POWER_PARAMS_REQ:
13186 {
13187 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13188 break;
13189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013190#ifdef WLAN_FEATURE_GTK_OFFLOAD
13191 case WDA_GTK_OFFLOAD_REQ:
13192 {
13193 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13194 break;
13195 }
13196
13197 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13198 {
13199 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13200 break;
13201 }
13202#endif //WLAN_FEATURE_GTK_OFFLOAD
13203
13204 case WDA_SET_TM_LEVEL_REQ:
13205 {
13206 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13207 break;
13208 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013209
Mohit Khanna4a70d262012-09-11 16:30:12 -070013210 case WDA_UPDATE_OP_MODE:
13211 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013212 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13213 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13214 {
13215 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13216 }
13217 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013218 {
13219 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13220 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13221 else
13222 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013223 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013224 }
13225 else
13226 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013227 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013228 break;
13229 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013230#ifdef WLAN_FEATURE_11W
13231 case WDA_EXCLUDE_UNENCRYPTED_IND:
13232 {
13233 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13234 break;
13235 }
13236#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013237#ifdef FEATURE_WLAN_TDLS
13238 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13239 {
13240 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13241 break;
13242 }
13243#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013244 case WDA_DHCP_START_IND:
13245 {
13246 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13247 break;
13248 }
13249 case WDA_DHCP_STOP_IND:
13250 {
13251 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13252 break;
13253 }
Leo Chang9056f462013-08-01 19:21:11 -070013254#ifdef FEATURE_WLAN_LPHB
13255 case WDA_LPHB_CONF_REQ:
13256 {
13257 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13258 break;
13259 }
13260#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013261 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13262 {
13263 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13264 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13265 break;
13266 }
13267 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13268 {
13269 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13270 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13271 break;
13272 }
13273
Rajeev79dbe4c2013-10-05 11:03:42 +053013274#ifdef FEATURE_WLAN_BATCH_SCAN
13275 case WDA_SET_BATCH_SCAN_REQ:
13276 {
13277 WDA_ProcessSetBatchScanReq(pWDA,
13278 (tSirSetBatchScanReq *)pMsg->bodyptr);
13279 break;
13280 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013281 case WDA_RATE_UPDATE_IND:
13282 {
13283 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13284 break;
13285 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013286 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13287 {
13288 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13289 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13290 break;
13291 }
13292 case WDA_STOP_BATCH_SCAN_IND:
13293 {
13294 WDA_ProcessStopBatchScanInd(pWDA,
13295 (tSirStopBatchScanInd *)pMsg->bodyptr);
13296 break;
13297 }
c_hpothu92367912014-05-01 15:18:17 +053013298 case WDA_GET_BCN_MISS_RATE_REQ:
13299 WDA_ProcessGetBcnMissRateReq(pWDA,
13300 (tSirBcnMissRateReq *)pMsg->bodyptr);
13301 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013302#endif
13303
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013304 case WDA_HT40_OBSS_SCAN_IND:
13305 {
13306 WDA_ProcessHT40OBSSScanInd(pWDA,
13307 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13308 break;
13309 }
13310 case WDA_HT40_OBSS_STOP_SCAN_IND:
13311 {
13312 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13313 (tANI_U8*)pMsg->bodyptr);
13314 break;
13315 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013316// tdlsoffchan
13317#ifdef FEATURE_WLAN_TDLS
13318 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13319 {
13320 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13321 break;
13322 }
13323#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013324 case WDA_SPOOF_MAC_ADDR_REQ:
13325 {
13326 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13327 break;
13328 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013329 default:
13330 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013332 "No Handling for msg type %x in WDA "
13333 ,pMsg->type);
13334 /* Do Nothing? MSG Body should be freed at here */
13335 if(NULL != pMsg->bodyptr)
13336 {
13337 vos_mem_free(pMsg->bodyptr);
13338 }
13339 //WDA_VOS_ASSERT(0) ;
13340 }
13341 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013342 return status ;
13343}
13344
Jeff Johnson295189b2012-06-20 16:38:30 -070013345/*
13346 * FUNCTION: WDA_LowLevelIndCallback
13347 * IND API callback from WDI, send Ind to PE
13348 */
13349void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13350 void* pUserData )
13351{
13352 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13353#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13354 tSirRSSINotification rssiNotification;
13355#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013356 if(NULL == pWDA)
13357 {
13358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013359 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013360 VOS_ASSERT(0);
13361 return ;
13362 }
13363
13364 switch(wdiLowLevelInd->wdiIndicationType)
13365 {
13366 case WDI_RSSI_NOTIFICATION_IND:
13367 {
13368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13369 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013370#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13371 rssiNotification.bReserved =
13372 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13373 rssiNotification.bRssiThres1NegCross =
13374 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13375 rssiNotification.bRssiThres1PosCross =
13376 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13377 rssiNotification.bRssiThres2NegCross =
13378 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13379 rssiNotification.bRssiThres2PosCross =
13380 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13381 rssiNotification.bRssiThres3NegCross =
13382 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13383 rssiNotification.bRssiThres3PosCross =
13384 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013385 rssiNotification.avgRssi = (v_S7_t)
13386 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013387 WLANTL_BMPSRSSIRegionChangedNotification(
13388 pWDA->pVosContext,
13389 &rssiNotification);
13390#endif
13391 break ;
13392 }
13393 case WDI_MISSED_BEACON_IND:
13394 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013395 tpSirSmeMissedBeaconInd pMissBeacInd =
13396 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13398 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013399 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013400 if(NULL == pMissBeacInd)
13401 {
13402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13403 "%s: VOS MEM Alloc Failure", __func__);
13404 break;
13405 }
13406 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13407 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13408 pMissBeacInd->bssIdx =
13409 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13410 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013411 break ;
13412 }
13413 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13414 {
13415 /* TODO: Decode Ind and send Ind to PE */
13416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13417 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13418 break ;
13419 }
13420
13421 case WDI_MIC_FAILURE_IND:
13422 {
13423 tpSirSmeMicFailureInd pMicInd =
13424 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13425
13426 if(NULL == pMicInd)
13427 {
13428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013430 break;
13431 }
13432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13433 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013434 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13435 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13436 vos_mem_copy(pMicInd->bssId,
13437 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13438 sizeof(tSirMacAddr));
13439 vos_mem_copy(pMicInd->info.srcMacAddr,
13440 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13441 sizeof(tSirMacAddr));
13442 vos_mem_copy(pMicInd->info.taMacAddr,
13443 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13444 sizeof(tSirMacAddr));
13445 vos_mem_copy(pMicInd->info.dstMacAddr,
13446 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13447 sizeof(tSirMacAddr));
13448 vos_mem_copy(pMicInd->info.rxMacAddr,
13449 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13450 sizeof(tSirMacAddr));
13451 pMicInd->info.multicast =
13452 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13453 pMicInd->info.keyId=
13454 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13455 pMicInd->info.IV1=
13456 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13457 vos_mem_copy(pMicInd->info.TSC,
13458 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013459 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13460 (void *)pMicInd , 0) ;
13461 break ;
13462 }
13463 case WDI_FATAL_ERROR_IND:
13464 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013465 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013466 /* TODO: Decode Ind and send Ind to PE */
13467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13468 "Received WDI_FATAL_ERROR_IND from WDI ");
13469 break ;
13470 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013471 case WDI_DEL_STA_IND:
13472 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013473 tpDeleteStaContext pDelSTACtx =
13474 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13475
13476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13477 "Received WDI_DEL_STA_IND from WDI ");
13478 if(NULL == pDelSTACtx)
13479 {
13480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013482 break;
13483 }
13484 vos_mem_copy(pDelSTACtx->addr2,
13485 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13486 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013487 vos_mem_copy(pDelSTACtx->bssId,
13488 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13489 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013490 pDelSTACtx->assocId =
13491 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13492 pDelSTACtx->reasonCode =
13493 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13494 pDelSTACtx->staId =
13495 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013496 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13497 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013498 break ;
13499 }
13500 case WDI_COEX_IND:
13501 {
13502 tANI_U32 index;
13503 vos_msg_t vosMsg;
13504 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
13505 if(NULL == pSmeCoexInd)
13506 {
13507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013508 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 break;
13510 }
13511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13512 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013513 /* Message Header */
13514 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13515 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013516 /* Info from WDI Indication */
13517 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13518 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13519 {
13520 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13521 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013522 /* VOS message wrapper */
13523 vosMsg.type = eWNI_SME_COEX_IND;
13524 vosMsg.bodyptr = (void *)pSmeCoexInd;
13525 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013526 /* Send message to SME */
13527 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13528 {
13529 /* free the mem and return */
13530 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13531 }
13532 else
13533 {
13534 /* DEBUG */
13535 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13536 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13537 pSmeCoexInd->coexIndType,
13538 pSmeCoexInd->coexIndData[0],
13539 pSmeCoexInd->coexIndData[1],
13540 pSmeCoexInd->coexIndData[2],
13541 pSmeCoexInd->coexIndData[3]);
13542 }
13543 break;
13544 }
13545 case WDI_TX_COMPLETE_IND:
13546 {
13547 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13548 /* Calling TxCompleteAck Indication from wda context*/
13549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13550 "Complete Indication received from HAL");
13551 if( pWDA->pAckTxCbFunc )
13552 {
13553 if( VOS_STATUS_SUCCESS !=
13554 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13555 {
13556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13557 "Tx Complete timeout Timer Stop Failed ");
13558 }
13559 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13560 pWDA->pAckTxCbFunc = NULL;
13561 }
13562 else
13563 {
13564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13565 "Tx Complete Indication is received after timeout ");
13566 }
13567 break;
13568 }
Viral Modid86bde22012-12-10 13:09:21 -080013569 case WDI_P2P_NOA_START_IND :
13570 {
13571 tSirP2PNoaStart *pP2pNoaStart =
13572 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13573
13574 if (NULL == pP2pNoaStart)
13575 {
13576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13577 "Memory allocation failure, "
13578 "WDI_P2P_NOA_START_IND not forwarded");
13579 break;
13580 }
13581 pP2pNoaStart->status =
13582 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13583 pP2pNoaStart->bssIdx =
13584 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13585 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13586 (void *)pP2pNoaStart , 0) ;
13587 break;
13588 }
13589
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013590#ifdef FEATURE_WLAN_TDLS
13591 case WDI_TDLS_IND :
13592 {
13593 tSirTdlsInd *pTdlsInd =
13594 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13595
13596 if (NULL == pTdlsInd)
13597 {
13598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13599 "Memory allocation failure, "
13600 "WDI_TDLS_IND not forwarded");
13601 break;
13602 }
13603 pTdlsInd->status =
13604 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13605 pTdlsInd->assocId =
13606 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13607 pTdlsInd->staIdx =
13608 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13609 pTdlsInd->reasonCode =
13610 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13611 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13612 (void *)pTdlsInd , 0) ;
13613 break;
13614 }
13615#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013616 case WDI_P2P_NOA_ATTR_IND :
13617 {
13618 tSirP2PNoaAttr *pP2pNoaAttr =
13619 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13621 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013622 if (NULL == pP2pNoaAttr)
13623 {
13624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13625 "Memory allocation failure, "
13626 "WDI_P2P_NOA_ATTR_IND not forwarded");
13627 break;
13628 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013629 pP2pNoaAttr->index =
13630 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13631 pP2pNoaAttr->oppPsFlag =
13632 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13633 pP2pNoaAttr->ctWin =
13634 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13635
13636 pP2pNoaAttr->uNoa1IntervalCnt =
13637 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13638 pP2pNoaAttr->uNoa1Duration =
13639 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13640 pP2pNoaAttr->uNoa1Interval =
13641 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13642 pP2pNoaAttr->uNoa1StartTime =
13643 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013644 pP2pNoaAttr->uNoa2IntervalCnt =
13645 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13646 pP2pNoaAttr->uNoa2Duration =
13647 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13648 pP2pNoaAttr->uNoa2Interval =
13649 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13650 pP2pNoaAttr->uNoa2StartTime =
13651 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013652 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13653 (void *)pP2pNoaAttr , 0) ;
13654 break;
13655 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013656#ifdef FEATURE_WLAN_SCAN_PNO
13657 case WDI_PREF_NETWORK_FOUND_IND:
13658 {
13659 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013660 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13661 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13662 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13663 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13664
Jeff Johnson295189b2012-06-20 16:38:30 -070013665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13666 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013667 if (NULL == pPrefNetworkFoundInd)
13668 {
13669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13670 "Memory allocation failure, "
13671 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013672 if (NULL !=
13673 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13674 {
13675 wpalMemoryFree(
13676 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13677 );
13678 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13679 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013680 break;
13681 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013682 /* Message Header */
13683 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013684 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013685
13686 /* Info from WDI Indication */
13687 pPrefNetworkFoundInd->ssId.length =
13688 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013689 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013690 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13691 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13692 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013693 if (NULL !=
13694 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13695 {
13696 pPrefNetworkFoundInd->frameLength =
13697 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13698 vos_mem_copy( pPrefNetworkFoundInd->data,
13699 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13700 pPrefNetworkFoundInd->frameLength);
13701 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13702 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13703 }
13704 else
13705 {
13706 pPrefNetworkFoundInd->frameLength = 0;
13707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013708 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013709 /* VOS message wrapper */
13710 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13711 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13712 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013713 /* Send message to SME */
13714 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13715 {
13716 /* free the mem and return */
13717 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13718 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013719 break;
13720 }
13721#endif // FEATURE_WLAN_SCAN_PNO
13722
13723#ifdef WLAN_WAKEUP_EVENTS
13724 case WDI_WAKE_REASON_IND:
13725 {
13726 vos_msg_t vosMsg;
13727 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13728 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13729 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13730
13731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053013732 "[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 -070013733 wdiLowLevelInd->wdiIndicationType,
13734 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13735 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13736 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13737
13738 if (NULL == pWakeReasonInd)
13739 {
13740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13741 "Memory allocation failure, "
13742 "WDI_WAKE_REASON_IND not forwarded");
13743 break;
13744 }
13745
13746 vos_mem_zero(pWakeReasonInd, allocSize);
13747
13748 /* Message Header */
13749 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13750 pWakeReasonInd->mesgLen = allocSize;
13751
13752 /* Info from WDI Indication */
13753 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13754 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13755 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13756 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13757 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13758 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13759 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13760 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13761
13762 /* VOS message wrapper */
13763 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13764 vosMsg.bodyptr = (void *) pWakeReasonInd;
13765 vosMsg.bodyval = 0;
13766
13767 /* Send message to SME */
13768 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13769 {
13770 /* free the mem and return */
13771 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13772 }
13773
13774 break;
13775 }
13776#endif // WLAN_WAKEUP_EVENTS
13777
13778 case WDI_TX_PER_HIT_IND:
13779 {
13780 vos_msg_t vosMsg;
13781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13782 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13783 /* VOS message wrapper */
13784 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13785 vosMsg.bodyptr = NULL;
13786 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013787 /* Send message to SME */
13788 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13789 {
13790 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13791 }
13792 break;
13793 }
13794
Leo Chang9056f462013-08-01 19:21:11 -070013795#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013796 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013797 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013798 vos_msg_t vosMsg;
13799 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013800
Leo Changd9df8aa2013-09-26 13:32:26 -070013801 lphbInd =
13802 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13803 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013804 {
13805 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13806 "%s: LPHB IND buffer alloc Fail", __func__);
13807 return ;
13808 }
13809
Leo Changd9df8aa2013-09-26 13:32:26 -070013810 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013811 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013812 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013813 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013814 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013815 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13816
13817 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013818 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013819 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13820
Leo Changd9df8aa2013-09-26 13:32:26 -070013821 vosMsg.type = eWNI_SME_LPHB_IND;
13822 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013823 vosMsg.bodyval = 0;
13824 /* Send message to SME */
13825 if (VOS_STATUS_SUCCESS !=
13826 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13827 {
13828 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13829 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013830 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013831 }
13832 break;
13833 }
13834#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013835 case WDI_PERIODIC_TX_PTRN_FW_IND:
13836 {
13837 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13838 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13839 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13840 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13841 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13842 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13843 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13844
13845 break;
13846 }
Leo Chang9056f462013-08-01 19:21:11 -070013847
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013848 case WDI_IBSS_PEER_INACTIVITY_IND:
13849 {
13850 tSirIbssPeerInactivityInd *pIbssInd =
13851 (tSirIbssPeerInactivityInd *)
13852 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13853
13854 if (NULL == pIbssInd)
13855 {
13856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13857 "Memory allocation failure, "
13858 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13859 break;
13860 }
13861
13862 pIbssInd->bssIdx =
13863 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13864 pIbssInd->staIdx =
13865 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13866 vos_mem_copy(pIbssInd->peerAddr,
13867 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13868 sizeof(tSirMacAddr));
13869 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13870 break;
13871 }
13872
Rajeev79dbe4c2013-10-05 11:03:42 +053013873#ifdef FEATURE_WLAN_BATCH_SCAN
13874 case WDI_BATCH_SCAN_RESULT_IND:
13875 {
13876 void *pBatchScanResult;
13877 void *pCallbackContext;
13878 tpAniSirGlobal pMac;
13879
13880 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13881 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13882
13883 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053013884 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053013885 {
13886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13887 "%s:pWDA is NULL", __func__);
13888 VOS_ASSERT(0);
13889 return;
13890 }
13891
13892 pBatchScanResult =
13893 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13894 if (NULL == pBatchScanResult)
13895 {
13896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13897 "%s:Batch scan result from FW is null can't invoke HDD callback",
13898 __func__);
13899 VOS_ASSERT(0);
13900 return;
13901 }
13902
13903 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13904 if (NULL == pMac)
13905 {
13906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13907 "%s:pMac is NULL", __func__);
13908 VOS_ASSERT(0);
13909 return;
13910 }
13911
13912 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13913 /*call hdd callback with set batch scan response data*/
13914 if(pMac->pmc.batchScanResultCallback)
13915 {
13916 pMac->pmc.batchScanResultCallback(pCallbackContext,
13917 pBatchScanResult);
13918 }
13919 else
13920 {
13921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13922 "%s:HDD callback is null", __func__);
13923 VOS_ASSERT(0);
13924 }
13925 break;
13926 }
13927#endif
13928
Leo Chang0b0e45a2013-12-15 15:18:55 -080013929#ifdef FEATURE_WLAN_CH_AVOID
13930 case WDI_CH_AVOID_IND:
13931 {
13932 vos_msg_t vosMsg;
13933 tSirChAvoidIndType *chAvoidInd;
13934
13935 chAvoidInd =
13936 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13937 if (NULL == chAvoidInd)
13938 {
13939 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13940 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13941 return ;
13942 }
13943
13944 chAvoidInd->avoidRangeCount =
13945 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13946 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13947 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13948 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13949
13950 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13951 "%s : WDA CH avoid notification", __func__);
13952
13953 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13954 vosMsg.bodyptr = chAvoidInd;
13955 vosMsg.bodyval = 0;
13956 /* Send message to SME */
13957 if (VOS_STATUS_SUCCESS !=
13958 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13959 {
13960 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13961 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13962 vos_mem_free(chAvoidInd);
13963 }
13964 break;
13965 }
13966#endif /* FEATURE_WLAN_CH_AVOID */
13967
Sunil Duttbd736ed2014-05-26 21:19:41 +053013968#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13969 case WDI_LL_STATS_RESULTS_IND:
13970 {
13971 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053013972 tpAniSirGlobal pMac;
13973
13974 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13975 "Received WDI_LL_STATS_RESULTS_IND from FW");
13976
13977 /*sanity check*/
13978 if (NULL == pWDA)
13979 {
13980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13981 "%s:pWDA is NULL", __func__);
13982 VOS_ASSERT(0);
13983 return;
13984 }
13985
13986 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053013987 (void *)wdiLowLevelInd->
13988 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053013989 if (NULL == pLinkLayerStatsInd)
13990 {
13991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13992 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
13993 __func__);
13994 VOS_ASSERT(0);
13995 return;
13996 }
13997
13998 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13999 if (NULL == pMac)
14000 {
14001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14002 "%s:pMac is NULL", __func__);
14003 VOS_ASSERT(0);
14004 return;
14005 }
14006
Dino Mycled3d50022014-07-07 12:58:25 +053014007 /* call hdd callback with Link Layer Statistics.
14008 * vdev_id/ifacId in link_stats_results will be
14009 * used to retrieve the correct HDD context
14010 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014011 if (pMac->sme.pLinkLayerStatsIndCallback)
14012 {
Dino Mycled3d50022014-07-07 12:58:25 +053014013 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014014 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014015 pLinkLayerStatsInd,
14016 wdiLowLevelInd->
14017 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014018 }
14019 else
14020 {
14021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14022 "%s:HDD callback is null", __func__);
14023 }
14024 break;
14025 }
14026#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14027
Dino Mycle41bdc942014-06-10 11:30:24 +053014028#ifdef WLAN_FEATURE_EXTSCAN
14029 case WDI_EXTSCAN_PROGRESS_IND:
14030 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14031 case WDI_EXTSCAN_SCAN_RESULT_IND:
14032 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14033 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14034 {
14035 void *pEXTScanData;
14036 void *pCallbackContext;
14037 tpAniSirGlobal pMac;
14038 tANI_U16 indType;
14039
14040 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14041 "Received WDI_EXTSCAN Indications from FW");
14042 /*sanity check*/
14043 if (NULL == pWDA)
14044 {
14045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14046 "%s:pWDA is NULL", __func__);
14047 VOS_ASSERT(0);
14048 return;
14049 }
14050 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14051 {
14052 indType = WDA_EXTSCAN_PROGRESS_IND;
14053
14054 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14055 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14056 }
14057 if (wdiLowLevelInd->wdiIndicationType ==
14058 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14059 {
14060 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14061
14062 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14063 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14064 }
14065 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14066 {
14067 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14068
14069 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14070 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14071 }
14072 if (wdiLowLevelInd->wdiIndicationType ==
14073 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14074 {
14075 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14076
14077 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14078 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14079 }
14080 if (wdiLowLevelInd->wdiIndicationType ==
14081 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14082 {
14083 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14084
14085 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14086 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14087 }
14088
14089 pEXTScanData =
14090 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14091 if (NULL == pEXTScanData)
14092 {
14093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14094 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14095 __func__);
14096 VOS_ASSERT(0);
14097 return;
14098 }
14099
14100 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14101 if (NULL == pMac)
14102 {
14103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14104 "%s:pMac is NULL", __func__);
14105 VOS_ASSERT(0);
14106 return;
14107 }
14108
14109 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14110
14111 if(pMac->sme.pEXTScanIndCb)
14112 {
14113 pMac->sme.pEXTScanIndCb(pCallbackContext,
14114 indType,
14115 pEXTScanData);
14116 }
14117 else
14118 {
14119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14120 "%s:HDD callback is null", __func__);
14121 }
14122 break;
14123 }
14124#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014125 case WDI_DEL_BA_IND:
14126 {
14127 tpBADeleteParams pDelBAInd =
14128 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14129
14130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14131 "Received WDI_DEL_BA_IND from WDI ");
14132 if(NULL == pDelBAInd)
14133 {
14134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14135 "%s: VOS MEM Alloc Failure", __func__);
14136 break;
14137 }
14138 vos_mem_copy(pDelBAInd->peerMacAddr,
14139 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14140 sizeof(tSirMacAddr));
14141 vos_mem_copy(pDelBAInd->bssId,
14142 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14143 sizeof(tSirMacAddr));
14144 pDelBAInd->staIdx =
14145 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14146 pDelBAInd->baTID =
14147 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14148 pDelBAInd->baDirection =
14149 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14150 pDelBAInd->reasonCode =
14151 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14152
14153 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14154 (void *)pDelBAInd , 0) ;
14155 break;
14156 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014157
Jeff Johnson295189b2012-06-20 16:38:30 -070014158 default:
14159 {
14160 /* TODO error */
14161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14162 "Received UNKNOWN Indication from WDI ");
14163 }
14164 }
14165 return ;
14166}
14167
Jeff Johnson295189b2012-06-20 16:38:30 -070014168/*
14169 * BA related processing in WDA.
14170 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014171void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14172 void* pUserData)
14173{
14174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14175 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014176 if(NULL == pWdaParams)
14177 {
14178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014179 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014180 VOS_ASSERT(0) ;
14181 return ;
14182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014183 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014184 vos_mem_free(pWdaParams->wdaMsgParam) ;
14185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14186 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014188 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014189 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14190 {
14191 tANI_U8 i = 0 ;
14192 tBaActivityInd *baActivityInd = NULL ;
14193 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14194 tANI_U8 allocSize = sizeof(tBaActivityInd)
14195 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14196 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14197 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014198 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014199 if(NULL == baActivityInd)
14200 {
14201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014203 VOS_ASSERT(0) ;
14204 return;
14205 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014206 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14207 sizeof(tSirMacAddr)) ;
14208 baActivityInd->baCandidateCnt = baCandidateCount ;
14209
14210 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14211 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14212
14213 for(i = 0 ; i < baCandidateCount ; i++)
14214 {
14215 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014216 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14217 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014218 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14219 {
14220 baCandidate->baInfo[tid].fBaEnable =
14221 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14222 baCandidate->baInfo[tid].startingSeqNum =
14223 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14224 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014225 wdiBaCandidate++ ;
14226 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014228 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14229 }
14230 else
14231 {
14232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14233 "BA Trigger RSP with Failure received ");
14234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014235 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014236}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014237
14238
14239/*
14240 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14241 * during MCC
14242 */
14243void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14244{
14245 wpt_uint32 enabled;
14246 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14247 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14248 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14249
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014250 if (NULL == pMac )
14251 {
14252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14253 "%s: Invoked with invalid MAC context ", __func__ );
14254 VOS_ASSERT(0);
14255 return;
14256 }
14257
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014258 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14259 != eSIR_SUCCESS)
14260 {
14261 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14262 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14263 return;
14264 }
14265
14266 if(!enabled)
14267 {
14268 return;
14269 }
14270
14271 if(NULL == pWDA)
14272 {
14273 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14274 "%s:WDA context is NULL", __func__);
14275 VOS_ASSERT(0);
14276 return;
14277 }
14278
14279 if(activate)
14280 {
14281 if( VOS_STATUS_SUCCESS !=
14282 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14283 {
14284 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14285 "Traffic Stats Timer Start Failed ");
14286 return;
14287 }
14288 WDI_DS_ActivateTrafficStats();
14289 }
14290 else
14291 {
14292 WDI_DS_DeactivateTrafficStats();
14293 WDI_DS_ClearTrafficStats();
14294
14295 if( VOS_STATUS_SUCCESS !=
14296 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14297 {
14298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14299 "Traffic Stats Timer Stop Failed ");
14300 return;
14301 }
14302 }
14303}
14304
14305/*
14306 * Traffic Stats Timer handler
14307 */
14308void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14309{
14310 WDI_Status wdiStatus;
14311 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14312 WDI_TrafficStatsIndType trafficStatsIndParams;
14313 wpt_uint32 length, enabled;
14314 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14315
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014316 if (NULL == pMac )
14317 {
14318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14319 "%s: Invoked with invalid MAC context ", __func__ );
14320 VOS_ASSERT(0);
14321 return;
14322 }
14323
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014324 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14325 != eSIR_SUCCESS)
14326 {
14327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14328 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14329 return;
14330 }
14331
14332 if(!enabled)
14333 {
14334 WDI_DS_DeactivateTrafficStats();
14335 return;
14336 }
14337
14338 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14339
14340 if(pWdiTrafficStats != NULL)
14341 {
14342 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14343 trafficStatsIndParams.length = length;
14344 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014345 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014346 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14347 trafficStatsIndParams.pUserData = pWDA;
14348
14349 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14350
14351 if(WDI_STATUS_PENDING == wdiStatus)
14352 {
14353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14354 "Pending received for %s:%d ",__func__,__LINE__ );
14355 }
14356 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14357 {
14358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14359 "Failure in %s:%d ",__func__,__LINE__ );
14360 }
14361
14362 WDI_DS_ClearTrafficStats();
14363 }
14364 else
14365 {
14366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14367 "pWdiTrafficStats is Null");
14368 }
14369
14370 if( VOS_STATUS_SUCCESS !=
14371 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14372 {
14373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14374 "Traffic Stats Timer Start Failed ");
14375 return;
14376 }
14377}
14378
Jeff Johnson295189b2012-06-20 16:38:30 -070014379/*
14380 * BA Activity check timer handler
14381 */
14382void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14383{
14384 tANI_U8 curSta = 0 ;
14385 tANI_U8 tid = 0 ;
14386 tANI_U8 size = 0 ;
14387 tANI_U8 baCandidateCount = 0 ;
14388 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014389 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014390 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014391 tpAniSirGlobal pMac;
14392
Jeff Johnson295189b2012-06-20 16:38:30 -070014393 if(NULL == pWDA)
14394 {
14395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014396 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014397 VOS_ASSERT(0);
14398 return ;
14399 }
14400 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14401 {
14402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14403 "Inconsistent STA entries in WDA");
14404 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014405 }
14406 if(NULL == pWDA->pVosContext)
14407 {
14408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14409 "%s: pVosContext is NULL",__func__);
14410 VOS_ASSERT(0);
14411 return ;
14412 }
14413 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014414 if(NULL == pMac)
14415 {
14416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14417 "%s: pMac is NULL",__func__);
14418 VOS_ASSERT(0);
14419 return ;
14420 }
14421
Abhishek Singh0644e482014-10-06 18:38:23 +053014422 if (wlan_cfgGetInt(pMac,
14423 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14424 eSIR_SUCCESS)
14425 {
14426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14427 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14428 val = 0;
14429 }
14430
Jeff Johnson295189b2012-06-20 16:38:30 -070014431 /* walk through all STA entries and find out TX packet count */
14432 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14433 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014434 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014435#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014436 // We can only do BA on "hard" STAs.
14437 if (!(IS_HWSTA_IDX(curSta)))
14438 {
14439 continue;
14440 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014441#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014442 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14443 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014444 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014445 tANI_U32 txPktCount = 0 ;
14446 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014447 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014448 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14449 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014450 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14451 curSta, tid, &txPktCount)))
14452 {
14453#if 0
14454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14455 "************* %d:%d, %d ",curSta, txPktCount,
14456 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14457#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014458 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14459 (currentOperChan <= SIR_11B_CHANNEL_END)))
14460 {
14461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14462 "%s: BTC disabled aggregation - dont start "
14463 "TX ADDBA req",__func__);
14464 }
14465 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014466 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070014467 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14468 curSta, tid)))
14469 {
14470 /* get prepare for sending message to HAL */
14471 //baCandidate[baCandidateCount].staIdx = curSta ;
14472 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14473 newBaCandidate = WDA_ENABLE_BA ;
14474 }
14475 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14476 }
14477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014478 /* fill the entry for all the sta with given TID's */
14479 if(WDA_ENABLE_BA == newBaCandidate)
14480 {
14481 /* move to next BA candidate */
14482 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14483 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14484 baCandidateCount++ ;
14485 newBaCandidate = WDA_DISABLE_BA ;
14486 }
14487 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014488 /* prepare and send message to hal */
14489 if( 0 < baCandidateCount)
14490 {
14491 WDI_Status status = WDI_STATUS_SUCCESS ;
14492 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14493 tWDA_ReqParams *pWdaParams =
14494 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014495 if(NULL == pWdaParams)
14496 {
14497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014499 VOS_ASSERT(0) ;
14500 return;
14501 }
14502 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14503 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14504 if(NULL == wdiTriggerBaReq)
14505 {
14506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014508 VOS_ASSERT(0) ;
14509 vos_mem_free(pWdaParams);
14510 return;
14511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014512 do
14513 {
14514 WDI_TriggerBAReqinfoType *triggerBaInfo =
14515 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14516 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14517 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14518 * for each request */
14519 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14520 triggerBaInfo->ucBASessionID = 0;
14521 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14522 } while(0) ;
14523 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014525 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014526 pWdaParams->pWdaContext = pWDA;
14527 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14528 pWdaParams->wdaMsgParam = NULL;
14529 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14530 WDA_TriggerBaReqCallback, pWdaParams) ;
14531 if(IS_WDI_STATUS_FAILURE(status))
14532 {
14533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14534 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14535 vos_mem_free(pWdaParams->wdaMsgParam) ;
14536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14537 vos_mem_free(pWdaParams) ;
14538 }
14539 }
14540 else
14541 {
14542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14543 "There is no TID for initiating BA");
14544 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014545 if( VOS_STATUS_SUCCESS !=
14546 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14547 {
14548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14549 "BA Activity Timer Stop Failed ");
14550 return ;
14551 }
14552 if( VOS_STATUS_SUCCESS !=
14553 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14554 {
14555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14556 "BA Activity Timer Start Failed ");
14557 return;
14558 }
14559 return ;
14560}
Jeff Johnson295189b2012-06-20 16:38:30 -070014561/*
14562 * WDA common routine to create timer used by WDA.
14563 */
14564static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14565{
Jeff Johnson295189b2012-06-20 16:38:30 -070014566 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14567 tANI_U32 val = 0 ;
14568 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14569
14570 if(NULL == pMac)
14571 {
14572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014573 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014574 VOS_ASSERT(0);
14575 return VOS_STATUS_E_FAILURE;
14576 }
14577 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14578 != eSIR_SUCCESS)
14579 {
14580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14581 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14582 return VOS_STATUS_E_FAILURE;
14583 }
14584 val = SYS_MS_TO_TICKS(val) ;
14585
14586 /* BA activity check timer */
14587 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14588 "BA Activity Check timer", WDA_TimerHandler,
14589 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14590 if(status != TX_SUCCESS)
14591 {
14592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14593 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014594 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014595 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014596 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014597 /* Tx Complete Timeout timer */
14598 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14599 "Tx Complete Check timer", WDA_TimerHandler,
14600 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014601 if(status != TX_SUCCESS)
14602 {
14603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14604 "Unable to create Tx Complete Timeout timer");
14605 /* Destroy timer of BA activity check timer */
14606 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14607 if(status != TX_SUCCESS)
14608 {
14609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14610 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014611 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014612 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014613 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014614 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014615
14616 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14617
14618 /* Traffic Stats timer */
14619 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14620 "Traffic Stats timer", WDA_TimerHandler,
14621 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14622 if(status != TX_SUCCESS)
14623 {
14624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14625 "Unable to create traffic stats timer");
14626 /* Destroy timer of BA activity check timer */
14627 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14628 if(status != TX_SUCCESS)
14629 {
14630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14631 "Unable to Destroy BA activity timer");
14632 }
14633 /* Destroy timer of tx complete timer */
14634 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14635 if(status != TX_SUCCESS)
14636 {
14637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14638 "Unable to Tx complete timer");
14639 }
14640 return VOS_STATUS_E_FAILURE ;
14641 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014642 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014643}
Jeff Johnson295189b2012-06-20 16:38:30 -070014644/*
14645 * WDA common routine to destroy timer used by WDA.
14646 */
14647static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
14648{
14649 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014650 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14651 if(status != TX_SUCCESS)
14652 {
14653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14654 "Unable to Destroy Tx Complete Timeout timer");
14655 return eSIR_FAILURE ;
14656 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014657 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14658 if(status != TX_SUCCESS)
14659 {
14660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14661 "Unable to Destroy BA activity timer");
14662 return eSIR_FAILURE ;
14663 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014664 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
14665 if(status != TX_SUCCESS)
14666 {
14667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14668 "Unable to Destroy traffic stats timer");
14669 return eSIR_FAILURE ;
14670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014671 return eSIR_SUCCESS ;
14672}
Jeff Johnson295189b2012-06-20 16:38:30 -070014673/*
14674 * WDA timer handler.
14675 */
14676void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
14677{
14678 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
14679 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014680 /*
14681 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
14682 */
14683 wdaMsg.type = timerInfo ;
14684 wdaMsg.bodyptr = NULL;
14685 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014686 /* post the message.. */
14687 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
14688 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
14689 {
14690 vosStatus = VOS_STATUS_E_BADMSG;
14691 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014692}
Jeff Johnson295189b2012-06-20 16:38:30 -070014693/*
14694 * WDA Tx Complete timeout Indication.
14695 */
14696void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
14697{
14698 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014699 if( pWDA->pAckTxCbFunc )
14700 {
14701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014702 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014703 pWDA->pAckTxCbFunc( pMac, 0);
14704 pWDA->pAckTxCbFunc = NULL;
14705 }
14706 else
14707 {
14708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014709 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014710 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014711}
Jeff Johnson295189b2012-06-20 16:38:30 -070014712/*
14713 * WDA Set REG Domain to VOS NV
14714 */
Abhishek Singha306a442013-11-07 18:39:01 +053014715eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
14716 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070014717{
Abhishek Singha306a442013-11-07 18:39:01 +053014718 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070014719 {
14720 return eHAL_STATUS_INVALID_PARAMETER;
14721 }
14722 return eHAL_STATUS_SUCCESS;
14723}
Jeff Johnson295189b2012-06-20 16:38:30 -070014724
Jeff Johnson295189b2012-06-20 16:38:30 -070014725#ifdef FEATURE_WLAN_SCAN_PNO
14726/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014727 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014728 *
14729 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014730void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014731{
14732 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014733 tSirPNOScanReq *pPNOScanReqParams;
14734
Jeff Johnson295189b2012-06-20 16:38:30 -070014735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014736 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014737 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014738 {
14739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014740 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014741 VOS_ASSERT(0) ;
14742 return ;
14743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014744
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014745 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14746 if(pPNOScanReqParams->statusCallback)
14747 {
14748 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14749 (status == WDI_STATUS_SUCCESS) ?
14750 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14751 }
14752
Yue Ma7f44bbe2013-04-12 11:47:39 -070014753 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14754 vos_mem_free(pWdaParams->wdaMsgParam);
14755 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014756
14757 return ;
14758}
Jeff Johnson295189b2012-06-20 16:38:30 -070014759/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014760 * FUNCTION: WDA_PNOScanReqCallback
14761 * Free memory.
14762 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14763 */
14764void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014765{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014766 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014767 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014768
14769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14770 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14771
14772 if(NULL == pWdaParams)
14773 {
14774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14775 "%s: pWdaParams received NULL", __func__);
14776 VOS_ASSERT(0);
14777 return;
14778 }
14779
14780 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14781 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014782 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14783 if(pPNOScanReqParams->statusCallback)
14784 {
14785 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14786 VOS_STATUS_E_FAILURE);
14787 }
14788
Yue Ma7f44bbe2013-04-12 11:47:39 -070014789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14790 vos_mem_free(pWdaParams->wdaMsgParam);
14791 vos_mem_free(pWdaParams);
14792 }
14793
14794 return;
14795}
14796/*
14797 * FUNCTION: WDA_UpdateScanParamsRespCallback
14798 *
14799 */
14800void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14801{
14802 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014804 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014805 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014806 {
14807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014808 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014809 VOS_ASSERT(0) ;
14810 return ;
14811 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014812
14813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14814 vos_mem_free(pWdaParams->wdaMsgParam);
14815 vos_mem_free(pWdaParams);
14816
Jeff Johnson295189b2012-06-20 16:38:30 -070014817 return ;
14818}
Jeff Johnson295189b2012-06-20 16:38:30 -070014819/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014820 * FUNCTION: WDA_UpdateScanParamsReqCallback
14821 * Free memory.
14822 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14823 */
14824void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14825{
14826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14827
14828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14829 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14830
14831 if(NULL == pWdaParams)
14832 {
14833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14834 "%s: pWdaParams received NULL", __func__);
14835 VOS_ASSERT(0);
14836 return;
14837 }
14838
14839 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14840 {
14841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14842 vos_mem_free(pWdaParams->wdaMsgParam);
14843 vos_mem_free(pWdaParams);
14844 }
14845
14846 return;
14847}
14848/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014849 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14850 * Request to WDI to set Preferred Network List.Offload
14851 */
14852VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14853 tSirPNOScanReq *pPNOScanReqParams)
14854{
Jeff Johnson43971f52012-07-17 12:26:56 -070014855 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014856 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14857 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14858 tWDA_ReqParams *pWdaParams ;
14859 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014861 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014862 if(NULL == pwdiPNOScanReqInfo)
14863 {
14864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014866 VOS_ASSERT(0);
14867 return VOS_STATUS_E_NOMEM;
14868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014869 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14870 if(NULL == pWdaParams)
14871 {
14872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014874 VOS_ASSERT(0);
14875 vos_mem_free(pwdiPNOScanReqInfo);
14876 return VOS_STATUS_E_NOMEM;
14877 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014878 //
14879 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14880 //
14881 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14882 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014883 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14884 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14885 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014886 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14887 {
14888 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14889 &pPNOScanReqParams->aNetworks[i],
14890 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14891 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014892 /*Scan timer intervals*/
14893 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14894 &pPNOScanReqParams->scanTimers,
14895 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014896 /*Probe template for 2.4GHz band*/
14897 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14898 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14899 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014900 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14901 pPNOScanReqParams->p24GProbeTemplate,
14902 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014903 /*Probe template for 5GHz band*/
14904 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14905 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14906 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014907 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14908 pPNOScanReqParams->p5GProbeTemplate,
14909 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014910 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14911 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014912
Jeff Johnson295189b2012-06-20 16:38:30 -070014913 /* Store Params pass it to WDI */
14914 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14915 pWdaParams->pWdaContext = pWDA;
14916 /* Store param pointer as passed in by caller */
14917 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014918 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014919 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014920 if(IS_WDI_STATUS_FAILURE(status))
14921 {
14922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14923 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014924 if(pPNOScanReqParams->statusCallback)
14925 {
14926 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14927 VOS_STATUS_E_FAILURE);
14928 }
14929
Jeff Johnson295189b2012-06-20 16:38:30 -070014930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14931 vos_mem_free(pWdaParams->wdaMsgParam);
14932 pWdaParams->wdaWdiApiMsgParam = NULL;
14933 pWdaParams->wdaMsgParam = NULL;
14934 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014935 return CONVERT_WDI2VOS_STATUS(status) ;
14936}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014937
14938#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14939
14940void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14941{
14942 /*Convert the CSR Auth types to WDI Auth types */
14943 switch (csrAuthType)
14944 {
14945 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14946 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14947 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014948#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014949 case eCSR_AUTH_TYPE_CCKM_WPA:
14950 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14951 break;
14952#endif
14953 case eCSR_AUTH_TYPE_WPA:
14954 *AuthType = eWDA_AUTH_TYPE_WPA;
14955 break;
14956 case eCSR_AUTH_TYPE_WPA_PSK:
14957 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14958 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014959#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014960 case eCSR_AUTH_TYPE_CCKM_RSN:
14961 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14962 break;
14963#endif
14964 case eCSR_AUTH_TYPE_RSN:
14965 *AuthType = eWDA_AUTH_TYPE_RSN;
14966 break;
14967 case eCSR_AUTH_TYPE_RSN_PSK:
14968 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14969 break;
14970#if defined WLAN_FEATURE_VOWIFI_11R
14971 case eCSR_AUTH_TYPE_FT_RSN:
14972 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14973 break;
14974 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14975 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14976 break;
14977#endif
14978#ifdef FEATURE_WLAN_WAPI
14979 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14980 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14981 break;
14982 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14983 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14984 break;
14985#endif /* FEATURE_WLAN_WAPI */
14986 case eCSR_AUTH_TYPE_SHARED_KEY:
14987 case eCSR_AUTH_TYPE_AUTOSWITCH:
14988 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14989 break;
14990#if 0
14991 case eCSR_AUTH_TYPE_SHARED_KEY:
14992 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14993 break;
14994 case eCSR_AUTH_TYPE_AUTOSWITCH:
14995 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14996#endif
14997 default:
14998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14999 "%s: Unknown Auth Type", __func__);
15000 break;
15001 }
15002}
15003void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15004{
15005 switch (csrEncrType)
15006 {
15007 case eCSR_ENCRYPT_TYPE_NONE:
15008 *EncrType = WDI_ED_NONE;
15009 break;
15010 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15011 case eCSR_ENCRYPT_TYPE_WEP40:
15012 *EncrType = WDI_ED_WEP40;
15013 break;
15014 case eCSR_ENCRYPT_TYPE_WEP104:
15015 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15016 *EncrType = WDI_ED_WEP104;
15017 break;
15018 case eCSR_ENCRYPT_TYPE_TKIP:
15019 *EncrType = WDI_ED_TKIP;
15020 break;
15021 case eCSR_ENCRYPT_TYPE_AES:
15022 *EncrType = WDI_ED_CCMP;
15023 break;
15024#ifdef WLAN_FEATURE_11W
15025 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15026 *EncrType = WDI_ED_AES_128_CMAC;
15027 break;
15028#endif
15029#ifdef FEATURE_WLAN_WAPI
15030 case eCSR_ENCRYPT_TYPE_WPI:
15031 *EncrType = WDI_ED_WPI;
15032 break;
15033#endif
15034 case eCSR_ENCRYPT_TYPE_ANY:
15035 *EncrType = WDI_ED_ANY;
15036 break;
15037
15038 default:
15039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15040 "%s: Unknown Encryption Type", __func__);
15041 break;
15042 }
15043}
15044
15045/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015046 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015047 * Request to WDI to set Roam Offload Scan
15048 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015049VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015050 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15051{
15052 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015053 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15054 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015055 tWDA_ReqParams *pWdaParams ;
15056 v_U8_t csrAuthType;
15057 WDI_RoamNetworkType *pwdiRoamNetworkType;
15058 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15060 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015061 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015062 {
15063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15064 "%s: VOS MEM Alloc Failure", __func__);
15065 VOS_ASSERT(0);
15066 return VOS_STATUS_E_NOMEM;
15067 }
15068 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15069 if (NULL == pWdaParams)
15070 {
15071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15072 "%s: VOS MEM Alloc Failure", __func__);
15073 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015074 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015075 return VOS_STATUS_E_NOMEM;
15076 }
15077
15078 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015079 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015080 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015081 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15082 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015083 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15084 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15085 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15086 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15087 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15088 sizeof(pwdiRoamNetworkType->currAPbssid));
15089 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15090 csrAuthType);
15091 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15092 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15093 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15094 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15095 pwdiRoamOffloadScanInfo->LookupThreshold =
15096 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015097 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15098 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015099 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15100 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015101 pwdiRoamOffloadScanInfo->MAWCEnabled =
15102 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015103 pwdiRoamOffloadScanInfo->Command =
15104 pRoamOffloadScanReqParams->Command ;
15105 pwdiRoamOffloadScanInfo->StartScanReason =
15106 pRoamOffloadScanReqParams->StartScanReason ;
15107 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15108 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15109 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15110 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15111 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15112 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15113 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15114 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15115 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15116 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015117 pwdiRoamOffloadScanInfo->IsESEEnabled =
15118 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015119 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15120 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15121 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15122 pwdiRoamNetworkType->ssId.ucLength =
15123 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15124 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15125 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15126 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15127 pwdiRoamNetworkType->ChannelCount =
15128 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15129 pwdiRoamOffloadScanInfo->ChannelCacheType =
15130 pRoamOffloadScanReqParams->ChannelCacheType;
15131 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15132 pRoamOffloadScanReqParams->ValidChannelList,
15133 pRoamOffloadScanReqParams->ValidChannelCount);
15134 pwdiRoamOffloadScanInfo->ValidChannelCount =
15135 pRoamOffloadScanReqParams->ValidChannelCount;
15136 pwdiRoamOffloadScanInfo->us24GProbeSize =
15137 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15138 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15139 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15140 pRoamOffloadScanReqParams->p24GProbeTemplate,
15141 pwdiRoamOffloadScanInfo->us24GProbeSize);
15142 pwdiRoamOffloadScanInfo->us5GProbeSize =
15143 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15144 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15145 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15146 pRoamOffloadScanReqParams->p5GProbeTemplate,
15147 pwdiRoamOffloadScanInfo->us5GProbeSize);
15148 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15149 pRoamOffloadScanReqParams->MDID.mdiePresent;
15150 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15151 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015152 pwdiRoamOffloadScanInfo->nProbes =
15153 pRoamOffloadScanReqParams->nProbes;
15154 pwdiRoamOffloadScanInfo->HomeAwayTime =
15155 pRoamOffloadScanReqParams->HomeAwayTime;
15156 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015157 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015158 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015159 pWdaParams->pWdaContext = pWDA;
15160 /* Store param pointer as passed in by caller */
15161 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015162 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015163 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15164 if(IS_WDI_STATUS_FAILURE(status))
15165 {
15166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15167 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15169 vos_mem_free(pWdaParams->wdaMsgParam);
15170 pWdaParams->wdaWdiApiMsgParam = NULL;
15171 pWdaParams->wdaMsgParam = NULL;
15172 }
15173 return CONVERT_WDI2VOS_STATUS(status) ;
15174}
15175#endif
15176
Jeff Johnson295189b2012-06-20 16:38:30 -070015177/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015178 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015179 *
15180 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015181void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015182{
15183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15184
15185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015186 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015187
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015188 if(NULL == pWdaParams)
15189 {
15190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015191 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015192 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015193 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015194 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015195
Jeff Johnson295189b2012-06-20 16:38:30 -070015196 vos_mem_free(pWdaParams->wdaMsgParam) ;
15197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15198 vos_mem_free(pWdaParams) ;
15199
15200 return ;
15201}
15202/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015203 * FUNCTION: WDA_RssiFilterReqCallback
15204 * Free memory.
15205 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15206 */
15207void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15208{
15209 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15210
15211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15212 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15213
15214 if(NULL == pWdaParams)
15215 {
15216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15217 "%s: pWdaParams received NULL", __func__);
15218 VOS_ASSERT(0);
15219 return;
15220 }
15221
15222 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15223 {
15224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15225 vos_mem_free(pWdaParams->wdaMsgParam);
15226 vos_mem_free(pWdaParams);
15227 }
15228
15229 return;
15230}
15231/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015232 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15233 * Request to WDI to set Preferred Network List.Offload
15234 */
15235VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15236 tSirSetRSSIFilterReq* pRssiFilterParams)
15237{
Jeff Johnson43971f52012-07-17 12:26:56 -070015238 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015239 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15240 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15241 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015243 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015244 if(NULL == pwdiSetRssiFilterReqInfo)
15245 {
15246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015247 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015248 VOS_ASSERT(0);
15249 return VOS_STATUS_E_NOMEM;
15250 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015251 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15252 if(NULL == pWdaParams)
15253 {
15254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015256 VOS_ASSERT(0);
15257 vos_mem_free(pwdiSetRssiFilterReqInfo);
15258 return VOS_STATUS_E_NOMEM;
15259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015260 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015261 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15262 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015263
Jeff Johnson295189b2012-06-20 16:38:30 -070015264 /* Store Params pass it to WDI */
15265 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15266 pWdaParams->pWdaContext = pWDA;
15267 /* Store param pointer as passed in by caller */
15268 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015269 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015270 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015271 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015272 if(IS_WDI_STATUS_FAILURE(status))
15273 {
15274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15275 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15277 vos_mem_free(pWdaParams->wdaMsgParam);
15278 pWdaParams->wdaWdiApiMsgParam = NULL;
15279 pWdaParams->wdaMsgParam = NULL;
15280 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015281 return CONVERT_WDI2VOS_STATUS(status) ;
15282}
15283
Jeff Johnson295189b2012-06-20 16:38:30 -070015284/*
15285 * FUNCTION: WDA_ProcessUpdateScanParams
15286 * Request to WDI to update Scan Parameters
15287 */
15288VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15289 tSirUpdateScanParams *pUpdateScanParams)
15290{
Jeff Johnson43971f52012-07-17 12:26:56 -070015291 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015292 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15293 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15294 sizeof(WDI_UpdateScanParamsInfoType)) ;
15295 tWDA_ReqParams *pWdaParams ;
15296 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015298 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015299 if(NULL == wdiUpdateScanParamsInfoType)
15300 {
15301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015303 VOS_ASSERT(0);
15304 return VOS_STATUS_E_NOMEM;
15305 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015306 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15307 if ( NULL == pWdaParams )
15308 {
15309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015310 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015311 VOS_ASSERT(0);
15312 vos_mem_free(wdiUpdateScanParamsInfoType);
15313 return VOS_STATUS_E_NOMEM;
15314 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015315 //
15316 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15317 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15319 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15320 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15321 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015322 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015323 pUpdateScanParams->b11dEnabled,
15324 pUpdateScanParams->b11dResolved,
15325 pUpdateScanParams->ucChannelCount,
15326 pUpdateScanParams->usPassiveMinChTime,
15327 pUpdateScanParams->usPassiveMaxChTime,
15328 pUpdateScanParams->usActiveMinChTime,
15329 pUpdateScanParams->usActiveMaxChTime,
15330 sizeof(tSirUpdateScanParams),
15331 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15332
Jeff Johnson295189b2012-06-20 16:38:30 -070015333 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15334 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015335 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15336 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015337 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15338 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015339 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15340 pUpdateScanParams->usActiveMaxChTime;
15341 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15342 pUpdateScanParams->usActiveMinChTime;
15343 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15344 pUpdateScanParams->usPassiveMaxChTime;
15345 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15346 pUpdateScanParams->usPassiveMinChTime;
15347
Jeff Johnson295189b2012-06-20 16:38:30 -070015348 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015349 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15350 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015351
Jeff Johnson295189b2012-06-20 16:38:30 -070015352 for ( i = 0; i <
15353 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15354 i++)
15355 {
15356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15357 "Update Scan Parameters channel: %d",
15358 pUpdateScanParams->aChannels[i]);
15359
15360 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15361 pUpdateScanParams->aChannels[i];
15362 }
15363
Yue Ma7f44bbe2013-04-12 11:47:39 -070015364 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15365 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015366
Jeff Johnson295189b2012-06-20 16:38:30 -070015367 /* Store Params pass it to WDI */
15368 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15369 pWdaParams->pWdaContext = pWDA;
15370 /* Store param pointer as passed in by caller */
15371 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015372
Jeff Johnson295189b2012-06-20 16:38:30 -070015373
15374
15375 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015376 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015377 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015378 if(IS_WDI_STATUS_FAILURE(status))
15379 {
15380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15381 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15383 vos_mem_free(pWdaParams->wdaMsgParam);
15384 vos_mem_free(pWdaParams);
15385 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015386 return CONVERT_WDI2VOS_STATUS(status) ;
15387}
15388#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015389
15390#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15391/*
15392 * FUNCTION: WDA_RoamOffloadScanReqCallback
15393 *
15394 */
15395void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15396{
15397 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015398 vos_msg_t vosMsg;
15399 wpt_uint8 reason = 0;
15400
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015402 "<------ %s " ,__func__);
15403 if (NULL == pWdaParams)
15404 {
15405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15406 "%s: pWdaParams received NULL", __func__);
15407 VOS_ASSERT(0) ;
15408 return ;
15409 }
15410 if ( pWdaParams != NULL )
15411 {
15412 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15413 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015414 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15416 }
15417 if ( pWdaParams->wdaMsgParam != NULL)
15418 {
15419 vos_mem_free(pWdaParams->wdaMsgParam);
15420 }
15421
15422 vos_mem_free(pWdaParams) ;
15423 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015424 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15425 vosMsg.bodyptr = NULL;
15426 if (WDI_STATUS_SUCCESS != status)
15427 {
15428 reason = 0;
15429 }
15430 vosMsg.bodyval = reason;
15431 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15432 {
15433 /* free the mem and return */
15434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015435 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015436 }
15437
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015438 return ;
15439}
15440#endif
15441
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015442/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015443 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015444 *
15445 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015446void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015447{
15448 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15449
15450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15451 "<------ %s " ,__func__);
15452
15453 if(NULL == pWdaParams)
15454 {
15455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15456 "%s: pWdaParams received NULL", __func__);
15457 VOS_ASSERT(0);
15458 return;
15459 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015460
15461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15462 vos_mem_free(pWdaParams->wdaMsgParam);
15463 vos_mem_free(pWdaParams);
15464
15465 return;
15466}
15467/*
15468 * FUNCTION: WDA_SetPowerParamsReqCallback
15469 * Free memory.
15470 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15471 */
15472void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15473{
15474 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15475
15476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15477 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15478
15479 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015480 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15482 "%s: pWdaParams received NULL", __func__);
15483 VOS_ASSERT(0);
15484 return;
15485 }
15486
15487 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15488 {
15489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15490 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015491 vos_mem_free(pWdaParams);
15492 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015493
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015494 return;
15495}
15496
Jeff Johnson295189b2012-06-20 16:38:30 -070015497#ifdef WLAN_FEATURE_PACKET_FILTERING
15498/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015499 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015500 *
15501 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015502void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015503 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15504 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015505{
15506 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015508 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015509 if(NULL == pWdaParams)
15510 {
15511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015512 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015513 VOS_ASSERT(0) ;
15514 return ;
15515 }
15516
15517 vos_mem_free(pWdaParams->wdaMsgParam) ;
15518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15519 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015520 //print a msg, nothing else to do
15521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015522 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015523 return ;
15524}
Jeff Johnson295189b2012-06-20 16:38:30 -070015525/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015526 * FUNCTION: WDA_8023MulticastListReqCallback
15527 * Free memory.
15528 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15529 */
15530void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15531{
15532 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15533
15534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15535 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15536
15537 if(NULL == pWdaParams)
15538 {
15539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15540 "%s: pWdaParams received NULL", __func__);
15541 VOS_ASSERT(0);
15542 return;
15543 }
15544
15545 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15546 {
15547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15548 vos_mem_free(pWdaParams->wdaMsgParam);
15549 vos_mem_free(pWdaParams);
15550 }
15551
15552 return;
15553}
15554/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015555 * FUNCTION: WDA_Process8023MulticastListReq
15556 * Request to WDI to add 8023 Multicast List
15557 */
15558VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15559 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15560{
Jeff Johnson43971f52012-07-17 12:26:56 -070015561 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015562 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15563 tWDA_ReqParams *pWdaParams ;
15564 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015566 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015567 pwdiFltPktSetMcListReqParamsType =
15568 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15569 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15570 ) ;
15571 if(NULL == pwdiFltPktSetMcListReqParamsType)
15572 {
15573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015574 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015575 return VOS_STATUS_E_NOMEM;
15576 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015577 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15578 if(NULL == pWdaParams)
15579 {
15580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015581 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015582 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15583 return VOS_STATUS_E_NOMEM;
15584 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015585
Jeff Johnson295189b2012-06-20 16:38:30 -070015586 //
15587 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15588 //
15589 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015590 pRcvFltMcAddrList->ulMulticastAddrCnt;
15591
15592 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15593 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15594 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15595 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15596
Jeff Johnson295189b2012-06-20 16:38:30 -070015597 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15598 {
15599 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15600 &(pRcvFltMcAddrList->multicastAddr[i]),
15601 sizeof(tSirMacAddr));
15602 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015603 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15604 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015605
Jeff Johnson295189b2012-06-20 16:38:30 -070015606 /* Store Params pass it to WDI */
15607 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15608 pWdaParams->pWdaContext = pWDA;
15609 /* Store param pointer as passed in by caller */
15610 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015611 status = WDI_8023MulticastListReq(
15612 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015613 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015614 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015615 if(IS_WDI_STATUS_FAILURE(status))
15616 {
15617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15618 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15620 vos_mem_free(pWdaParams->wdaMsgParam);
15621 vos_mem_free(pWdaParams);
15622 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015623 return CONVERT_WDI2VOS_STATUS(status) ;
15624}
Jeff Johnson295189b2012-06-20 16:38:30 -070015625/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015626 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015627 *
15628 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015629void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015630 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15631 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015632{
15633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015635 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015636 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070015637 if(NULL == pWdaParams)
15638 {
15639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015640 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015641 VOS_ASSERT(0) ;
15642 return ;
15643 }
15644
15645 vos_mem_free(pWdaParams->wdaMsgParam) ;
15646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15647 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015648 //print a msg, nothing else to do
15649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015650 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015651 return ;
15652}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015653
15654/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015655 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
15656 * Free memory.
15657 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015658 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015659void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015660 void* pUserData)
15661{
15662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15663
15664 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15665 "<------ %s, wdiStatus: %d",
15666 __func__, wdiStatus);
15667
15668 if (NULL == pWdaParams)
15669 {
15670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15671 "%s: Invalid pWdaParams pointer", __func__);
15672 VOS_ASSERT(0);
15673 return;
15674 }
15675
15676 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15677 {
15678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15679 vos_mem_free(pWdaParams->wdaMsgParam);
15680 vos_mem_free(pWdaParams);
15681 }
15682
15683 return;
15684}
15685
Jeff Johnson295189b2012-06-20 16:38:30 -070015686/*
15687 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
15688 * Request to WDI to set Receive Filters
15689 */
15690VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
15691 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
15692{
Jeff Johnson43971f52012-07-17 12:26:56 -070015693 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015694 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
15695 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
15696 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
15697 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
15698 tWDA_ReqParams *pWdaParams ;
15699 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015701 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015702 if(NULL == pwdiSetRcvPktFilterReqParamsType)
15703 {
15704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015705 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015706 VOS_ASSERT(0);
15707 return VOS_STATUS_E_NOMEM;
15708 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015709 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15710 if(NULL == pWdaParams)
15711 {
15712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015713 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015714 VOS_ASSERT(0);
15715 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
15716 return VOS_STATUS_E_NOMEM;
15717 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015718 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
15719 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
15720 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
15721 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070015722 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15723 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15724
15725 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15726 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015727
15728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15729 "FID %d FT %d NParams %d CT %d",
15730 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15731 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15732 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15733 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015734 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15735 {
15736 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15737 &pRcvPktFilterCfg->paramsData[i],
15738 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015740 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015741 pwdiSetRcvPktFilterReqParamsType->
15742 wdiPktFilterCfg.paramsData[i].protocolLayer,
15743 pwdiSetRcvPktFilterReqParamsType->
15744 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015746 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015747 pwdiSetRcvPktFilterReqParamsType->
15748 wdiPktFilterCfg.paramsData[i].dataOffset,
15749 pwdiSetRcvPktFilterReqParamsType->
15750 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015752 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015753 pwdiSetRcvPktFilterReqParamsType->
15754 wdiPktFilterCfg.paramsData[i].compareData[0],
15755 pwdiSetRcvPktFilterReqParamsType->
15756 wdiPktFilterCfg.paramsData[i].compareData[1],
15757 pwdiSetRcvPktFilterReqParamsType->
15758 wdiPktFilterCfg.paramsData[i].compareData[2],
15759 pwdiSetRcvPktFilterReqParamsType->
15760 wdiPktFilterCfg.paramsData[i].compareData[3],
15761 pwdiSetRcvPktFilterReqParamsType->
15762 wdiPktFilterCfg.paramsData[i].compareData[4],
15763 pwdiSetRcvPktFilterReqParamsType->
15764 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015766 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015767 pwdiSetRcvPktFilterReqParamsType->
15768 wdiPktFilterCfg.paramsData[i].dataMask[0],
15769 pwdiSetRcvPktFilterReqParamsType->
15770 wdiPktFilterCfg.paramsData[i].dataMask[1],
15771 pwdiSetRcvPktFilterReqParamsType->
15772 wdiPktFilterCfg.paramsData[i].dataMask[2],
15773 pwdiSetRcvPktFilterReqParamsType->
15774 wdiPktFilterCfg.paramsData[i].dataMask[3],
15775 pwdiSetRcvPktFilterReqParamsType->
15776 wdiPktFilterCfg.paramsData[i].dataMask[4],
15777 pwdiSetRcvPktFilterReqParamsType->
15778 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015779 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015780 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015781 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015782 /* Store Params pass it to WDI */
15783 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15784 pWdaParams->pWdaContext = pWDA;
15785 /* Store param pointer as passed in by caller */
15786 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015787 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015788 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015789 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015790 if(IS_WDI_STATUS_FAILURE(status))
15791 {
15792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15793 "Failure in SetFilter(),free all the memory,status %d ",status);
15794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15795 vos_mem_free(pWdaParams->wdaMsgParam);
15796 vos_mem_free(pWdaParams);
15797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015798 return CONVERT_WDI2VOS_STATUS(status) ;
15799}
Jeff Johnson295189b2012-06-20 16:38:30 -070015800/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015801 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015802 *
15803 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015804void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015805 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15806 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015807{
15808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15809 tWDA_CbContext *pWDA;
15810 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15811 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15812 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15813 tANI_U8 i;
15814 vos_msg_t vosMsg;
15815
15816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015817 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015818 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15819
Jeff Johnsone7245742012-09-05 17:12:55 -070015820 if(NULL == pRcvFltPktMatchCntRsp)
15821 {
15822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015823 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015824 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015825 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015826 return ;
15827 }
15828
Jeff Johnson295189b2012-06-20 16:38:30 -070015829 if(NULL == pWdaParams)
15830 {
15831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015832 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015833 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015834 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015835 return ;
15836 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015837 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15838 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015839 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15840 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15841
15842 /* Message Header */
15843 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15844 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15845
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015846 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015847
15848 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15849 {
15850 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15851 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015853 /* VOS message wrapper */
15854 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15855 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15856 vosMsg.bodyval = 0;
15857 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15858 {
15859 /* free the mem and return */
15860 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15861 }
15862
15863 vos_mem_free(pWdaParams->wdaMsgParam) ;
15864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15865 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015866
15867 return;
15868}
15869/*
15870 * FUNCTION: WDA_FilterMatchCountReqCallback
15871 * Free memory and send RSP back to SME.
15872 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15873 */
15874void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15875{
15876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15877 vos_msg_t vosMsg;
15878
15879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15880 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15881
15882 if(NULL == pWdaParams)
15883 {
15884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15885 "%s: pWdaParams received NULL", __func__);
15886 VOS_ASSERT(0);
15887 return;
15888 }
15889
15890 /* VOS message wrapper */
15891 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15892 vosMsg.bodyptr = NULL;
15893 vosMsg.bodyval = 0;
15894
15895 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15896 {
15897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15898 vos_mem_free(pWdaParams->wdaMsgParam);
15899 vos_mem_free(pWdaParams);
15900 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15901 }
15902
15903 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015904}
Jeff Johnson295189b2012-06-20 16:38:30 -070015905/*
15906 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15907 * Request to WDI to get PC Filter Match Count
15908 */
15909VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15910{
Jeff Johnson43971f52012-07-17 12:26:56 -070015911 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015912 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15913 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15914 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015916 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015917 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15918 {
15919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015921 VOS_ASSERT(0);
15922 return VOS_STATUS_E_NOMEM;
15923 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015924 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15925 if(NULL == pWdaParams)
15926 {
15927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015929 VOS_ASSERT(0);
15930 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15931 return VOS_STATUS_E_NOMEM;
15932 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015933
Yue Ma7f44bbe2013-04-12 11:47:39 -070015934 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15935 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015936
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015937 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15938 pRcvFltPktMatchRsp->bssId,
15939 sizeof(wpt_macAddr));
15940
Jeff Johnson295189b2012-06-20 16:38:30 -070015941 /* Store Params pass it to WDI */
15942 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15943 pWdaParams->pWdaContext = pWDA;
15944 /* Store param pointer as passed in by caller */
15945 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015946 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015947 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015948 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015949 if(IS_WDI_STATUS_FAILURE(status))
15950 {
15951 /* failure returned by WDI API */
15952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15953 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15955 vos_mem_free(pWdaParams) ;
15956 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15957 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15958 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015959 return CONVERT_WDI2VOS_STATUS(status) ;
15960}
Jeff Johnson295189b2012-06-20 16:38:30 -070015961/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015962 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015963 *
15964 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015965void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015966 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15967 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015968{
15969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015971 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015972/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15973 if(NULL == pWdaParams)
15974 {
15975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015976 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015977 VOS_ASSERT(0) ;
15978 return ;
15979 }
15980
15981 vos_mem_free(pWdaParams->wdaMsgParam) ;
15982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15983 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015984 //print a msg, nothing else to do
15985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015986 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015987 return ;
15988}
Jeff Johnson295189b2012-06-20 16:38:30 -070015989/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015990 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15991 * Free memory.
15992 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15993 */
15994void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15995{
15996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15997
15998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15999 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16000
16001 if(NULL == pWdaParams)
16002 {
16003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16004 "%s: Invalid pWdaParams pointer", __func__);
16005 VOS_ASSERT(0);
16006 return;
16007 }
16008
16009 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16010 {
16011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16012 vos_mem_free(pWdaParams->wdaMsgParam);
16013 vos_mem_free(pWdaParams);
16014 }
16015
16016 return;
16017}
16018/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016019 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16020 * Request to WDI to clear Receive Filters
16021 */
16022VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16023 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16024{
Jeff Johnson43971f52012-07-17 12:26:56 -070016025 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016026 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16027 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16028 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016030 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016031 if(NULL == pwdiRcvFltPktClearReqParamsType)
16032 {
16033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016035 VOS_ASSERT(0);
16036 return VOS_STATUS_E_NOMEM;
16037 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016038 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16039 if(NULL == pWdaParams)
16040 {
16041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016043 VOS_ASSERT(0);
16044 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16045 return VOS_STATUS_E_NOMEM;
16046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016047 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16048 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016049 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16050 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16051 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16052 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016053
Yue Ma7f44bbe2013-04-12 11:47:39 -070016054 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016055 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016056 /* Store Params pass it to WDI */
16057 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16058 pWdaParams->pWdaContext = pWDA;
16059 /* Store param pointer as passed in by caller */
16060 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016061 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016062 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016063 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016064 if(IS_WDI_STATUS_FAILURE(status))
16065 {
16066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16067 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016069 vos_mem_free(pWdaParams->wdaMsgParam);
16070 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016071 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016072 return CONVERT_WDI2VOS_STATUS(status) ;
16073}
16074#endif // WLAN_FEATURE_PACKET_FILTERING
16075
Jeff Johnson295189b2012-06-20 16:38:30 -070016076/*
16077 * FUNCTION: WDA_ProcessSetPowerParamsReq
16078 * Request to WDI to set power params
16079 */
16080VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16081 tSirSetPowerParamsReq *pPowerParams)
16082{
Jeff Johnson43971f52012-07-17 12:26:56 -070016083 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016084 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16085 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016086 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016088 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016089 if(NULL == pwdiSetPowerParamsReqInfo)
16090 {
16091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016093 VOS_ASSERT(0);
16094 return VOS_STATUS_E_NOMEM;
16095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16097 if(NULL == pWdaParams)
16098 {
16099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016101 VOS_ASSERT(0);
16102 vos_mem_free(pwdiSetPowerParamsReqInfo);
16103 return VOS_STATUS_E_NOMEM;
16104 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016105
Jeff Johnson295189b2012-06-20 16:38:30 -070016106
16107 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16108 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016109 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16110 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016111 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16112 pPowerParams->uListenInterval;
16113 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16114 pPowerParams->uBcastMcastFilter;
16115 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16116 pPowerParams->uEnableBET;
16117 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16118 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016119 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16120 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016121 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16122 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016123
Jeff Johnson295189b2012-06-20 16:38:30 -070016124 /* Store Params pass it to WDI */
16125 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16126 pWdaParams->pWdaContext = pWDA;
16127 /* Store param pointer as passed in by caller */
16128 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016129 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016130 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016131 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016132 if(IS_WDI_STATUS_FAILURE(status))
16133 {
16134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16135 "Failure in Set power params REQ WDI API, free all the memory " );
16136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16137 vos_mem_free(pWdaParams->wdaMsgParam);
16138 pWdaParams->wdaWdiApiMsgParam = NULL;
16139 pWdaParams->wdaMsgParam = NULL;
16140 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016141 return CONVERT_WDI2VOS_STATUS(status) ;
16142}
16143
16144/*
16145 * FUNCTION: WDA_SetTmLevelRspCallback
16146 * Set TM Level response
16147 */
16148void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16149{
16150 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16151
16152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016153 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016154
16155 if(NULL == pWdaParams)
16156 {
16157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016158 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016159 VOS_ASSERT(0) ;
16160 return ;
16161 }
16162
16163 /* Dose not need to send notification to upper layer
16164 * Just free allocated resources */
16165 if( pWdaParams != NULL )
16166 {
16167 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16168 {
16169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16170 }
16171 vos_mem_free(pWdaParams->wdaMsgParam) ;
16172 vos_mem_free(pWdaParams) ;
16173 }
16174}
16175
16176/*
16177 * FUNCTION: WDA_ProcessSetTmLevelReq
16178 * Set TM Level request
16179 */
16180VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16181 tAniSetTmLevelReq *setTmLevelReq)
16182{
16183 WDI_Status status = WDI_STATUS_SUCCESS ;
16184 tWDA_ReqParams *pWdaParams ;
16185 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16186 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16187 sizeof(WDI_SetTmLevelReqType)) ;
16188 if(NULL == wdiSetTmLevelReq)
16189 {
16190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016192 VOS_ASSERT(0);
16193 return VOS_STATUS_E_NOMEM;
16194 }
16195
16196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16197 if(NULL == pWdaParams)
16198 {
16199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016201 VOS_ASSERT(0);
16202 vos_mem_free(wdiSetTmLevelReq);
16203 return VOS_STATUS_E_NOMEM;
16204 }
16205
16206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016207 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016208
16209 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16210 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16211
16212 pWdaParams->pWdaContext = pWDA;
16213 pWdaParams->wdaMsgParam = setTmLevelReq;
16214 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16215
16216 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16217 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16218
16219 if(IS_WDI_STATUS_FAILURE(status))
16220 {
16221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016222 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016223 vos_mem_free(pWdaParams->wdaMsgParam) ;
16224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16225 vos_mem_free(pWdaParams) ;
16226 }
16227
16228 return CONVERT_WDI2VOS_STATUS(status) ;
16229}
16230
16231VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16232 tpTxControlParams pTxCtrlParam)
16233{
16234 VOS_STATUS wdaStatus;
16235
16236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016237 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016238 if( pTxCtrlParam == NULL )
16239 {
16240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016241 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016242 return VOS_STATUS_E_FAILURE;
16243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016244 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16245 {
16246 wdaStatus = WDA_SuspendDataTx(pWDA);
16247 }
16248 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16249 {
16250 wdaStatus = WDA_ResumeDataTx(pWDA);
16251 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016252 return wdaStatus;
16253}
16254
16255 /* FUNCTION WDA_featureCapsExchange
16256 * WDA API to invoke capability exchange between host and FW.
16257 */
16258void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16259{
16260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016261 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016262 WDI_featureCapsExchangeReq( NULL, pVosContext);
16263}
16264
Yathish9f22e662012-12-10 14:21:35 -080016265/* FUNCTION WDA_disableCapablityFeature
16266 * WDA API to diable Active mode offload in host.
16267 */
16268void WDA_disableCapablityFeature(tANI_U8 feature_index)
16269{
16270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16271 "%s:enter", __func__ );
16272 WDI_disableCapablityFeature(feature_index);
16273}
16274
Jeff Johnson295189b2012-06-20 16:38:30 -070016275 /* FUNCTION WDA_getHostWlanFeatCaps
16276 * Wrapper for WDI API, that will return if the feature (enum value).passed
16277 * to this API is supported or not in Host
16278 * return value
16279 * 0 - implies feature is NOT Supported
16280 * any non zero value - implies feature is SUPPORTED
16281 */
16282tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16283{
16284 return WDI_getHostWlanFeatCaps(featEnumValue);
16285}
16286
16287 /* FUNCTION WDA_getFwWlanFeatCaps
16288 * Wrapper for WDI API, that will return if the feature (enum value).passed
16289 * to this API is supported or not in FW
16290 * return value
16291 * 0 - implies feature is NOT Supported
16292 * any non zero value - implies feature is SUPPORTED
16293 */
16294tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16295{
16296 return WDI_getFwWlanFeatCaps(featEnumValue);
16297}
16298
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016299
Jeff Johnson295189b2012-06-20 16:38:30 -070016300/*
16301 * FUNCTION: WDA_shutdown
16302 * Shutdown WDA/WDI without handshaking with Riva.
16303 * Synchronous function.
16304 */
16305VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16306{
16307 WDI_Status wdiStatus;
16308 //tANI_U8 eventIdx = 0;
16309 VOS_STATUS status = VOS_STATUS_SUCCESS;
16310 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016311 if (NULL == pWDA)
16312 {
16313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016314 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016315 VOS_ASSERT(0);
16316 return VOS_STATUS_E_FAILURE;
16317 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016318 /* FTM mode stay START_STATE */
16319 if( (WDA_READY_STATE != pWDA->wdaState) &&
16320 (WDA_INIT_STATE != pWDA->wdaState) &&
16321 (WDA_START_STATE != pWDA->wdaState) )
16322 {
16323 VOS_ASSERT(0);
16324 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016325
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016326 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16327 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016328 {
16329 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016330 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016331 }
Leo Chang9d76f622013-08-23 16:34:52 -070016332 else
16333 {
16334 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16335 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016336
Jeff Johnson295189b2012-06-20 16:38:30 -070016337 /* call WDI shutdown */
16338 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016339 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16340 {
16341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16342 "error in WDA Stop" );
16343 status = VOS_STATUS_E_FAILURE;
16344 }
16345 /* WDI stop is synchrnous, shutdown is complete when it returns */
16346 pWDA->wdaState = WDA_STOP_STATE;
16347
Jeff Johnson295189b2012-06-20 16:38:30 -070016348 /* shutdown should perform the stop & close actions. */
16349 /* Destroy the event */
16350 status = vos_event_destroy(&pWDA->txFrameEvent);
16351 if(!VOS_IS_STATUS_SUCCESS(status))
16352 {
16353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016354 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016355 status = VOS_STATUS_E_FAILURE;
16356 }
16357 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16358 if(!VOS_IS_STATUS_SUCCESS(status))
16359 {
16360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016361 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016362 status = VOS_STATUS_E_FAILURE;
16363 }
16364 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16365 if(!VOS_IS_STATUS_SUCCESS(status))
16366 {
16367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016368 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016369 status = VOS_STATUS_E_FAILURE;
16370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016371 /* free WDA context */
16372 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16373 if ( !VOS_IS_STATUS_SUCCESS(status) )
16374 {
16375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16376 "error in WDA close " );
16377 status = VOS_STATUS_E_FAILURE;
16378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016379 return status;
16380}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016381
Jeff Johnsone7245742012-09-05 17:12:55 -070016382/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016383 * FUNCTION: WDA_setNeedShutdown
16384 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016385 */
16386
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016387void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016388{
16389 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016390 if(pWDA == NULL)
16391 {
16392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16393 "Could not get the WDA Context pointer" );
16394 return;
16395 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016396 pWDA->needShutdown = TRUE;
16397}
16398/*
16399 * FUNCTION: WDA_needShutdown
16400 * WDA needs a shutdown
16401 */
16402
16403v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16404{
16405 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016406 if(pWDA == NULL)
16407 {
16408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16409 "Could not get the WDA Context pointer" );
16410 return 0;
16411 }
16412 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016413}
16414
Mohit Khanna4a70d262012-09-11 16:30:12 -070016415#ifdef WLAN_FEATURE_11AC
16416/*
16417 * FUNCTION: WDA_SetBeaconFilterReqCallback
16418 *
16419 */
16420void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16421{
16422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016424 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016425 if(NULL == pWdaParams)
16426 {
16427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016428 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016429 VOS_ASSERT(0) ;
16430 return ;
16431 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016432
Mohit Khanna4a70d262012-09-11 16:30:12 -070016433 vos_mem_free(pWdaParams->wdaMsgParam) ;
16434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16435 vos_mem_free(pWdaParams) ;
16436 /*
16437 * No respone required for SetBeaconFilter req so just free the request
16438 * param here
16439 */
16440
16441 return ;
16442}
16443
16444VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16445 tUpdateVHTOpMode *pData)
16446{
16447 WDI_Status status = WDI_STATUS_SUCCESS ;
16448 tWDA_ReqParams *pWdaParams ;
16449 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16450 sizeof(WDI_UpdateVHTOpMode)) ;
16451 if(NULL == wdiTemp)
16452 {
16453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016454 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016455 VOS_ASSERT(0);
16456 return VOS_STATUS_E_NOMEM;
16457 }
16458 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16459 if(NULL == pWdaParams)
16460 {
16461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016462 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016463 VOS_ASSERT(0);
16464 vos_mem_free(wdiTemp);
16465 return VOS_STATUS_E_NOMEM;
16466 }
16467
16468 wdiTemp->opMode = pData->opMode;
16469 wdiTemp->staId = pData->staId;
16470
16471 pWdaParams->pWdaContext = pWDA;
16472 /* Store Req pointer, as this will be used for response */
16473 pWdaParams->wdaMsgParam = (void *)pData;
16474 /* store Params pass it to WDI */
16475 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16476
16477 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16478
16479 if(IS_WDI_STATUS_FAILURE(status))
16480 {
16481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16482 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16484 vos_mem_free(pWdaParams->wdaMsgParam);
16485 vos_mem_free(pWdaParams);
16486 }
16487 return CONVERT_WDI2VOS_STATUS(status) ;
16488}
16489#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016490
16491/*==========================================================================
16492 FUNCTION WDA_TransportChannelDebug
16493
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016494 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016495 Display Transport Channel debugging information
16496 User may request to display DXE channel snapshot
16497 Or if host driver detects any abnormal stcuk may display
16498
16499 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016500 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016501 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016502 debugFlags : Enable stall detect features
16503 defined by WPAL_DeviceDebugFlags
16504 These features may effect
16505 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016506
16507 RETURN VALUE
16508 NONE
16509
16510===========================================================================*/
16511void WDA_TransportChannelDebug
16512(
schang6295e542013-03-12 15:31:23 -070016513 tpAniSirGlobal pMac,
16514 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016515 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016516)
16517{
Mihir Shete40a55652014-03-02 14:14:47 +053016518 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016519 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016520}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016521
16522/*==========================================================================
16523 FUNCTION WDA_SetEnableSSR
16524
16525 DESCRIPTION
16526 API to enable/disable SSR on WDI timeout
16527
16528 PARAMETERS
16529 enableSSR : enable/disable SSR
16530
16531 RETURN VALUE
16532 NONE
16533
16534===========================================================================*/
16535void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16536{
16537 WDI_SetEnableSSR(enableSSR);
16538}
Leo Chang9056f462013-08-01 19:21:11 -070016539
16540#ifdef FEATURE_WLAN_LPHB
16541/*
16542 * FUNCTION: WDA_LPHBconfRspCallback
16543 *
16544 */
16545void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16546{
16547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16548
16549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16550 "<------ %s " ,__func__);
16551 if (NULL == pWdaParams)
16552 {
16553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16554 "%s: pWdaParams received NULL", __func__);
16555 VOS_ASSERT(0) ;
16556 return ;
16557 }
16558
16559 /* Do not need to send notification to upper layer
16560 * Just free allocated resources */
16561 if (pWdaParams != NULL)
16562 {
16563 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16564 {
16565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16566 }
16567 vos_mem_free(pWdaParams->wdaMsgParam) ;
16568 vos_mem_free(pWdaParams) ;
16569 }
16570
16571 return;
16572}
16573
16574/*
16575 * FUNCTION: WDA_ProcessLPHBConfReq
16576 *
16577 */
16578VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16579 tSirLPHBReq *pData)
16580{
16581 WDI_Status wdiStatus;
16582 tWDA_ReqParams *pWdaParams ;
16583
16584 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16585 "------> %s " , __func__);
16586
16587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16588 if (NULL == pWdaParams)
16589 {
16590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16591 "%s: VOS MEM Alloc Failure", __func__);
16592 VOS_ASSERT(0);
16593 vos_mem_free(pData);
16594 return VOS_STATUS_E_NOMEM;
16595 }
16596
16597 pWdaParams->pWdaContext = pWDA;
16598 pWdaParams->wdaMsgParam = (void *)pData;
16599 pWdaParams->wdaWdiApiMsgParam = NULL;
16600
16601 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16602 if (WDI_STATUS_PENDING == wdiStatus)
16603 {
16604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16605 "Pending received for %s:%d ", __func__, __LINE__);
16606 }
16607 else if (WDI_STATUS_SUCCESS != wdiStatus)
16608 {
16609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16610 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16611 vos_mem_free(pWdaParams->wdaMsgParam);
16612 vos_mem_free(pWdaParams);
16613 }
16614
16615 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16616}
16617#endif /* FEATURE_WLAN_LPHB */
16618
c_hpothu92367912014-05-01 15:18:17 +053016619void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16620 void* pUserData)
16621{
16622 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16623
16624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16625 "<------ %s " ,__func__);
16626 if (NULL == pBcnMissRateInfo)
16627 {
16628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16629 "%s: pWdaParams received NULL", __func__);
16630 VOS_ASSERT(0) ;
16631 return ;
16632 }
16633 if (pBcnMissRateInfo->callback)
16634 {
16635 pBcnMissRateInfo->callback(status, bcnMissRate,
16636 pBcnMissRateInfo->data);
16637 }
16638 vos_mem_free(pUserData);
16639
16640 return;
16641}
16642
16643v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16644 tSirBcnMissRateReq *pData)
16645{
16646 WDI_Status wdiStatus;
16647 tSirBcnMissRateInfo *pBcnMissRateInfo;
16648
16649 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16650 "------> %s " , __func__);
16651
16652 pBcnMissRateInfo =
16653 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
16654 if (NULL == pBcnMissRateInfo)
16655 {
16656 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16657 "%s: VOS MEM Alloc Failure", __func__);
16658 VOS_ASSERT(0);
16659 vos_mem_free(pData);
16660 return;
16661 }
16662
16663 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
16664 pBcnMissRateInfo->data = pData->data;
16665
16666 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
16667 WDA_GetBcnMissRateCallback,
16668 pData->bssid);
16669 if (WDI_STATUS_PENDING == wdiStatus)
16670 {
16671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16672 "Pending received for %s:%d ", __func__, __LINE__);
16673 }
16674 else if (WDI_STATUS_SUCCESS != wdiStatus)
16675 {
16676 if (pBcnMissRateInfo->callback)
16677 {
16678 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
16679 -1, pBcnMissRateInfo->data);
16680 }
16681 }
16682 vos_mem_free(pData);
16683}
Dino Mycle41bdc942014-06-10 11:30:24 +053016684
16685#ifdef WLAN_FEATURE_EXTSCAN
16686
16687/*==========================================================================
16688 FUNCTION WDA_EXTScanStartRspCallback
16689
16690 DESCRIPTION
16691 API to send EXTScan Start Response to HDD
16692
16693 PARAMETERS
16694 pEventData: Response from FW
16695 pUserData:
16696===========================================================================*/
16697void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
16698{
16699 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16700 tWDA_CbContext *pWDA = NULL;
16701 void *pCallbackContext;
16702 tpAniSirGlobal pMac;
16703
16704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16705 "%s:", __func__);
16706 if (NULL == pWdaParams)
16707 {
16708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16709 "%s: pWdaParams received NULL", __func__);
16710 VOS_ASSERT(0);
16711 return;
16712 }
16713
16714 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16715
16716 if (NULL == pWDA)
16717 {
16718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16719 "%s: pWDA received NULL", __func__);
16720 VOS_ASSERT(0);
16721 goto error;
16722 }
16723
16724 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16725 if (NULL == pMac)
16726 {
16727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16728 "%s:pMac is NULL", __func__);
16729 VOS_ASSERT(0);
16730 goto error;
16731 }
16732
16733 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16734
16735 if (pMac->sme.pEXTScanIndCb)
16736 {
16737 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
16738 pEventData);
16739 }
16740 else
16741 {
16742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16743 "%s:HDD callback is null", __func__);
16744 VOS_ASSERT(0);
16745 }
16746
16747error:
16748
16749 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16750 {
16751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16752 }
16753 if (pWdaParams->wdaMsgParam != NULL)
16754 {
16755 vos_mem_free(pWdaParams->wdaMsgParam);
16756 }
16757 vos_mem_free(pWdaParams) ;
16758
16759 return;
16760}
16761
16762/*==========================================================================
16763 FUNCTION WDA_EXTScanStopRspCallback
16764
16765 DESCRIPTION
16766 API to send EXTScan Stop Response to HDD
16767
16768 PARAMETERS
16769 pEventData: Response from FW
16770 pUserData:
16771===========================================================================*/
16772void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
16773{
16774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16775 tWDA_CbContext *pWDA = NULL;
16776 void *pCallbackContext;
16777 tpAniSirGlobal pMac;
16778
16779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16780 "%s:", __func__);
16781 if (NULL == pWdaParams)
16782 {
16783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16784 "%s: pWdaParams received NULL", __func__);
16785 VOS_ASSERT(0);
16786 return;
16787 }
16788
16789 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16790
16791 if (NULL == pWDA)
16792 {
16793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16794 "%s: pWDA received NULL", __func__);
16795 VOS_ASSERT(0);
16796 goto error;
16797 }
16798
16799 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16800 if (NULL == pMac)
16801 {
16802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16803 "%s:pMac is NULL", __func__);
16804 VOS_ASSERT(0);
16805 goto error;
16806 }
16807 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16808
16809 if (pMac->sme.pEXTScanIndCb)
16810 {
16811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16812 "%s:HDD call back function called", __func__);
16813 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
16814 pEventData);
16815 }
16816 else
16817 {
16818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16819 "%s:HDD callback is null", __func__);
16820 VOS_ASSERT(0);
16821 }
16822
16823error:
16824
16825 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16826 {
16827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16828 }
16829 if (pWdaParams->wdaMsgParam != NULL)
16830 {
16831 vos_mem_free(pWdaParams->wdaMsgParam);
16832 }
16833 vos_mem_free(pWdaParams) ;
16834
16835
16836 return;
16837}
16838
16839/*==========================================================================
16840 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
16841
16842 DESCRIPTION
16843 API to send EXTScan Get Cached Results Response to HDD
16844
16845 PARAMETERS
16846 pEventData: Response from FW
16847 pUserData:
16848===========================================================================*/
16849void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
16850{
16851 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16852 tWDA_CbContext *pWDA = NULL;
16853 void *pCallbackContext;
16854 tpAniSirGlobal pMac;
16855
16856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16857 "%s: ", __func__);
16858 if (NULL == pWdaParams)
16859 {
16860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16861 "%s: pWdaParams received NULL", __func__);
16862 VOS_ASSERT(0);
16863 return;
16864 }
16865
16866 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16867
16868 if (NULL == pWDA)
16869 {
16870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16871 "%s: pWDA received NULL", __func__);
16872 VOS_ASSERT(0);
16873 goto error;
16874 }
16875
16876 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16877 if (NULL == pMac)
16878 {
16879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16880 "%s:pMac is NULL", __func__);
16881 VOS_ASSERT(0);
16882 goto error;
16883 }
16884
16885 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16886
16887 if (pMac->sme.pEXTScanIndCb)
16888 {
16889 pMac->sme.pEXTScanIndCb(pCallbackContext,
16890 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
16891 pEventData);
16892 }
16893 else
16894 {
16895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16896 "%s:HDD callback is null", __func__);
16897 VOS_ASSERT(0);
16898 }
16899
16900
16901error:
16902
16903 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16904 {
16905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16906 }
16907 if (pWdaParams->wdaMsgParam != NULL)
16908 {
16909 vos_mem_free(pWdaParams->wdaMsgParam);
16910 }
16911 vos_mem_free(pWdaParams) ;
16912
16913 return;
16914}
16915
16916/*==========================================================================
16917 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
16918
16919 DESCRIPTION
16920 API to send EXTScan Get Capabilities Response to HDD
16921
16922 PARAMETERS
16923 pEventData: Response from FW
16924 pUserData:
16925===========================================================================*/
16926void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
16927{
16928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16929 tWDA_CbContext *pWDA = NULL;
16930 void *pCallbackContext;
16931 tpAniSirGlobal pMac;
16932
16933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16934 "%s:", __func__);
16935 if (NULL == pWdaParams)
16936 {
16937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16938 "%s: pWdaParams received NULL", __func__);
16939 VOS_ASSERT(0);
16940 return;
16941 }
16942
16943 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16944
16945 if (NULL == pWDA)
16946 {
16947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16948 "%s: pWDA received NULL", __func__);
16949 VOS_ASSERT(0);
16950 goto error;
16951 }
16952
16953 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16954 if (NULL == pMac)
16955 {
16956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16957 "%s:pMac is NULL", __func__);
16958 VOS_ASSERT(0);
16959 goto error;
16960 }
16961
16962 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16963
16964 if (pMac->sme.pEXTScanIndCb)
16965 {
16966 pMac->sme.pEXTScanIndCb(pCallbackContext,
16967 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
16968 pEventData);
16969 }
16970 else
16971 {
16972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16973 "%s:HDD callback is null", __func__);
16974 VOS_ASSERT(0);
16975 }
16976
16977
16978error:
16979
16980 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16981 {
16982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16983 }
16984 if (pWdaParams->wdaMsgParam != NULL)
16985 {
16986 vos_mem_free(pWdaParams->wdaMsgParam);
16987 }
16988 vos_mem_free(pWdaParams) ;
16989
16990 return;
16991}
16992
16993/*==========================================================================
16994 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
16995
16996 DESCRIPTION
16997 API to send EXTScan Set BSSID Hotlist Response to HDD
16998
16999 PARAMETERS
17000 pEventData: Response from FW
17001 pUserData:
17002===========================================================================*/
17003void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17004{
17005 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17006 tWDA_CbContext *pWDA = NULL;
17007 void *pCallbackContext;
17008 tpAniSirGlobal pMac;
17009
17010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17011 "%s: ", __func__);
17012 if (NULL == pWdaParams)
17013 {
17014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17015 "%s: pWdaParams received NULL", __func__);
17016 VOS_ASSERT(0) ;
17017 return;
17018 }
17019
17020 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17021
17022 if (NULL == pWDA)
17023 {
17024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17025 "%s: pWDA received NULL", __func__);
17026 VOS_ASSERT(0);
17027 goto error;
17028 }
17029
17030 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17031 if (NULL == pMac)
17032 {
17033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17034 "%s:pMac is NULL", __func__);
17035 VOS_ASSERT(0);
17036 goto error;
17037 }
17038
17039 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17040
17041 if (pMac->sme.pEXTScanIndCb)
17042 {
17043 pMac->sme.pEXTScanIndCb(pCallbackContext,
17044 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17045 pEventData);
17046 }
17047 else
17048 {
17049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17050 "%s:HDD callback is null", __func__);
17051 VOS_ASSERT(0);
17052 }
17053
17054
17055error:
17056
17057 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17058 {
17059 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17060 }
17061 if (pWdaParams->wdaMsgParam != NULL)
17062 {
17063 vos_mem_free(pWdaParams->wdaMsgParam);
17064 }
17065 vos_mem_free(pWdaParams) ;
17066
17067 return;
17068}
17069
17070/*==========================================================================
17071 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17072
17073 DESCRIPTION
17074 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17075
17076 PARAMETERS
17077 pEventData: Response from FW
17078 pUserData:
17079===========================================================================*/
17080void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17081{
17082 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17083 tWDA_CbContext *pWDA = NULL;
17084 void *pCallbackContext;
17085 tpAniSirGlobal pMac;
17086
17087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17088 "%s:", __func__);
17089 if (NULL == pWdaParams)
17090 {
17091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17092 "%s: pWdaParams received NULL", __func__);
17093 VOS_ASSERT(0) ;
17094 return;
17095 }
17096
17097 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17098
17099 if (NULL == pWDA)
17100 {
17101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17102 "%s: pWDA received NULL", __func__);
17103 VOS_ASSERT(0);
17104 goto error;
17105 }
17106
17107 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17108 if (NULL == pMac)
17109 {
17110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17111 "%s:pMac is NULL", __func__);
17112 VOS_ASSERT(0);
17113 goto error;
17114 }
17115
17116 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17117
17118 if (pMac->sme.pEXTScanIndCb)
17119 {
17120 pMac->sme.pEXTScanIndCb(pCallbackContext,
17121 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17122 pEventData);
17123 }
17124 else
17125 {
17126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17127 "%s:HDD callback is null", __func__);
17128 VOS_ASSERT(0);
17129 }
17130
17131
17132error:
17133
17134 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17135 {
17136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17137 }
17138 if (pWdaParams->wdaMsgParam != NULL)
17139 {
17140 vos_mem_free(pWdaParams->wdaMsgParam);
17141 }
17142 vos_mem_free(pWdaParams) ;
17143
17144 return;
17145}
17146
17147/*==========================================================================
17148 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17149
17150 DESCRIPTION
17151 API to send EXTScan Set Significant RSSI Change RSP to HDD
17152
17153 PARAMETERS
17154 pEventData: Response from FW
17155 pUserData:
17156===========================================================================*/
17157void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17158{
17159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17160 tWDA_CbContext *pWDA = NULL;
17161 void *pCallbackContext;
17162 tpAniSirGlobal pMac;
17163
17164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17165 "%s:", __func__);
17166 if (NULL == pWdaParams)
17167 {
17168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17169 "%s: pWdaParams received NULL", __func__);
17170 VOS_ASSERT(0) ;
17171 return;
17172 }
17173
17174 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17175
17176 if (NULL == pWDA)
17177 {
17178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17179 "%s: pWDA received NULL", __func__);
17180 VOS_ASSERT(0);
17181 goto error;
17182 }
17183
17184 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17185 if (NULL == pMac)
17186 {
17187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17188 "%s:pMac is NULL", __func__);
17189 VOS_ASSERT(0);
17190 goto error;
17191 }
17192
17193 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17194
17195 if (pMac->sme.pEXTScanIndCb)
17196 {
17197 pMac->sme.pEXTScanIndCb(pCallbackContext,
17198 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17199 pEventData);
17200 }
17201 else
17202 {
17203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17204 "%s:HDD callback is null", __func__);
17205 VOS_ASSERT(0);
17206 }
17207
17208
17209error:
17210
17211 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17212 {
17213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17214 }
17215 if (pWdaParams->wdaMsgParam != NULL)
17216 {
17217 vos_mem_free(pWdaParams->wdaMsgParam);
17218 }
17219 vos_mem_free(pWdaParams) ;
17220
17221 return;
17222}
17223
17224/*==========================================================================
17225 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17226
17227 DESCRIPTION
17228 API to send EXTScan Set Significant RSSI Change RSP to HDD
17229
17230 PARAMETERS
17231 pEventData: Response from FW
17232 pUserData:
17233===========================================================================*/
17234void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17235 void* pUserData)
17236{
17237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17238 tWDA_CbContext *pWDA = NULL;
17239 void *pCallbackContext;
17240 tpAniSirGlobal pMac;
17241
17242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17243 "%s:", __func__);
17244 if (NULL == pWdaParams)
17245 {
17246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17247 "%s: pWdaParams received NULL", __func__);
17248 VOS_ASSERT(0) ;
17249 return;
17250 }
17251
17252 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17253
17254 if (NULL == pWDA)
17255 {
17256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17257 "%s: pWDA received NULL", __func__);
17258 VOS_ASSERT(0);
17259 goto error;
17260 }
17261
17262 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17263 if (NULL == pMac)
17264 {
17265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17266 "%s:pMac is NULL", __func__);
17267 VOS_ASSERT(0);
17268 goto error;
17269 }
17270
17271 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17272
17273 if (pMac->sme.pEXTScanIndCb)
17274 {
17275 pMac->sme.pEXTScanIndCb(pCallbackContext,
17276 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17277 pEventData);
17278 }
17279 else
17280 {
17281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17282 "%s:HDD callback is null", __func__);
17283 VOS_ASSERT(0);
17284 }
17285
17286
17287error:
17288
17289 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17290 {
17291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17292 }
17293 if (pWdaParams->wdaMsgParam != NULL)
17294 {
17295 vos_mem_free(pWdaParams->wdaMsgParam);
17296 }
17297 vos_mem_free(pWdaParams) ;
17298
17299 return;
17300}
17301
17302/*==========================================================================
17303 FUNCTION WDA_ProcessEXTScanStartReq
17304
17305 DESCRIPTION
17306 API to send EXTScan Start Request to WDI
17307
17308 PARAMETERS
17309 pWDA: Pointer to WDA context
17310 wdaRequest: Pointer to EXTScan req parameters
17311===========================================================================*/
17312VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17313 tSirEXTScanStartReqParams *wdaRequest)
17314{
17315 WDI_Status status = WDI_STATUS_SUCCESS;
17316 tWDA_ReqParams *pWdaParams;
17317
17318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17319 "%s: ", __func__);
17320 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17321 if (NULL == pWdaParams)
17322 {
17323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17324 "%s: VOS MEM Alloc Failure", __func__);
17325 VOS_ASSERT(0);
17326 return VOS_STATUS_E_NOMEM;
17327 }
17328 pWdaParams->pWdaContext = pWDA;
17329 pWdaParams->wdaMsgParam = wdaRequest;
17330 pWdaParams->wdaWdiApiMsgParam = NULL;
17331
17332 status = WDI_EXTScanStartReq((void *)wdaRequest,
17333 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17334 (void *)pWdaParams);
17335 if (IS_WDI_STATUS_FAILURE(status))
17336 {
17337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17338 "Failure to request. Free all the memory " );
17339 vos_mem_free(pWdaParams->wdaMsgParam);
17340 vos_mem_free(pWdaParams);
17341 }
17342 return CONVERT_WDI2VOS_STATUS(status);
17343}
17344
17345/*==========================================================================
17346 FUNCTION WDA_ProcessEXTScanStopReq
17347
17348 DESCRIPTION
17349 API to send EXTScan Start Request to WDI
17350
17351 PARAMETERS
17352 pWDA: Pointer to WDA context
17353 wdaRequest: Pointer to EXTScan req parameters
17354===========================================================================*/
17355VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17356 tSirEXTScanStopReqParams *wdaRequest)
17357{
17358 WDI_Status status = WDI_STATUS_SUCCESS;
17359 tWDA_ReqParams *pWdaParams;
17360
17361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17362 "%s:", __func__);
17363 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17364 if (NULL == pWdaParams)
17365 {
17366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17367 "%s: VOS MEM Alloc Failure", __func__);
17368 VOS_ASSERT(0);
17369 return VOS_STATUS_E_NOMEM;
17370 }
17371 pWdaParams->pWdaContext = pWDA;
17372 pWdaParams->wdaMsgParam = wdaRequest;
17373 pWdaParams->wdaWdiApiMsgParam = NULL;
17374
17375 status = WDI_EXTScanStopReq((void *)wdaRequest,
17376 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17377 (void *)pWdaParams);
17378 if (IS_WDI_STATUS_FAILURE(status))
17379 {
17380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17381 "Failure to request. Free all the memory " );
17382 vos_mem_free(pWdaParams->wdaMsgParam);
17383 vos_mem_free(pWdaParams);
17384 }
17385 return CONVERT_WDI2VOS_STATUS(status);
17386}
17387
17388/*==========================================================================
17389 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17390
17391 DESCRIPTION
17392 API to send EXTScan Get Cached Results Request to WDI
17393
17394 PARAMETERS
17395 pWDA: Pointer to WDA context
17396 wdaRequest: Pointer to EXTScan req parameters
17397===========================================================================*/
17398VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17399 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17400{
17401 WDI_Status status = WDI_STATUS_SUCCESS;
17402 tWDA_ReqParams *pWdaParams;
17403
17404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17405 "%s: ", __func__);
17406 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17407 if (NULL == pWdaParams)
17408 {
17409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17410 "%s: VOS MEM Alloc Failure", __func__);
17411 VOS_ASSERT(0);
17412 return VOS_STATUS_E_NOMEM;
17413 }
17414 pWdaParams->pWdaContext = pWDA;
17415 pWdaParams->wdaMsgParam = wdaRequest;
17416 pWdaParams->wdaWdiApiMsgParam = NULL;
17417
17418 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17419 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17420 (void *)pWdaParams);
17421 if (IS_WDI_STATUS_FAILURE(status))
17422 {
17423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17424 "Failure to request. Free all the memory " );
17425 vos_mem_free(pWdaParams->wdaMsgParam);
17426 vos_mem_free(pWdaParams);
17427 }
17428 return CONVERT_WDI2VOS_STATUS(status);
17429}
17430
17431/*==========================================================================
17432 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17433
17434 DESCRIPTION
17435 API to send EXTScan Get Capabilities Request to WDI
17436
17437 PARAMETERS
17438 pWDA: Pointer to WDA context
17439 wdaRequest: Pointer to EXTScan req parameters
17440===========================================================================*/
17441VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17442 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17443{
17444 WDI_Status status = WDI_STATUS_SUCCESS;
17445 tWDA_ReqParams *pWdaParams;
17446
17447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17448 "%s:", __func__);
17449 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17450 if (NULL == pWdaParams)
17451 {
17452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17453 "%s: VOS MEM Alloc Failure", __func__);
17454 VOS_ASSERT(0);
17455 return VOS_STATUS_E_NOMEM;
17456 }
17457 pWdaParams->pWdaContext = pWDA;
17458 pWdaParams->wdaMsgParam = wdaRequest;
17459 pWdaParams->wdaWdiApiMsgParam = NULL;
17460
17461 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17462 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17463 (void *)pWdaParams);
17464 if (IS_WDI_STATUS_FAILURE(status))
17465 {
17466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17467 "Failure to request. Free all the memory " );
17468 vos_mem_free(pWdaParams->wdaMsgParam);
17469 vos_mem_free(pWdaParams);
17470 }
17471 return CONVERT_WDI2VOS_STATUS(status);
17472}
17473
17474/*==========================================================================
17475 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17476
17477 DESCRIPTION
17478 API to send Set BSSID Hotlist Request to WDI
17479
17480 PARAMETERS
17481 pWDA: Pointer to WDA context
17482 wdaRequest: Pointer to EXTScan req parameters
17483===========================================================================*/
17484VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17485 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17486{
17487 WDI_Status status = WDI_STATUS_SUCCESS;
17488 tWDA_ReqParams *pWdaParams;
17489
17490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17491 "%s: ", __func__);
17492 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17493 if (NULL == pWdaParams)
17494 {
17495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17496 "%s: VOS MEM Alloc Failure", __func__);
17497 VOS_ASSERT(0);
17498 return VOS_STATUS_E_NOMEM;
17499 }
17500 pWdaParams->pWdaContext = pWDA;
17501 pWdaParams->wdaMsgParam = wdaRequest;
17502 pWdaParams->wdaWdiApiMsgParam = NULL;
17503
17504 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17505 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17506 (void *)pWdaParams);
17507 if (IS_WDI_STATUS_FAILURE(status))
17508 {
17509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17510 "Failure to request. Free all the memory " );
17511 vos_mem_free(pWdaParams->wdaMsgParam);
17512 vos_mem_free(pWdaParams);
17513 }
17514 return CONVERT_WDI2VOS_STATUS(status);
17515}
17516
17517/*==========================================================================
17518 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17519
17520 DESCRIPTION
17521 API to send Reset BSSID Hotlist Request to WDI
17522
17523 PARAMETERS
17524 pWDA: Pointer to WDA context
17525 wdaRequest: Pointer to EXTScan req parameters
17526===========================================================================*/
17527VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17528 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17529{
17530 WDI_Status status = WDI_STATUS_SUCCESS;
17531 tWDA_ReqParams *pWdaParams;
17532
17533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17534 "%s:", __func__);
17535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17536 if (NULL == pWdaParams)
17537 {
17538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17539 "%s: VOS MEM Alloc Failure", __func__);
17540 VOS_ASSERT(0);
17541 return VOS_STATUS_E_NOMEM;
17542 }
17543 pWdaParams->pWdaContext = pWDA;
17544 pWdaParams->wdaMsgParam = wdaRequest;
17545 pWdaParams->wdaWdiApiMsgParam = NULL;
17546
17547 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17548 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17549 (void *)pWdaParams);
17550 if (IS_WDI_STATUS_FAILURE(status))
17551 {
17552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17553 "Failure to request. Free all the memory " );
17554 vos_mem_free(pWdaParams->wdaMsgParam);
17555 vos_mem_free(pWdaParams);
17556 }
17557 return CONVERT_WDI2VOS_STATUS(status);
17558}
17559
17560/*==========================================================================
17561 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17562
17563 DESCRIPTION
17564 API to send Set Significant RSSI Change Request to WDI
17565
17566 PARAMETERS
17567 pWDA: Pointer to WDA context
17568 wdaRequest: Pointer to EXTScan req parameters
17569===========================================================================*/
17570VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17571 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17572{
17573 WDI_Status status = WDI_STATUS_SUCCESS;
17574 tWDA_ReqParams *pWdaParams;
17575
17576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17577 "%s: ", __func__);
17578 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17579 if (NULL == pWdaParams)
17580 {
17581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17582 "%s: VOS MEM Alloc Failure", __func__);
17583 VOS_ASSERT(0);
17584 return VOS_STATUS_E_NOMEM;
17585 }
17586 pWdaParams->pWdaContext = pWDA;
17587 pWdaParams->wdaMsgParam = wdaRequest;
17588 pWdaParams->wdaWdiApiMsgParam = NULL;
17589
17590 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17591 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17592 (void *)pWdaParams);
17593 if (IS_WDI_STATUS_FAILURE(status))
17594 {
17595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17596 "Failure to request. Free all the memory " );
17597 vos_mem_free(pWdaParams->wdaMsgParam);
17598 vos_mem_free(pWdaParams);
17599 }
17600 return CONVERT_WDI2VOS_STATUS(status);
17601}
17602
17603/*==========================================================================
17604 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17605
17606 DESCRIPTION
17607 API to send Reset Significant RSSI Change Request to WDI
17608
17609 PARAMETERS
17610 pWDA: Pointer to WDA context
17611 wdaRequest: Pointer to EXTScan req parameters
17612===========================================================================*/
17613VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17614 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17615{
17616 WDI_Status status = WDI_STATUS_SUCCESS;
17617 tWDA_ReqParams *pWdaParams;
17618
17619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17620 "%s:", __func__);
17621 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17622 if (NULL == pWdaParams)
17623 {
17624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17625 "%s: VOS MEM Alloc Failure", __func__);
17626 VOS_ASSERT(0);
17627 return VOS_STATUS_E_NOMEM;
17628 }
17629 pWdaParams->pWdaContext = pWDA;
17630 pWdaParams->wdaMsgParam = wdaRequest;
17631 pWdaParams->wdaWdiApiMsgParam = NULL;
17632
17633 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
17634 (WDI_EXTScanResetSignfRSSIChangeRspCb)
17635 WDA_EXTScanResetSignfRSSIChangeRspCallback,
17636 (void *)pWdaParams);
17637 if (IS_WDI_STATUS_FAILURE(status))
17638 {
17639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17640 "Failure to request. Free all the memory " );
17641 vos_mem_free(pWdaParams->wdaMsgParam);
17642 vos_mem_free(pWdaParams);
17643 }
17644 return CONVERT_WDI2VOS_STATUS(status);
17645}
17646#endif /* WLAN_FEATURE_EXTSCAN */
17647
Sunil Duttbd736ed2014-05-26 21:19:41 +053017648#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17649
17650/*==========================================================================
17651 FUNCTION WDA_LLStatsSetRspCallback
17652
17653 DESCRIPTION
17654 API to process set link layer statistics response from FW
17655
17656 PARAMETERS
17657 pRsp: Pointer to set link layer statistics response
17658 pUserData: Pointer to user data
17659
17660 RETURN VALUE
17661 NONE
17662
17663===========================================================================*/
17664void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
17665{
17666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17667
17668
17669 if (NULL == pWdaParams)
17670 {
17671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17672 "%s: pWdaParams received NULL", __func__);
17673 VOS_ASSERT(0) ;
17674 return ;
17675 }
17676
17677 /* Do not need to send notification to upper layer
17678 * Just free allocated resources */
17679 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17680 {
17681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17682 }
17683 if (pWdaParams->wdaMsgParam != NULL)
17684 {
17685 vos_mem_free(pWdaParams->wdaMsgParam);
17686 }
17687 vos_mem_free(pWdaParams) ;
17688
17689 return;
17690}
17691
17692/*==========================================================================
17693 FUNCTION WDA_ProcessLLStatsSetReq
17694
17695 DESCRIPTION
17696 API to send Set Link Layer Stats request to WDI
17697
17698 PARAMETERS
17699 pWDA: Pointer to WDA context
17700 wdaRequest: Pointer to set Link Layer Stats req parameters
17701===========================================================================*/
17702VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
17703 tSirLLStatsSetReq *wdaRequest)
17704{
17705 WDI_Status status = WDI_STATUS_SUCCESS;
17706 tWDA_ReqParams *pWdaParams;
17707
17708 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17709 if (NULL == pWdaParams)
17710 {
17711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17712 "%s: VOS MEM Alloc Failure", __func__);
17713 VOS_ASSERT(0);
17714 return VOS_STATUS_E_NOMEM;
17715 }
17716 pWdaParams->pWdaContext = pWDA;
17717 pWdaParams->wdaMsgParam = wdaRequest;
17718 pWdaParams->wdaWdiApiMsgParam = NULL;
17719
17720 status = WDI_LLStatsSetReq((void *)wdaRequest,
17721 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
17722 (void *)pWdaParams);
17723 if (IS_WDI_STATUS_FAILURE(status))
17724 {
17725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17726 "Failure to request. Free all the memory " );
17727 vos_mem_free(pWdaParams->wdaMsgParam);
17728 vos_mem_free(pWdaParams);
17729 }
17730 return CONVERT_WDI2VOS_STATUS(status);
17731}
17732
17733/*==========================================================================
17734 FUNCTION WDA_LLStatsGetRspCallback
17735
17736 DESCRIPTION
17737 API to process get link layer statistics response from FW
17738
17739 PARAMETERS
17740 pRsp: Pointer to get link layer statistics response
17741 pUserData: Pointer to user data
17742
17743 RETURN VALUE
17744 NONE
17745
17746===========================================================================*/
17747void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
17748{
17749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17750
17751 if (NULL == pWdaParams)
17752 {
17753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17754 "%s: pWdaParams received NULL", __func__);
17755 VOS_ASSERT(0) ;
17756 return ;
17757 }
17758
17759 /* Do not need to send notification to upper layer
17760 * Just free allocated resources */
17761 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17762 {
17763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17764 }
17765 if (pWdaParams->wdaMsgParam != NULL)
17766 {
17767 vos_mem_free(pWdaParams->wdaMsgParam);
17768 }
17769 vos_mem_free(pWdaParams) ;
17770
17771 return;
17772}
17773
17774/*==========================================================================
17775 FUNCTION WDA_ProcessLLStatsGetReq
17776
17777 DESCRIPTION
17778 API to send Get Link Layer Stats request to WDI
17779
17780 PARAMETERS
17781 pWDA: Pointer to WDA context
17782 wdaRequest: Pointer to get Link Layer Stats req parameters
17783===========================================================================*/
17784VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
17785 tSirLLStatsGetReq *wdaRequest)
17786{
17787 WDI_Status status = WDI_STATUS_SUCCESS;
17788 tWDA_ReqParams *pWdaParams;
17789
17790 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17791 if (NULL == pWdaParams)
17792 {
17793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17794 "%s: VOS MEM Alloc Failure", __func__);
17795 VOS_ASSERT(0);
17796 return VOS_STATUS_E_NOMEM;
17797 }
17798 pWdaParams->pWdaContext = pWDA;
17799 pWdaParams->wdaMsgParam = wdaRequest;
17800 pWdaParams->wdaWdiApiMsgParam = NULL;
17801
17802 status = WDI_LLStatsGetReq((void *) wdaRequest,
17803 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
17804 (void *)pWdaParams);
17805 if (IS_WDI_STATUS_FAILURE(status))
17806 {
17807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17808 "Failure to request. Free all the memory " );
17809 vos_mem_free(pWdaParams->wdaMsgParam);
17810 vos_mem_free(pWdaParams);
17811 }
17812 return CONVERT_WDI2VOS_STATUS(status);
17813}
17814
17815/*==========================================================================
17816 FUNCTION WDA_LLStatsClearRspCallback
17817
17818 DESCRIPTION
17819 API to process clear link layer statistics response from FW
17820
17821 PARAMETERS
17822 pRsp: Pointer to clear link layer statistics response
17823 pUserData: Pointer to user data
17824
17825 RETURN VALUE
17826 NONE
17827
17828===========================================================================*/
17829void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
17830{
17831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17832
17833
17834 if (NULL == pWdaParams)
17835 {
17836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17837 "%s: pWdaParams received NULL", __func__);
17838 VOS_ASSERT(0) ;
17839 return ;
17840 }
17841 /* Do not need to send notification to upper layer
17842 * Just free allocated resources */
17843 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17844 {
17845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17846 }
17847 if (pWdaParams->wdaMsgParam != NULL)
17848 {
17849 vos_mem_free(pWdaParams->wdaMsgParam);
17850 }
17851 vos_mem_free(pWdaParams) ;
17852 return;
17853}
17854
17855/*==========================================================================
17856 FUNCTION WDA_ProcessLLStatsClearReq
17857
17858 DESCRIPTION
17859 API to send Clear Link Layer Stats request to WDI
17860
17861 PARAMETERS
17862 pWDA: Pointer to WDA context
17863 wdaRequest: Pointer to earLink Layer Stats req
17864===========================================================================*/
17865VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
17866 tSirLLStatsClearReq *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_LLStatsClearReq((void *) wdaRequest,
17884 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
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#endif /* WLAN_FEATURE_LINK_LAYER_STATS */