blob: 8c03ec7f33ef1b4edf57ac19793e8c9a9ab18c50 [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/*
23 * Copyright (c) 2012-2014 Qualcomm Atheros, Inc.
24 * All Rights Reserved.
25 * Qualcomm Atheros Confidential and Proprietary.
26 *
27 */
28
Jeff Johnson295189b2012-06-20 16:38:30 -070029
30/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070031 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070032 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070033 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070034 The functions externalized by this module are to be called ONLY by other
35 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070036 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070037 Are listed for each API below.
38
Jeff Johnson295189b2012-06-20 16:38:30 -070039 Copyright (c) 2010-2011 QUALCOMM Incorporated.
40 All Rights Reserved.
41 Qualcomm Confidential and Proprietary
42===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070043/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070044 EDIT HISTORY FOR FILE
45
Jeff Johnson295189b2012-06-20 16:38:30 -070046 This section contains comments describing changes made to the module.
47 Notice that changes are listed in reverse chronological order.
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 $Header$$DateTime$$Author$
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 when who what, where, why
52---------- --- -------------------------------------------------
5310/05/2011 haparna Adding support for Keep Alive Feature
542010-12-30 smiryala UMAC convergence changes
552010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
56===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070057#include "vos_mq.h"
58#include "vos_api.h"
59#include "vos_packet.h"
60#include "vos_nvitem.h"
61#include "sirApi.h"
62#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053063#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070064#include "wlan_qct_wda.h"
65#include "wlan_qct_wda_msg.h"
66#include "wlan_qct_wdi_cfg.h"
67#include "wlan_qct_wdi.h"
68#include "wlan_qct_wdi_ds.h"
69#include "wlan_hal_cfg.h"
70/**********************/
71#include "wniApi.h"
72#include "cfgApi.h"
73#include "limApi.h"
74#include "wlan_qct_tl.h"
75#include "wlan_qct_tli_ba.h"
76#include "limUtils.h"
77#include "btcApi.h"
78#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079#include "pttMsgApi.h"
80#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070081/* Used MACRO's */
82/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080083#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
85#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070086#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define CONVERT_WDI2SIR_STATUS(x) \
88 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
89
90#define IS_WDI_STATUS_FAILURE(status) \
91 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070092#define CONVERT_WDI2VOS_STATUS(x) \
93 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
94
95/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070096#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_GET_BA_TXFLAG(a, b, c) \
99 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
100
101#define WDA_SET_BA_TXFLAG(a, b, c) \
102 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
103
104#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
105 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
107 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108/* timer related Macros */
109#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
110 tx_timer_create(a, b, c, d, e, f, g)
111#define WDA_START_TIMER(a) tx_timer_activate(a)
112#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
113#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700114#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115
116#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
117 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800122#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700125
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700126#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700127#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
128 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
129 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
130
131#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
132#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800133#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
134
Jeff Johnson295189b2012-06-20 16:38:30 -0700135/* extern declarations */
136extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700137extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
138
Jeff Johnson295189b2012-06-20 16:38:30 -0700139/* forward declarations */
140void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
141 void *pBodyptr, tANI_U32 bodyVal) ;
142VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
143 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700144VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
145VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
146
147extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
148 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
149void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
150 tANI_U32 *pConfig) ;
151void 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
211VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
212 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700213#ifdef WLAN_FEATURE_11AC
214VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
215 tUpdateVHTOpMode *pData);
216#endif
Leo Chang9056f462013-08-01 19:21:11 -0700217
218#ifdef FEATURE_WLAN_LPHB
219VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
220 tSirLPHBReq *pData);
221#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700222/*
223 * FUNCTION: WDA_open
224 * Allocate the WDA context
225 */
226VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
227 tMacOpenParameters *pMacParams )
228{
229 tWDA_CbContext *wdaContext;
230 VOS_STATUS status;
231 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700232 /* Allocate WDA context */
233 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
234 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
235 if(!VOS_IS_STATUS_SUCCESS(status))
236 {
237 return VOS_STATUS_E_NOMEM;
238 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700239 /*__asm int 3;*/
240 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
241
242 /* Initialize data structures */
243 wdaContext->pVosContext = pVosContext;
244 wdaContext->wdaState = WDA_INIT_STATE;
245 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
246
247 /* Initialize WDA-WDI synchronization event */
248 status = vos_event_init(&wdaContext->wdaWdiEvent);
249 if(!VOS_IS_STATUS_SUCCESS(status))
250 {
251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800252 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800253 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700254 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700255 /* Init Frame transfer event */
256 status = vos_event_init(&wdaContext->txFrameEvent);
257 if(!VOS_IS_STATUS_SUCCESS(status))
258 {
259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800260 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800261 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700262 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700263 status = vos_event_init(&wdaContext->suspendDataTxEvent);
264 if(!VOS_IS_STATUS_SUCCESS(status))
265 {
266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800267 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800268 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700270 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
271 if(!VOS_IS_STATUS_SUCCESS(status))
272 {
273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800274 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800275 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700278 wdaContext->driverMode = pMacParams->driverType;
279 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
280 &wdiDevCapability, pMacParams->driverType))
281 {
282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
283 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800284 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700285 }
286 else
287 {
288 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
289 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
290 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 /* update max STA in WDA used for BA */
292 wdaContext->wdaMaxSta = pMacParams->maxStation;
293 /* store the frameTransRequired flag in wdaContext, to send this to HAL
294 * in WDA_Start
295 */
296 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
297 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700298 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800299
300error:
301 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
302 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700303}
304
Jeff Johnson295189b2012-06-20 16:38:30 -0700305/*
306 * FUNCTION: WDA_preStart
307 * Trigger DAL-AL to start CFG download
308 */
309VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
310{
311 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
312 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700313 /*
314 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
315 */
316 wdaMsg.type = WNI_CFG_DNLD_REQ ;
317 wdaMsg.bodyptr = NULL;
318 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 /* post the message.. */
320 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
321 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
322 {
323 vosStatus = VOS_STATUS_E_BADMSG;
324 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 return( vosStatus );
326}
Jeff Johnson295189b2012-06-20 16:38:30 -0700327/*
328 * FUNCTION: WDA_wdiStartCallback
329 * Once WDI_Start is finished, WDI start callback will be called by WDI
330 * to indicate completion of WDI_Start.
331 */
332void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
333 void *pVosContext)
334{
335 tWDA_CbContext *wdaContext;
336 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700337 if (NULL == pVosContext)
338 {
339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700340 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 return;
342 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
344 if (NULL == wdaContext)
345 {
346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700347 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 return;
349 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700350 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
351 {
352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700353 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 }
355 else
356 {
357 wdaContext->wdaState = WDA_START_STATE;
358 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* extract and save version information from the Start Response */
360 wdaContext->wcnssWlanCompiledVersion.major =
361 wdiRspParams->wlanCompiledVersion.major;
362 wdaContext->wcnssWlanCompiledVersion.minor =
363 wdiRspParams->wlanCompiledVersion.minor;
364 wdaContext->wcnssWlanCompiledVersion.version =
365 wdiRspParams->wlanCompiledVersion.version;
366 wdaContext->wcnssWlanCompiledVersion.revision =
367 wdiRspParams->wlanCompiledVersion.revision;
368 wdaContext->wcnssWlanReportedVersion.major =
369 wdiRspParams->wlanReportedVersion.major;
370 wdaContext->wcnssWlanReportedVersion.minor =
371 wdiRspParams->wlanReportedVersion.minor;
372 wdaContext->wcnssWlanReportedVersion.version =
373 wdiRspParams->wlanReportedVersion.version;
374 wdaContext->wcnssWlanReportedVersion.revision =
375 wdiRspParams->wlanReportedVersion.revision;
376 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
377 wdiRspParams->wcnssSoftwareVersion,
378 sizeof(wdaContext->wcnssSoftwareVersionString));
379 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
380 wdiRspParams->wcnssHardwareVersion,
381 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700382 /* Notify WDA_start that WDI_Start has completed */
383 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700384 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700387 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 return;
390}
391
Jeff Johnson295189b2012-06-20 16:38:30 -0700392/*
393 * FUNCTION: WDA_start
394 * Prepare TLV configuration and call WDI_Start.
395 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700396VOS_STATUS WDA_start(v_PVOID_t pVosContext)
397{
398 tWDA_CbContext *wdaContext;
399 VOS_STATUS status;
400 WDI_Status wdiStatus;
401 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 if (NULL == pVosContext)
403 {
404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700405 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 return VOS_STATUS_E_FAILURE;
407 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700408 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
409 if (NULL == wdaContext)
410 {
411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700412 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 return VOS_STATUS_E_FAILURE;
414 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 /* Non-FTM mode, WDA status for START must be INIT
416 * FTM mode, WDA Status for START can be INIT or STOP */
417 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
418 (WDA_STOP_STATE != wdaContext->wdaState) )
419 {
420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
421 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700422 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 return VOS_STATUS_E_FAILURE;
424 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 /* initialize the wdiStartParam. Note that we can create this on
426 the stack since we won't exit until WDI_Start() completes or
427 times out */
428 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /* prepare the config TLV for the WDI */
431 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
432 if ( !VOS_IS_STATUS_SUCCESS(status) )
433 {
434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700435 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 return VOS_STATUS_E_FAILURE;
437 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 /* note from here onwards if an error occurs we must
439 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
441 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
442 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 /* initialize the WDA-WDI synchronization event */
444 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 /* call WDI start */
446 wdiStatus = WDI_Start(&wdiStartParam,
447 (WDI_StartRspCb)WDA_wdiStartCallback,
448 (v_VOID_t *)pVosContext);
449 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700452 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 vos_mem_free(wdiStartParam.pConfigBuffer);
454 return VOS_STATUS_E_FAILURE;
455 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* wait for WDI start to invoke our callback */
457 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
458 WDA_WDI_START_TIMEOUT );
459 if ( !VOS_IS_STATUS_SUCCESS(status) )
460 {
461 if ( VOS_STATUS_E_TIMEOUT == status )
462 {
463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700464 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 }
466 else
467 {
468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
469 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700470 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 }
472 vos_mem_free(wdiStartParam.pConfigBuffer);
473 return VOS_STATUS_E_FAILURE;
474 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* we no longer need the config TLV */
477 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* if we are not in the START state then WDI_Start() failed */
479 if (WDA_START_STATE != wdaContext->wdaState)
480 {
481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700482 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 return VOS_STATUS_E_FAILURE;
484 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* FTM mode does not need to monitor BA activity */
486 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
487 {
488 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800489 if(VOS_STATUS_SUCCESS == status)
490 {
491 wdaContext->wdaTimersCreated = VOS_TRUE;
492 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 }
Leo Chang9d76f622013-08-23 16:34:52 -0700494 else
495 {
496 vos_event_init(&wdaContext->ftmStopDoneEvent);
497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 return status;
499}
500
Jeff Johnson295189b2012-06-20 16:38:30 -0700501/*
502 * FUNCTION: WDA_prepareConfigTLV
503 * Function to prepare CFG for DAL(WDA)
504 */
505VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
506 WDI_StartReqParamsType *wdiStartParams )
507{
508 /* get pMac to acess CFG data base */
509 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
510 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
511 tHalCfg *tlvStruct = NULL ;
512 tANI_U8 *tlvStructStart = NULL ;
513 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
514 v_PVOID_t *configParam;
515 tANI_U32 configParamSize;
516 tANI_U32 *configDataValue;
517 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700518 tANI_U8 i;
519
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 if ((NULL == pMac)||(NULL == wdaContext))
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 VOS_ASSERT(0);
525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
528 WNI_CFG_STA_ID_LEN +
529 WNI_CFG_EDCA_WME_ACBK_LEN +
530 WNI_CFG_EDCA_WME_ACBE_LEN +
531 WNI_CFG_EDCA_WME_ACVI_LEN +
532 WNI_CFG_EDCA_WME_ACVO_LEN +
533 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* malloc memory for all configs in one shot */
535 configParam = vos_mem_malloc(configParamSize);
536
537 if(NULL == configParam )
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 VOS_ASSERT(0) ;
542 return VOS_STATUS_E_NOMEM;
543 }
544 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 tlvStruct = (tHalCfg *)configParam;
547 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* TODO: Remove Later */
549 /* QWLAN_HAL_CFG_STA_ID */
550 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
551 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
552 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
553 eSIR_SUCCESS)
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
556 "Failed to get value for WNI_CFG_STA_ID");
557 goto handle_failure;
558 }
559 tlvStruct->length = strLength ;
560 /* calculate the pad bytes to have the CFG in aligned format */
561 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
562 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
564 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
566 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
567 tlvStruct->length = sizeof(tANI_U32);
568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
569 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
570 != eSIR_SUCCESS)
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
573 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
574 goto handle_failure;
575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
577 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
579 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
580 tlvStruct->length = sizeof(tANI_U32);
581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
582 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
583 eSIR_SUCCESS)
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
587 goto handle_failure;
588 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
590 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
592 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
593 tlvStruct->length = sizeof(tANI_U32);
594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
595 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
596 != eSIR_SUCCESS)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
599 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
600 goto handle_failure;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length)) ;
604
605 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
606 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
610 configDataValue ) != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CAL_PERIOD */
619 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
623 != eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CAL_PERIOD");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_CAL_CONTROL */
632 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_CAL_CONTROL");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* QWLAN_HAL_CFG_PROXIMITY */
645 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
649 != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_PROXIMITY");
653 goto handle_failure;
654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
656 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
658 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
666 goto handle_failure;
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
669 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
671 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
675 eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
679 goto handle_failure;
680 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
684 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
688 configDataValue ) != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
697 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
710 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
723 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
731 goto handle_failure;
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
740 configDataValue ) != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
749 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
753 configDataValue ) != eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length));
761
762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
767 configDataValue ) != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
776 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
788
789 /* QWLAN_HAL_CFG_FIXED_RATE */
790 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_FIXED_RATE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length));
802
803 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
804 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
816
817 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
831 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
832 tlvStruct->length = sizeof(tANI_U32);
833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
834 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
835 configDataValue ) != eSIR_SUCCESS)
836 {
837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
838 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
839 goto handle_failure;
840 }
841 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
842 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
844 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
848 configDataValue ) != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
857 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
865 goto handle_failure;
866 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
868 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
882
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
884 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
897 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
910 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
922
923 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
924 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
928 configDataValue ) != eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
937 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
950 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
963 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length);
975
976 /* QWLAN_HAL_CFG_STATS_PERIOD */
977 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
981 eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_STATS_PERIOD");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
990 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
994 eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1003 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1007 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001008 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1009 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1011 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1012 tlvStruct->length = sizeof(tANI_U32);
1013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1014 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1015 != eSIR_SUCCESS)
1016 {
1017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1018 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1019 goto handle_failure;
1020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1022 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1024 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1025 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1027 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1028 &strLength) != eSIR_SUCCESS)
1029 {
1030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1031 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1032 goto handle_failure;
1033 }
1034 tlvStruct->length = strLength;
1035 /* calculate the pad bytes to have the CFG in aligned format */
1036 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1037 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1039 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1041 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1042 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1044 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1045 &strLength) != eSIR_SUCCESS)
1046 {
1047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1048 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1049 goto handle_failure;
1050 }
1051 tlvStruct->length = strLength;
1052 /* calculate the pad bytes to have the CFG in aligned format */
1053 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1054 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001055 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1056 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1058 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1059 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1060 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1061 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1062 &strLength) != eSIR_SUCCESS)
1063 {
1064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1065 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1066 goto handle_failure;
1067 }
1068 tlvStruct->length = strLength;
1069 /* calculate the pad bytes to have the CFG in aligned format */
1070 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1071 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1073 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1075 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1076 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1077 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1078 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1079 &strLength) != eSIR_SUCCESS)
1080 {
1081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1082 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1083 goto handle_failure;
1084 }
1085 tlvStruct->length = strLength;
1086 /* calculate the pad bytes to have the CFG in aligned format */
1087 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1088 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001089 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1090 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1092 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1093 tlvStruct->length = sizeof(tANI_U32);
1094 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1095 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1096 != eSIR_SUCCESS)
1097 {
1098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1099 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1100 goto handle_failure;
1101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1103 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1105 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1106 tlvStruct->length = sizeof(tANI_U32);
1107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1108 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1109 != eSIR_SUCCESS)
1110 {
1111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1112 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1113 goto handle_failure;
1114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1116 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1118 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1119 tlvStruct->length = sizeof(tANI_U32);
1120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1121 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1122 != eSIR_SUCCESS)
1123 {
1124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1125 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1126 goto handle_failure;
1127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1131 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1139 goto handle_failure;
1140 }
1141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1144 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1152 goto handle_failure;
1153 }
1154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1157 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1165 goto handle_failure;
1166 }
1167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1174 != eSIR_SUCCESS)
1175 {
1176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1177 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1178 goto handle_failure;
1179 }
1180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1181 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1187 != eSIR_SUCCESS)
1188 {
1189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1190 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1191 goto handle_failure;
1192 }
1193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1196 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1204 goto handle_failure;
1205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1209 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1222 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1230 goto handle_failure;
1231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1235 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1236 * into FW, so the parameters are added here.
1237 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1239 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1240 tlvStruct->length = sizeof(tANI_U32);
1241 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1242 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1243 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1244 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1246 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1247 tlvStruct->length = sizeof(tANI_U32);
1248 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1249 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1250 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1251 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1253 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1254 tlvStruct->length = sizeof(tANI_U32);
1255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1256 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001259 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1260 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1261 tlvStruct->length = sizeof(tANI_U32);
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1264 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1265 + sizeof(tHalCfg) + tlvStruct->length) ;
1266
1267 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1268 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1269 tlvStruct->length = sizeof(tANI_U32);
1270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1271 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
1274
1275 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1276 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1277 tlvStruct->length = sizeof(tANI_U32);
1278 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1279 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1280 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1281 + sizeof(tHalCfg) + tlvStruct->length) ;
1282
1283 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1284 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1285 tlvStruct->length = sizeof(tANI_U32);
1286 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1287 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1288 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1289 + sizeof(tHalCfg) + tlvStruct->length) ;
1290
1291 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1292 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1296 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1297 + sizeof(tHalCfg) + tlvStruct->length) ;
1298
1299 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1300 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1301 tlvStruct->length = sizeof(tANI_U32);
1302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1303 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
1306
1307 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1308 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1309 tlvStruct->length = sizeof(tANI_U32);
1310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1311 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
1314
1315 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1316 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
1322
1323 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1324 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1325 tlvStruct->length = sizeof(tANI_U32);
1326 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1327 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
1330
1331 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1332 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1333 tlvStruct->length = sizeof(tANI_U32);
1334 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1335 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1337 + sizeof(tHalCfg) + tlvStruct->length) ;
1338
1339 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1340 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1344 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1345 + sizeof(tHalCfg) + tlvStruct->length) ;
1346
1347 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1348 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1349 tlvStruct->length = sizeof(tANI_U32);
1350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1351 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
1354
1355 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1356 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1357 tlvStruct->length = sizeof(tANI_U32);
1358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1359 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362
Wilson Tsaof8b37942013-09-06 10:49:00 -07001363 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1364 {
1365 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1366 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1370 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1371 + sizeof(tHalCfg) + tlvStruct->length) ;
1372
1373 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1374 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1375 tlvStruct->length = sizeof(tANI_U32);
1376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1377 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
1380
1381 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1382 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1383 tlvStruct->length = sizeof(tANI_U32);
1384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1385 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1386 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1387 + sizeof(tHalCfg) + tlvStruct->length) ;
1388
1389 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1390 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1391 tlvStruct->length = sizeof(tANI_U32);
1392 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1393 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1394 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1395 + sizeof(tHalCfg) + tlvStruct->length) ;
1396 }
1397
1398 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1399 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1400 tlvStruct->length = sizeof(tANI_U32);
1401 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1402 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1407 {
1408 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1409 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1414 + sizeof(tHalCfg) + tlvStruct->length) ;
1415 }
1416
1417 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1418 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1419 tlvStruct->length = sizeof(tANI_U32);
1420 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1421 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1422 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1423 + sizeof(tHalCfg) + tlvStruct->length) ;
1424
Jeff Johnson32d95a32012-09-10 13:15:23 -07001425 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001426 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1427 tlvStruct->length = sizeof(tANI_U32);
1428 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1429 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1430 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1431 wcnssCompiledApiVersion.minor,
1432 wcnssCompiledApiVersion.version,
1433 wcnssCompiledApiVersion.revision);
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436
Jeff Johnsond13512a2012-07-17 11:42:19 -07001437 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1438 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1442 configDataValue ) != eSIR_SUCCESS)
1443 {
1444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1445 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1446 goto handle_failure;
1447 }
1448
1449 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1450 + sizeof(tHalCfg) + tlvStruct->length) ;
1451 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1452 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1456 configDataValue ) != eSIR_SUCCESS)
1457 {
1458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1459 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1460 goto handle_failure;
1461 }
1462
1463 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1464 + sizeof(tHalCfg) + tlvStruct->length) ;
1465
1466 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1467 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1468 tlvStruct->length = sizeof(tANI_U32);
1469 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1470 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1471 != eSIR_SUCCESS)
1472 {
1473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1474 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1475 goto handle_failure;
1476 }
1477
1478 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1479 + sizeof(tHalCfg) + tlvStruct->length) ;
1480
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001481 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1482 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1483 tlvStruct->length = sizeof(tANI_U32);
1484 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1485 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1486 != eSIR_SUCCESS)
1487 {
1488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1489 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1490 goto handle_failure;
1491 }
1492
1493 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1494 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001495#ifdef WLAN_SOFTAP_VSTA_FEATURE
1496 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1497 tlvStruct->length = sizeof(tANI_U32);
1498 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1499 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1500 != eSIR_SUCCESS)
1501 {
1502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1503 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1504 goto handle_failure;
1505 }
1506
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509#endif
1510
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001511 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1512 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1513 tlvStruct->length = sizeof(tANI_U32);
1514 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1515
1516 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1517 != eSIR_SUCCESS)
1518 {
1519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1520 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1521 goto handle_failure;
1522 }
1523
1524 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1525 + sizeof(tHalCfg) + tlvStruct->length) ;
1526
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301527/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1528 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1529 tlvStruct->length = sizeof(tANI_U32);
1530 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1531 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1532 configDataValue ) != eSIR_SUCCESS)
1533 {
1534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1535 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1536 goto handle_failure;
1537 }
1538
1539 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1540 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301541#ifdef FEATURE_WLAN_TDLS
1542 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1543 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1544 tlvStruct->length = sizeof(tANI_U32);
1545 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1546 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1547 configDataValue ) != eSIR_SUCCESS)
1548 {
1549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1550 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1551 goto handle_failure;
1552 }
1553 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1554 + sizeof(tHalCfg) + tlvStruct->length) ;
1555
1556 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1557 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1558 tlvStruct->length = sizeof(tANI_U32);
1559 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1560 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1561 configDataValue ) != eSIR_SUCCESS)
1562 {
1563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1564 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1565 goto handle_failure;
1566 }
1567 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1568 + sizeof(tHalCfg) + tlvStruct->length) ;
1569 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1570 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1578 goto handle_failure;
1579 }
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301595 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1600 configDataValue ) != eSIR_SUCCESS)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1604 goto handle_failure;
1605 }
1606 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1607 + sizeof(tHalCfg) + tlvStruct->length) ;
1608
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301609#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301610
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001611 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1612 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1613 tlvStruct->length = sizeof(tANI_U32);
1614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1615 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1616 configDataValue ) != eSIR_SUCCESS)
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1620 goto handle_failure;
1621 }
1622
1623 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1624 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001625
1626 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1627 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1628 tlvStruct->length = sizeof(tANI_U32);
1629 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1630 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1631 != eSIR_SUCCESS)
1632 {
1633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1634 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1635 goto handle_failure;
1636 }
1637 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1638 + sizeof(tHalCfg) + tlvStruct->length));
1639
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301640 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1641 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1642 tlvStruct->length = sizeof(tANI_U32);
1643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1644 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1645 configDataValue ) != eSIR_SUCCESS)
1646 {
1647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1648 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1649 goto handle_failure;
1650 }
1651
1652 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1653 + sizeof(tHalCfg) + tlvStruct->length) ;
1654
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301655 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1656 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1657 tlvStruct->length = sizeof(tANI_U32);
1658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1659 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1660 configDataValue ) != eSIR_SUCCESS)
1661 {
1662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1663 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1664 goto handle_failure;
1665 }
1666 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1667 + sizeof(tHalCfg) + tlvStruct->length) ;
1668
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301669 /* QWLAN_HAL_CFG_ATH_DISABLE */
1670 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1671 tlvStruct->length = sizeof(tANI_U32);
1672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1673 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1674 configDataValue ) != eSIR_SUCCESS)
1675 {
1676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1677 "Failed to get value for WNI_CFG_ATH_DISABLE");
1678 goto handle_failure;
1679 }
1680 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1681 + sizeof(tHalCfg) + tlvStruct->length) ;
1682
c_hpothu6d7dc922013-12-02 12:36:41 +05301683 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1684 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1685 tlvStruct->length = sizeof(tANI_U32);
1686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1687 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1688 configDataValue ) != eSIR_SUCCESS)
1689 {
1690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1691 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1692 goto handle_failure;
1693 }
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696
1697 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1698 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1699 tlvStruct->length = sizeof(tANI_U32);
1700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1701 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1702 configDataValue ) != eSIR_SUCCESS)
1703 {
1704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1705 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1706 goto handle_failure;
1707 }
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710
1711 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1712 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1716 configDataValue ) != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1720 goto handle_failure;
1721 }
1722 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1723 + sizeof(tHalCfg) + tlvStruct->length) ;
1724
1725 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1726 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1727 tlvStruct->length = sizeof(tANI_U32);
1728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1729 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1730 configDataValue ) != eSIR_SUCCESS)
1731 {
1732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1733 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1734 goto handle_failure;
1735 }
1736 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1737 + sizeof(tHalCfg) + tlvStruct->length) ;
1738
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301739 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1740 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1741 tlvStruct->length = sizeof(tANI_U32);
1742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1743 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1744 configDataValue ) != eSIR_SUCCESS)
1745 {
1746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1747 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1748 goto handle_failure;
1749 }
1750 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1751 + sizeof(tHalCfg) + tlvStruct->length) ;
1752
1753 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1754 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1755 tlvStruct->length = sizeof(tANI_U32);
1756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1757 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1758 configDataValue ) != eSIR_SUCCESS)
1759 {
1760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1761 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1762 goto handle_failure;
1763 }
1764 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1765 + sizeof(tHalCfg) + tlvStruct->length) ;
1766
1767 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1768 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1769 tlvStruct->length = sizeof(tANI_U32);
1770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1771 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1772 configDataValue ) != eSIR_SUCCESS)
1773 {
1774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1775 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1776 goto handle_failure;
1777 }
1778 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1779 + sizeof(tHalCfg) + tlvStruct->length) ;
1780
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001781 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1782 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1790 goto handle_failure;
1791 }
1792 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1793 + sizeof(tHalCfg) + tlvStruct->length) ;
1794
c_hpothu5bd1ae42014-03-07 20:28:22 +05301795 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1796 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1797 tlvStruct->length = sizeof(tANI_U32);
1798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1799
1800 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1801 configDataValue ) != eSIR_SUCCESS)
1802 {
1803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1804 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1805 goto handle_failure;
1806 }
1807
1808 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1809 + sizeof(tHalCfg) + tlvStruct->length) ;
1810
1811 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1812 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1813 tlvStruct->length = sizeof(tANI_U32);
1814 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1815
1816 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1817 configDataValue ) != eSIR_SUCCESS)
1818 {
1819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1820 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1821 goto handle_failure;
1822 }
1823
1824 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1825 + sizeof(tHalCfg) + tlvStruct->length) ;
1826
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001828#ifdef WLAN_DEBUG
1829 {
1830 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1832 "****** Dumping CFG TLV ***** ");
1833 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1834 {
1835 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1836 "%02x %02x %02x %02x %02x %02x %02x %02x",
1837 tlvStructStart[i],
1838 tlvStructStart[i+1],
1839 tlvStructStart[i+2],
1840 tlvStructStart[i+3],
1841 tlvStructStart[i+4],
1842 tlvStructStart[i+5],
1843 tlvStructStart[i+6],
1844 tlvStructStart[i+7]);
1845 }
1846 /* Dump the bytes in the last line*/
1847 for (; i < wdiStartParams->usConfigBufferLen; i++)
1848 {
1849 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1850 "%02x ",tlvStructStart[i]);
1851 }
1852 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1853 "**************************** ");
1854 }
1855#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001857handle_failure:
1858 vos_mem_free(configParam);
1859 return VOS_STATUS_E_FAILURE;
1860}
Jeff Johnson295189b2012-06-20 16:38:30 -07001861/*
1862 * FUNCTION: WDA_wdiCompleteCB
1863 * call the voss call back function
1864 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001865void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001866{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001867 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1868 tWDA_CbContext *wdaContext;
1869
1870 if(NULL == pWdaParams)
1871 {
1872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001873 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001874 VOS_ASSERT(0) ;
1875 return ;
1876 }
1877
1878 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1879
Jeff Johnson295189b2012-06-20 16:38:30 -07001880 if (NULL == wdaContext)
1881 {
1882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001883 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001884 return ;
1885 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001886
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001888 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001892 vos_mem_free(pWdaParams);
1893
Jeff Johnson295189b2012-06-20 16:38:30 -07001894 if(WDI_STATUS_SUCCESS != status)
1895 {
1896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1897 "WDI stop callback returned failure" );
1898 VOS_ASSERT(0) ;
1899 }
1900 else
1901 {
1902 wdaContext->wdaState = WDA_STOP_STATE;
1903 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001904
Leo Chang9d76f622013-08-23 16:34:52 -07001905 /* FTM Driver stop procedure should be synced.
1906 * Stop and Close will happen on same context */
1907 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1908 {
1909 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1910 {
1911 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1912 "%s: FTM Stop Event Set Fail", __func__);
1913 VOS_ASSERT(0);
1914 }
1915 }
1916
Jeff Johnson295189b2012-06-20 16:38:30 -07001917 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001918 vos_WDAComplete_cback(wdaContext->pVosContext);
1919
Jeff Johnson295189b2012-06-20 16:38:30 -07001920 return ;
1921}
Jeff Johnson295189b2012-06-20 16:38:30 -07001922/*
1923 * FUNCTION: WDA_stop
1924 * call WDI_stop
1925 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001926VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1927{
1928 WDI_Status wdiStatus;
1929 VOS_STATUS status = VOS_STATUS_SUCCESS;
1930 WDI_StopReqParamsType *wdiStopReq;
1931 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001932 tWDA_ReqParams *pWdaParams ;
1933
Jeff Johnson295189b2012-06-20 16:38:30 -07001934 if (NULL == pWDA)
1935 {
1936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001937 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001938 VOS_ASSERT(0);
1939 return VOS_STATUS_E_FAILURE;
1940 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001941 if (pWDA->wdiFailed == true)
1942 {
1943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001944 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001945 return VOS_STATUS_E_ALREADY;
1946 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001947
Jeff Johnson295189b2012-06-20 16:38:30 -07001948 /* FTM mode stay START_STATE */
1949 if( (WDA_READY_STATE != pWDA->wdaState) &&
1950 (WDA_INIT_STATE != pWDA->wdaState) &&
1951 (WDA_START_STATE != pWDA->wdaState) )
1952 {
1953 VOS_ASSERT(0);
1954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001955 wdiStopReq = (WDI_StopReqParamsType *)
1956 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1957 if(NULL == wdiStopReq)
1958 {
1959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001961 VOS_ASSERT(0);
1962 return VOS_STATUS_E_NOMEM;
1963 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001964
Jeff Johnson295189b2012-06-20 16:38:30 -07001965 wdiStopReq->wdiStopReason = reason;
1966 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001967
1968 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1969 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001970 {
1971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001973 VOS_ASSERT(0);
1974 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001975 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001976 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001977
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001978 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1979 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001980 {
1981 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001982 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001983 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001984
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001985 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1986 pWdaParams->wdaMsgParam = NULL;
1987 pWdaParams->pWdaContext = pWDA;
1988
Jeff Johnson295189b2012-06-20 16:38:30 -07001989 /* call WDI stop */
1990 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001991 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1992
Jeff Johnson295189b2012-06-20 16:38:30 -07001993 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1994 {
1995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1996 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1998 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 status = VOS_STATUS_E_FAILURE;
2000 }
Leo Chang9d76f622013-08-23 16:34:52 -07002001
2002 /* FTM Driver stop procedure should be synced.
2003 * Stop and Close will happen on same context */
2004 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2005 {
2006 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2007 WDI_RESPONSE_TIMEOUT);
2008 if (status != VOS_STATUS_SUCCESS)
2009 {
2010 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2011 "%s: FTM Stop Timepoout", __func__);
2012 VOS_ASSERT(0);
2013 vos_event_reset(&pWDA->ftmStopDoneEvent);
2014 }
2015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 return status;
2017}
Jeff Johnson295189b2012-06-20 16:38:30 -07002018/*
2019 * FUNCTION: WDA_close
2020 * call WDI_close and free the WDA context
2021 */
2022VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2023{
Jeff Johnson43971f52012-07-17 12:26:56 -07002024 VOS_STATUS status = VOS_STATUS_SUCCESS;
2025 WDI_Status wstatus;
2026 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002028 if (NULL == wdaContext)
2029 {
2030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002031 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002032 return VOS_STATUS_E_FAILURE;
2033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2035 (WDA_STOP_STATE != wdaContext->wdaState))
2036 {
2037 VOS_ASSERT(0);
2038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002039 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002040 wstatus = WDI_Close();
2041 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002042 {
2043 status = VOS_STATUS_E_FAILURE;
2044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002045 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002047 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2048 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002049 {
2050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002051 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002052 status = VOS_STATUS_E_FAILURE;
2053 }
2054
Jeff Johnson43971f52012-07-17 12:26:56 -07002055 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002056 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 {
2058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002059 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 status = VOS_STATUS_E_FAILURE;
2061 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002062 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002063 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 {
2065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002066 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002067 status = VOS_STATUS_E_FAILURE;
2068 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002069 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002070 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002071 {
2072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002073 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 status = VOS_STATUS_E_FAILURE;
2075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002077 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002078 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002079 {
2080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2081 "error in WDA close " );
2082 status = VOS_STATUS_E_FAILURE;
2083 }
2084 return status;
2085}
Jeff Johnson295189b2012-06-20 16:38:30 -07002086/*
2087 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2088 * returns 1 if the compiled version is greater than or equal to the input version
2089 */
2090
2091uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2092{
2093 VOS_STATUS status = VOS_STATUS_SUCCESS;
2094 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2095 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002097 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2098 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2099 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2100 (compiledVersion.revision >= revision)))
2101 return 1;
2102 else
2103 return 0;
2104}
Jeff Johnson295189b2012-06-20 16:38:30 -07002105/*
2106 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2107 * returns 1 if the compiled version is greater than or equal to the input version
2108 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002109uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2110{
2111 VOS_STATUS status = VOS_STATUS_SUCCESS;
2112 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2113 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002114 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2116 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2117 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2118 (reportedVersion.revision >= revision)))
2119 return 1;
2120 else
2121 return 0;
2122}
Jeff Johnson295189b2012-06-20 16:38:30 -07002123/*
2124 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2125 * Returns the version of the WCNSS WLAN API with which the HOST
2126 * device driver was compiled
2127 */
2128VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2129 tSirVersionType *pVersion)
2130{
2131 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002132 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002133 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 if ((NULL == pvosGCtx) || (NULL == pVersion))
2135 {
2136 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002137 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 VOS_ASSERT(0);
2139 return VOS_STATUS_E_FAILURE;
2140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2142 if (NULL == pWDA )
2143 {
2144 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002145 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002146 VOS_ASSERT(0);
2147 return VOS_STATUS_E_FAILURE;
2148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002149 *pVersion = pWDA->wcnssWlanCompiledVersion;
2150 return VOS_STATUS_SUCCESS;
2151}
Jeff Johnson295189b2012-06-20 16:38:30 -07002152/*
2153 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2154 * Returns the version of the WCNSS WLAN API with which the WCNSS
2155 * device driver was compiled
2156 */
2157VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2158 tSirVersionType *pVersion)
2159{
2160 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002161 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002162 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002163 if ((NULL == pvosGCtx) || (NULL == pVersion))
2164 {
2165 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002166 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 VOS_ASSERT(0);
2168 return VOS_STATUS_E_FAILURE;
2169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002170 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2171 if (NULL == pWDA )
2172 {
2173 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002174 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 VOS_ASSERT(0);
2176 return VOS_STATUS_E_FAILURE;
2177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002178 *pVersion = pWDA->wcnssWlanReportedVersion;
2179 return VOS_STATUS_SUCCESS;
2180}
Jeff Johnson295189b2012-06-20 16:38:30 -07002181/*
2182 * FUNCTION: WDA_GetWcnssSoftwareVersion
2183 * Returns the WCNSS Software version string
2184 */
2185VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2186 tANI_U8 *pVersion,
2187 tANI_U32 versionBufferSize)
2188{
2189 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002191 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002192 if ((NULL == pvosGCtx) || (NULL == pVersion))
2193 {
2194 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002195 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 VOS_ASSERT(0);
2197 return VOS_STATUS_E_FAILURE;
2198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2200 if (NULL == pWDA )
2201 {
2202 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002203 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 VOS_ASSERT(0);
2205 return VOS_STATUS_E_FAILURE;
2206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002207 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2208 return VOS_STATUS_SUCCESS;
2209}
Jeff Johnson295189b2012-06-20 16:38:30 -07002210/*
2211 * FUNCTION: WDA_GetWcnssHardwareVersion
2212 * Returns the WCNSS Hardware version string
2213 */
2214VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2215 tANI_U8 *pVersion,
2216 tANI_U32 versionBufferSize)
2217{
2218 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002220 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002221 if ((NULL == pvosGCtx) || (NULL == pVersion))
2222 {
2223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002224 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 VOS_ASSERT(0);
2226 return VOS_STATUS_E_FAILURE;
2227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2229 if (NULL == pWDA )
2230 {
2231 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002232 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 VOS_ASSERT(0);
2234 return VOS_STATUS_E_FAILURE;
2235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2237 return VOS_STATUS_SUCCESS;
2238}
Jeff Johnson295189b2012-06-20 16:38:30 -07002239/*
2240 * FUNCTION: WDA_WniCfgDnld
2241 * Trigger CFG Download
2242 */
2243VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2244{
2245 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 v_VOID_t *pFileImage = NULL;
2248 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002249 v_VOID_t *pCfgBinary = NULL;
2250 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002251 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002252
Jeff Johnson295189b2012-06-20 16:38:30 -07002253 if (NULL == pMac )
2254 {
2255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002256 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002257 VOS_ASSERT(0);
2258 return VOS_STATUS_E_FAILURE;
2259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002260 /* get the number of bytes in the CFG Binary... */
2261 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2262 &cbFileImageSize );
2263 if ( VOS_STATUS_E_NOMEM != vosStatus )
2264 {
2265 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2266 "Error obtaining binary size" );
2267 goto fail;
2268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002269 // malloc a buffer to read in the Configuration binary file.
2270 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002271 if ( NULL == pFileImage )
2272 {
2273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2274 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2275 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 vosStatus = VOS_STATUS_E_NOMEM;
2277 goto fail;
2278 }
2279
2280 /* Get the entire CFG file image... */
2281 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2282 &cbFileImageSize );
2283 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2284 {
2285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2286 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2287 cbFileImageSize );
2288 goto fail;
2289 }
2290
2291 /*
2292 * Validate the binary image. This function will return a pointer
2293 * and length where the CFG binary is located within the binary image file.
2294 */
2295 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2296 &pCfgBinary, &cbCfgBinarySize );
2297 if ( VOS_FALSE == bStatus )
2298 {
2299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2300 "Error: Cannot find STA CFG in binary image file" );
2301 vosStatus = VOS_STATUS_E_FAILURE;
2302 goto fail;
2303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 /*
2305 * TODO: call the config download function
2306 * for now calling the existing cfg download API
2307 */
2308 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002309 vosStatus = VOS_STATUS_SUCCESS;
2310
2311 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002312
2313fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002314 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002315 return vosStatus;
2316}
Jeff Johnson295189b2012-06-20 16:38:30 -07002317/* -----------------------------------------------------------------
2318 * WDI interface
2319 * -----------------------------------------------------------------
2320 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002321/*
2322 * FUNCTION: WDA_suspendDataTxCallback
2323 * call back function called from TL after suspend Transmission
2324 */
2325VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2326 v_U8_t* ucSTAId,
2327 VOS_STATUS vosStatus)
2328{
2329 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002331 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 if (NULL == pWDA )
2333 {
2334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002335 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 VOS_ASSERT(0);
2337 return VOS_STATUS_E_FAILURE;
2338 }
2339 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2340 {
2341 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2342 }
2343 else
2344 {
2345 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 /* Trigger the event to bring the WDA TL suspend function to come
2348 * out of wait*/
2349 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2350 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2351 {
2352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002353 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002355 /* If TL suspended had timedout before this callback was called, resume back
2356 * TL.*/
2357 if (pWDA->txSuspendTimedOut)
2358 {
2359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002360 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 WDA_ResumeDataTx(pWDA);
2362 pWDA->txSuspendTimedOut = FALSE;
2363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002364 return VOS_STATUS_SUCCESS;
2365}
Jeff Johnson295189b2012-06-20 16:38:30 -07002366/*
2367 * FUNCTION: WDA_suspendDataTx
2368 * Update TL to suspend the data Transmission
2369 */
2370VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2371{
2372 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2373 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002374
2375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002376 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002377 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002378 if (pWDA->txSuspendTimedOut)
2379 {
2380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002381 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002382 return status;
2383 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002384 /* Reset the event to be not signalled */
2385 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2386 if(!VOS_IS_STATUS_SUCCESS(status))
2387 {
2388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002389 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 return VOS_STATUS_E_FAILURE;
2391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002393 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 WDA_SuspendDataTxCallback);
2395 if(status != VOS_STATUS_SUCCESS)
2396 {
2397 return status;
2398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 /* Wait for the event to be set by the TL, to get the response of
2400 * suspending the TX queues, this event should be set by the Callback
2401 * function called by TL*/
2402 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2403 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2404 if(!VOS_IS_STATUS_SUCCESS(status))
2405 {
2406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2407 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002408 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 /* Set this flag to true when TL suspend times out, so that when TL
2410 * suspend eventually happens and calls the callback, TL can be resumed
2411 * right away by looking at this flag when true.*/
2412 pWDA->txSuspendTimedOut = TRUE;
2413 }
2414 else
2415 {
2416 pWDA->txSuspendTimedOut = FALSE;
2417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2419 {
2420 status = VOS_STATUS_SUCCESS;
2421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 return status;
2423}
Jeff Johnson295189b2012-06-20 16:38:30 -07002424/*
2425 * FUNCTION: WDA_resumeDataTx
2426 * Update TL to resume the data Transmission
2427 */
2428VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2429{
2430 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002431
2432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002433 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002434
2435 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 return status;
2437}
Jeff Johnson295189b2012-06-20 16:38:30 -07002438/*
2439 * FUNCTION: WDA_InitScanReqCallback
2440 * Trigger Init SCAN callback
2441 */
2442void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2443{
2444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2445 tWDA_CbContext *pWDA;
2446 tInitScanParams *pWDA_ScanParam ;
2447 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002449 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 if(NULL == pWdaParams)
2451 {
2452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002453 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 VOS_ASSERT(0) ;
2455 return ;
2456 }
2457 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2458 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002459 if(NULL == pWDA_ScanParam)
2460 {
2461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002462 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002463 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2465 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 return ;
2467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002468 if(WDI_STATUS_SUCCESS != wdiStatus)
2469 {
2470 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002471 if(VOS_STATUS_SUCCESS != status)
2472 {
2473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 }
2476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 /* free WDI command buffer */
2478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002480
Jeff Johnson295189b2012-06-20 16:38:30 -07002481
2482 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002483 /* without converting the Status to Failure or Success Just
2484 pass the same status to lim */
2485 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 /* send SCAN RSP message back to PE */
2487 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 return ;
2489}
2490
2491/*
2492 * FUNCTION: WDA_ProcessInitScanReq
2493 * Trigger Init SCAN in DAL
2494 */
2495VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2496 tInitScanParams *initScanParams)
2497{
2498 WDI_Status status = WDI_STATUS_SUCCESS ;
2499 WDI_InitScanReqParamsType *wdiInitScanParam =
2500 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2501 sizeof(WDI_InitScanReqParamsType)) ;
2502 tWDA_ReqParams *pWdaParams;
2503 tANI_U8 i = 0;
2504
2505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 if(NULL == wdiInitScanParam)
2508 {
2509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002510 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 VOS_ASSERT(0);
2512 return VOS_STATUS_E_NOMEM;
2513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002514 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2515 if(NULL == pWdaParams)
2516 {
2517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 VOS_ASSERT(0);
2520 vos_mem_free(wdiInitScanParam);
2521 return VOS_STATUS_E_NOMEM;
2522 }
2523
2524 /* Copy init Scan params to WDI structure */
2525 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2526 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2527 sizeof(tSirMacAddr)) ;
2528 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2529 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2530 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002531 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2532 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2534 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002535 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2536 {
2537 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2538 initScanParams->scanEntry.bssIdx[i] ;
2539 }
2540
2541 /* if Frame length, copy macMgmtHdr or WDI structure */
2542 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2543 {
2544 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2545 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2546 }
2547 wdiInitScanParam->wdiReqStatusCB = NULL ;
2548
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 /* Store Init Req pointer, as this will be used for response */
2550 pWdaParams->pWdaContext = pWDA;
2551 pWdaParams->wdaMsgParam = initScanParams;
2552 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 /* first try to suspend TX */
2554 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 if(WDI_STATUS_SUCCESS != status)
2556 {
2557 goto handleWdiFailure;
2558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 /* call DAL API to pass init scan request to DAL */
2560 status = WDI_InitScanReq(wdiInitScanParam,
2561 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 if(IS_WDI_STATUS_FAILURE(status))
2563 {
2564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2565 "error in WDA Init Scan, Resume Tx " );
2566 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 VOS_ASSERT(0) ;
2568
2569 goto handleWdiFailure;
2570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002572handleWdiFailure:
2573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2574 "Failure in WDI Api, free all the memory " );
2575 /* free WDI command buffer */
2576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2577 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 /* send Failure to PE */
2579 initScanParams->status = eSIR_FAILURE ;
2580 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 return CONVERT_WDI2VOS_STATUS(status) ;
2582}
2583
Jeff Johnson295189b2012-06-20 16:38:30 -07002584/*
2585 * FUNCTION: WDA_StartScanReqCallback
2586 * send Start SCAN RSP back to PE
2587 */
2588void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2589 void* pUserData)
2590{
2591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2592 tWDA_CbContext *pWDA;
2593 tStartScanParams *pWDA_ScanParam;
2594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002595 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 if(NULL == pWdaParams)
2597 {
2598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002599 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 VOS_ASSERT(0) ;
2601 return ;
2602 }
2603 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2604 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 if(NULL == pWDA_ScanParam)
2606 {
2607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002608 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002610 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 return ;
2612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2614 {
2615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002616 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002618 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 return ;
2620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2622 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002623
Jeff Johnson295189b2012-06-20 16:38:30 -07002624
2625 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002626 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 /* send SCAN RSP message back to PE */
2628 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 return ;
2630}
2631
Jeff Johnson295189b2012-06-20 16:38:30 -07002632/*
2633 * FUNCTION: WDA_ProcessStartScanReq
2634 * Trigger start SCAN in WDI
2635 */
2636VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2637 tStartScanParams *startScanParams)
2638{
2639 WDI_Status status = WDI_STATUS_SUCCESS;
2640 WDI_StartScanReqParamsType *wdiStartScanParams =
2641 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2642 sizeof(WDI_StartScanReqParamsType)) ;
2643 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002645 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 if(NULL == wdiStartScanParams)
2647 {
2648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 VOS_ASSERT(0);
2651 return VOS_STATUS_E_NOMEM;
2652 }
2653 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2654 if(NULL == pWdaParams)
2655 {
2656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 VOS_ASSERT(0);
2659 vos_mem_free(wdiStartScanParams);
2660 return VOS_STATUS_E_NOMEM;
2661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 /* Copy init Scan params to WDI structure */
2663 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2664 wdiStartScanParams->wdiReqStatusCB = NULL ;
2665
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 /* Store Init Req pointer, as this will be used for response */
2667 /* store Params pass it to WDI */
2668 pWdaParams->pWdaContext = pWDA;
2669 pWdaParams->wdaMsgParam = startScanParams;
2670 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 /* call DAL API to pass init scan request to DAL */
2672 status = WDI_StartScanReq(wdiStartScanParams,
2673 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 /* failure returned by WDI API */
2675 if(IS_WDI_STATUS_FAILURE(status))
2676 {
2677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2678 "Failure in Start Scan WDI API, free all the memory "
2679 "It should be due to previous abort scan." );
2680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2681 vos_mem_free(pWdaParams) ;
2682 startScanParams->status = eSIR_FAILURE ;
2683 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2684 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 return CONVERT_WDI2VOS_STATUS(status) ;
2686}
Jeff Johnson295189b2012-06-20 16:38:30 -07002687/*
2688 * FUNCTION: WDA_EndScanReqCallback
2689 * END SCAN callback
2690 */
2691void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2692{
2693 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2694 tWDA_CbContext *pWDA;
2695 tEndScanParams *endScanParam;
2696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002697 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 if(NULL == pWdaParams)
2699 {
2700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 VOS_ASSERT(0) ;
2703 return ;
2704 }
2705 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2706 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 if(NULL == endScanParam)
2708 {
2709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002710 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2713 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 return ;
2715 }
2716
2717 /* Free WDI command buffer */
2718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2719 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002721 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 /* send response back to PE */
2723 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2724 return ;
2725}
2726
Jeff Johnson295189b2012-06-20 16:38:30 -07002727/*
2728 * FUNCTION: WDA_ProcessEndScanReq
2729 * Trigger END SCAN in WDI
2730 */
2731VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2732 tEndScanParams *endScanParams)
2733{
2734 WDI_Status status = WDI_STATUS_SUCCESS;
2735 WDI_EndScanReqParamsType *wdiEndScanParams =
2736 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2737 sizeof(WDI_EndScanReqParamsType)) ;
2738 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002740 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 if(NULL == wdiEndScanParams)
2742 {
2743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002744 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 VOS_ASSERT(0);
2746 return VOS_STATUS_E_NOMEM;
2747 }
2748 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2749 if(NULL == pWdaParams)
2750 {
2751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002752 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 VOS_ASSERT(0);
2754 vos_mem_free(wdiEndScanParams);
2755 return VOS_STATUS_E_NOMEM;
2756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 /* Copy init Scan params to WDI structure */
2758 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2759 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 /* Store Init Req pointer, as this will be used for response */
2761 /* store Params pass it to WDI */
2762 pWdaParams->pWdaContext = pWDA;
2763 pWdaParams->wdaMsgParam = endScanParams;
2764 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 /* call DAL API to pass init scan request to DAL */
2766 status = WDI_EndScanReq(wdiEndScanParams,
2767 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 if(IS_WDI_STATUS_FAILURE(status))
2769 {
2770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2771 "Failure in End Scan WDI API, free all the memory "
2772 "It should be due to previous abort scan." );
2773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2774 vos_mem_free(pWdaParams) ;
2775 endScanParams->status = eSIR_FAILURE ;
2776 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 return CONVERT_WDI2VOS_STATUS(status) ;
2779}
Jeff Johnson295189b2012-06-20 16:38:30 -07002780/*
2781 * FUNCTION: WDA_FinishScanReqCallback
2782 * Trigger Finish SCAN callback
2783 */
2784void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2785{
2786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2787 tWDA_CbContext *pWDA;
2788 tFinishScanParams *finishScanParam;
2789 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002791 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 if(NULL == pWdaParams)
2793 {
2794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002795 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 VOS_ASSERT(0) ;
2797 return ;
2798 }
2799
2800 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2801 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 if(NULL == finishScanParam)
2803 {
2804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002805 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002806 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2808 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002809 return ;
2810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2812 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 /*
2814 * Now Resume TX, if we reached here means, TX is already suspended, we
2815 * have to resume it unconditionaly
2816 */
2817 status = WDA_ResumeDataTx(pWDA) ;
2818
2819 if(VOS_STATUS_SUCCESS != status)
2820 {
2821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002822 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002823 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002824 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2826 return ;
2827}
Jeff Johnson295189b2012-06-20 16:38:30 -07002828/*
2829 * FUNCTION: WDA_ProcessFinshScanReq
2830 * Trigger Finish SCAN in WDI
2831 */
2832VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2833 tFinishScanParams *finishScanParams)
2834{
2835 WDI_Status status = WDI_STATUS_SUCCESS;
2836 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2837 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2838 sizeof(WDI_FinishScanReqParamsType)) ;
2839 tWDA_ReqParams *pWdaParams ;
2840 tANI_U8 i = 0;
2841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 if(NULL == wdiFinishScanParams)
2844 {
2845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 VOS_ASSERT(0);
2848 return VOS_STATUS_E_NOMEM;
2849 }
2850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2851 if(NULL == pWdaParams)
2852 {
2853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 VOS_ASSERT(0);
2856 vos_mem_free(wdiFinishScanParams);
2857 return VOS_STATUS_E_NOMEM;
2858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 /* Copy init Scan params to WDI structure */
2860 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2861 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2862 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2864 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2865 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2866 finishScanParams->frameLength ;
2867 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2868 finishScanParams->currentOperChannel ;
2869 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2870 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2871 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002872 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2873 {
2874 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2875 finishScanParams->scanEntry.bssIdx[i] ;
2876 }
2877
2878
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 /* if Frame length, copy macMgmtHdr ro WDI structure */
2880 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2881 {
2882 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2883 &finishScanParams->macMgmtHdr,
2884 sizeof(WDI_MacMgmtHdr)) ;
2885 }
2886 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002887 /* Store Init Req pointer, as this will be used for response */
2888 /* store Params pass it to WDI */
2889 pWdaParams->pWdaContext = pWDA;
2890 pWdaParams->wdaMsgParam = finishScanParams;
2891 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 /* call DAL API to pass init scan request to DAL */
2893 status = WDI_FinishScanReq(wdiFinishScanParams,
2894 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002895
Jeff Johnson295189b2012-06-20 16:38:30 -07002896
2897 /*
2898 * WDI API returns failure..
2899 */
2900 if(IS_WDI_STATUS_FAILURE( status))
2901 {
2902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2903 "Failure in Finish Scan WDI API, free all the memory " );
2904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2905 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 finishScanParams->status = eSIR_FAILURE ;
2907 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 return CONVERT_WDI2VOS_STATUS(status) ;
2910}
Jeff Johnson295189b2012-06-20 16:38:30 -07002911/*---------------------------------------------------------------------
2912 * ASSOC API's
2913 *---------------------------------------------------------------------
2914 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002915/*
2916 * FUNCTION: WDA_JoinReqCallback
2917 * Trigger Init SCAN callback
2918 */
2919void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2920{
2921 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2922 tWDA_CbContext *pWDA;
2923 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002925 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 if(NULL == pWdaParams)
2927 {
2928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002929 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 VOS_ASSERT(0) ;
2931 return ;
2932 }
2933 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2934 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2936 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 /* reset macBSSID */
2938 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 /* reset macSTASelf */
2940 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002941 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 return ;
2944}
Jeff Johnson295189b2012-06-20 16:38:30 -07002945/*
2946 * FUNCTION: WDA_ProcessJoinReq
2947 * Trigger Join REQ in WDI
2948 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002949VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2950 tSwitchChannelParams* joinReqParam)
2951{
2952 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 WDI_JoinReqParamsType *wdiJoinReqParam =
2954 (WDI_JoinReqParamsType *)vos_mem_malloc(
2955 sizeof(WDI_JoinReqParamsType)) ;
2956 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002958 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 if(NULL == wdiJoinReqParam)
2960 {
2961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002962 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002964 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 return VOS_STATUS_E_NOMEM;
2966 }
2967 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2968 if(NULL == pWdaParams)
2969 {
2970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002971 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 VOS_ASSERT(0);
2973 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002974 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 return VOS_STATUS_E_NOMEM;
2976 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002977
2978 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2979 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2980 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2981 {
2982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2983 "%s: received join request when BSSID or self-STA is NULL "
2984 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002985 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002986 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2987 VOS_ASSERT(0);
2988 vos_mem_free(wdiJoinReqParam);
2989 vos_mem_free(pWdaParams);
2990 joinReqParam->status = eSIR_FAILURE ;
2991 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2992 return VOS_STATUS_E_INVAL;
2993 }
2994
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 /* copy the BSSID for pWDA */
2996 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2997 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2999 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3001 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003002#ifdef WLAN_FEATURE_VOWIFI
3003 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3004 joinReqParam->maxTxPower ;
3005#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3007 joinReqParam->localPowerConstraint ;
3008#endif
3009 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3010 joinReqParam->secondaryChannelOffset ;
3011 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3012
3013 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 /* Store Init Req pointer, as this will be used for response */
3015 /* store Params pass it to WDI */
3016 pWdaParams->pWdaContext = pWDA;
3017 pWdaParams->wdaMsgParam = joinReqParam;
3018 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003019 status = WDI_JoinReq(wdiJoinReqParam,
3020 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 if(IS_WDI_STATUS_FAILURE(status))
3022 {
3023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3024 "Failure in Join WDI API, free all the memory " );
3025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3026 vos_mem_free(pWdaParams) ;
3027 joinReqParam->status = eSIR_FAILURE ;
3028 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 return CONVERT_WDI2VOS_STATUS(status) ;
3031}
Jeff Johnson295189b2012-06-20 16:38:30 -07003032/*
3033 * FUNCTION: WDA_SwitchChannelReqCallback
3034 * send Switch channel RSP back to PE
3035 */
3036void WDA_SwitchChannelReqCallback(
3037 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3038{
3039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3040 tWDA_CbContext *pWDA;
3041 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003043 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 if(NULL == pWdaParams)
3045 {
3046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003047 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 VOS_ASSERT(0) ;
3049 return ;
3050 }
3051 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3052 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3053
3054#ifdef WLAN_FEATURE_VOWIFI
3055 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3056#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3058 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003060 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 return ;
3063}
Jeff Johnson295189b2012-06-20 16:38:30 -07003064/*
3065 * FUNCTION: WDA_ProcessChannelSwitchReq
3066 * Request to WDI to switch channel REQ params.
3067 */
3068VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3069 tSwitchChannelParams *pSwitchChanParams)
3070{
3071 WDI_Status status = WDI_STATUS_SUCCESS ;
3072 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3073 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3074 sizeof(WDI_SwitchChReqParamsType)) ;
3075 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003077 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 if(NULL == wdiSwitchChanParam)
3079 {
3080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 VOS_ASSERT(0);
3083 return VOS_STATUS_E_NOMEM;
3084 }
3085 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3086 if(NULL == pWdaParams)
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003089 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 VOS_ASSERT(0);
3091 vos_mem_free(wdiSwitchChanParam);
3092 return VOS_STATUS_E_NOMEM;
3093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3095#ifndef WLAN_FEATURE_VOWIFI
3096 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3097 pSwitchChanParams->localPowerConstraint;
3098#endif
3099 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3100 pSwitchChanParams->secondaryChannelOffset;
3101 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 /* Store req pointer, as this will be used for response */
3103 /* store Params pass it to WDI */
3104 pWdaParams->pWdaContext = pWDA;
3105 pWdaParams->wdaMsgParam = pSwitchChanParams;
3106 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107#ifdef WLAN_FEATURE_VOWIFI
3108 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3109 = pSwitchChanParams->maxTxPower;
3110 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3111 pSwitchChanParams ->selfStaMacAddr,
3112 sizeof(tSirMacAddr));
3113#endif
3114 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3115 pSwitchChanParams->bssId,
3116 sizeof(tSirMacAddr));
3117
3118 status = WDI_SwitchChReq(wdiSwitchChanParam,
3119 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 if(IS_WDI_STATUS_FAILURE(status))
3121 {
3122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3123 "Failure in process channel switch Req WDI API, free all the memory " );
3124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3125 vos_mem_free(pWdaParams) ;
3126 pSwitchChanParams->status = eSIR_FAILURE ;
3127 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return CONVERT_WDI2VOS_STATUS(status) ;
3130}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003131
3132/*
3133 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3134 * send Switch channel RSP back to PE
3135 */
3136void WDA_SwitchChannelReqCallback_V1(
3137 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3138 void* pUserData)
3139{
3140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3141 tWDA_CbContext *pWDA;
3142 tSwitchChannelParams *pSwitchChanParams;
3143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3144 "<------ %s " ,__func__);
3145
3146 if (NULL == pWdaParams)
3147 {
3148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3149 "%s: pWdaParams received NULL", __func__);
3150 VOS_ASSERT(0);
3151 return ;
3152 }
3153 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3154 pSwitchChanParams =
3155 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3156 pSwitchChanParams->channelSwitchSrc =
3157 wdiSwitchChanRsp->channelSwitchSrc;
3158#ifdef WLAN_FEATURE_VOWIFI
3159 pSwitchChanParams->txMgmtPower =
3160 wdiSwitchChanRsp->ucTxMgmtPower;
3161#endif
3162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3163 vos_mem_free(pWdaParams);
3164 pSwitchChanParams->status =
3165 wdiSwitchChanRsp->wdiStatus ;
3166 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3167 (void *)pSwitchChanParams , 0);
3168 return;
3169}
3170
3171/*
3172 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3173 * Request to WDI to switch channel REQ params.
3174 */
3175VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3176 tSwitchChannelParams *pSwitchChanParams)
3177{
3178 WDI_Status status = WDI_STATUS_SUCCESS ;
3179 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3180 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3181 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3182 tWDA_ReqParams *pWdaParams ;
3183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3184 "------> %s " ,__func__);
3185 if (NULL == wdiSwitchChanParam)
3186 {
3187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3188 "%s: VOS MEM Alloc Failure", __func__);
3189 VOS_ASSERT(0);
3190 return VOS_STATUS_E_NOMEM;
3191 }
3192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3193 if (NULL == pWdaParams)
3194 {
3195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3196 "%s: VOS MEM Alloc Failure", __func__);
3197 VOS_ASSERT(0);
3198 vos_mem_free(wdiSwitchChanParam);
3199 return VOS_STATUS_E_NOMEM;
3200 }
3201 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3202 pSwitchChanParams->channelSwitchSrc;
3203
3204 wdiSwitchChanParam->wdiChInfo.ucChannel =
3205 pSwitchChanParams->channelNumber;
3206#ifndef WLAN_FEATURE_VOWIFI
3207 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3208 pSwitchChanParams->localPowerConstraint;
3209#endif
3210 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3211 pSwitchChanParams->secondaryChannelOffset;
3212 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3213 /* Store req pointer, as this will be used for response */
3214 /* store Params pass it to WDI */
3215 pWdaParams->pWdaContext = pWDA;
3216 pWdaParams->wdaMsgParam = pSwitchChanParams;
3217 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3218#ifdef WLAN_FEATURE_VOWIFI
3219 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3220 pSwitchChanParams->maxTxPower;
3221 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3222 pSwitchChanParams ->selfStaMacAddr,
3223 sizeof(tSirMacAddr));
3224#endif
3225 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3226 pSwitchChanParams->bssId,
3227 sizeof(tSirMacAddr));
3228
3229 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3230 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3231 pWdaParams);
3232 if (IS_WDI_STATUS_FAILURE(status))
3233 {
3234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3235 "Failure in process channel switch Req WDI "
3236 "API, free all the memory " );
3237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3238 vos_mem_free(pWdaParams) ;
3239 pSwitchChanParams->status = eSIR_FAILURE ;
3240 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3241 (void *)pSwitchChanParams, 0) ;
3242 }
3243 return CONVERT_WDI2VOS_STATUS(status) ;
3244}
3245
Jeff Johnson295189b2012-06-20 16:38:30 -07003246/*
3247 * FUNCTION: WDA_ConfigBssReqCallback
3248 * config BSS Req Callback, called by WDI
3249 */
3250void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3251 ,void* pUserData)
3252{
3253 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3254 tWDA_CbContext *pWDA;
3255 tAddBssParams *configBssReqParam;
3256 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003258 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 if(NULL == pWdaParams)
3260 {
3261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003262 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 VOS_ASSERT(0) ;
3264 return ;
3265 }
3266 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3267 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3268 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003270 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3272 {
3273 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3274 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3276 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3277 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3278
3279 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3280 {
3281 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3282 {
3283 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3284 staConfigBssParam->staType = STA_ENTRY_BSSID;
3285 }
3286 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3287 (staConfigBssParam->staType == STA_ENTRY_SELF))
3288 {
3289 /* This is the 1st add BSS Req for the BTAMP STA */
3290 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3291 staConfigBssParam->staType = STA_ENTRY_BSSID;
3292 }
3293 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3294 (staConfigBssParam->staType == STA_ENTRY_PEER))
3295 {
3296 /* This is the 2nd ADD BSS Request that is sent
3297 * on the BTAMP STA side. The Sta type is
3298 * set to STA_ENTRY_PEER here.*/
3299 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3300 }
3301 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3302 (staConfigBssParam->staType == STA_ENTRY_SELF))
3303 {
3304 /* statype is already set by PE.
3305 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3306 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3307 staConfigBssParam->staType = STA_ENTRY_BSSID;
3308 }
3309 else
3310 {
3311 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3312 staConfigBssParam->staType = STA_ENTRY_PEER;
3313 }
3314 }
3315 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3316 {
3317 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3318 staConfigBssParam->staType = STA_ENTRY_SELF;
3319 }
3320 else
3321 {
3322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3323 "Invalid operation mode specified");
3324 VOS_ASSERT(0);
3325 }
3326
3327 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3332 sizeof(tSirMacAddr));
3333 staConfigBssParam->txChannelWidthSet =
3334 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003335 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3336 staConfigBssParam->htCapable)
3337 {
3338 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3339 wdiConfigBssRsp->ucBSSIdx;
3340 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3341 WDA_VALID_STA_INDEX ;
3342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3344 wdiConfigBssRsp->ucBSSIdx,
3345 wdiConfigBssRsp->ucSTAIdx))
3346 {
3347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003348 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 VOS_ASSERT(0) ;
3350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3352 {
3353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003354 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 VOS_ASSERT(0) ;
3356 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003357#ifdef WLAN_FEATURE_VOWIFI
3358 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3359#endif
3360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3362 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 return ;
3365}
Jeff Johnson295189b2012-06-20 16:38:30 -07003366/*
3367 * FUNCTION: WDA_UpdateEdcaParamsForAC
3368 * Update WDI EDCA params with PE edca params
3369 */
3370void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3371 WDI_EdcaParamRecord *wdiEdcaParam,
3372 tSirMacEdcaParamRecord *macEdcaParam)
3373{
3374 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3375 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3376 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3377 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3378 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3379 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3380}
Jeff Johnson295189b2012-06-20 16:38:30 -07003381/*
3382 * FUNCTION: WDA_ProcessConfigBssReq
3383 * Configure BSS before starting Assoc with AP
3384 */
3385VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3386 tAddBssParams* configBssReqParam)
3387{
3388 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303389 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003392 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303393 if (NULL == configBssReqParam)
3394 {
3395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3396 "%s: configBssReqParam is NULL", __func__);
3397 return VOS_STATUS_E_INVAL;
3398 }
3399
3400 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3401 sizeof(WDI_ConfigBSSReqParamsType)) ;
3402
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 if(NULL == wdiConfigBssReqParam)
3404 {
3405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 VOS_ASSERT(0);
3408 return VOS_STATUS_E_NOMEM;
3409 }
3410 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3411 if(NULL == pWdaParams)
3412 {
3413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003414 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 VOS_ASSERT(0);
3416 vos_mem_free(wdiConfigBssReqParam);
3417 return VOS_STATUS_E_NOMEM;
3418 }
Kiran4a17ebe2013-01-31 10:43:43 -08003419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3420 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3423 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 /* Store Init Req pointer, as this will be used for response */
3425 /* store Params pass it to WDI */
3426 pWdaParams->pWdaContext = pWDA;
3427 pWdaParams->wdaMsgParam = configBssReqParam;
3428 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003429 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3430 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 if(IS_WDI_STATUS_FAILURE(status))
3432 {
3433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3434 "Failure in Config BSS WDI API, free all the memory " );
3435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3436 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 return CONVERT_WDI2VOS_STATUS(status) ;
3441}
Jeff Johnson295189b2012-06-20 16:38:30 -07003442#ifdef ENABLE_HAL_COMBINED_MESSAGES
3443/*
3444 * FUNCTION: WDA_PostAssocReqCallback
3445 * Post ASSOC req callback, send RSP back to PE
3446 */
3447void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3448 void* pUserData)
3449{
3450 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3451 tPostAssocParams *postAssocReqParam =
3452 (tPostAssocParams *)pWDA->wdaMsgParam ;
3453 /*STA context within the BSS Params*/
3454 tAddStaParams *staPostAssocParam =
3455 &postAssocReqParam->addBssParams.staContext ;
3456 /*STA Params for self STA*/
3457 tAddStaParams *selfStaPostAssocParam =
3458 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003460 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003461 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003462 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3464 {
3465 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3466 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3467 sizeof(tSirMacAddr)) ;
3468 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3469 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3470 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3472 }
3473 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3474 pWDA->wdaWdiApiMsgParam = NULL;
3475 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 return ;
3478}
Jeff Johnson295189b2012-06-20 16:38:30 -07003479/*
3480 * FUNCTION: WDA_ProcessPostAssocReq
3481 * Trigger POST ASSOC processing in WDI
3482 */
3483VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3484 tPostAssocParams *postAssocReqParam)
3485{
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 WDI_Status status = WDI_STATUS_SUCCESS ;
3487
3488 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3489 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3490 sizeof(WDI_PostAssocReqParamsType)) ;
3491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 if(NULL == wdiPostAssocReqParam)
3495 {
3496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 VOS_ASSERT(0);
3499 return VOS_STATUS_E_NOMEM;
3500 }
3501
3502 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3503 {
3504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003505 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 VOS_ASSERT(0);
3507 return VOS_STATUS_E_FAILURE;
3508 }
3509
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 /* update BSS params into WDI structure */
3511 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3512 &postAssocReqParam->addBssParams) ;
3513 /* update STA params into WDI structure */
3514 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3515 &postAssocReqParam->addStaParams) ;
3516
3517 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3518 postAssocReqParam->addBssParams.highPerformance;
3519 WDA_UpdateEdcaParamsForAC(pWDA,
3520 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3521 &postAssocReqParam->addBssParams.acbe);
3522 WDA_UpdateEdcaParamsForAC(pWDA,
3523 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3524 &postAssocReqParam->addBssParams.acbk);
3525 WDA_UpdateEdcaParamsForAC(pWDA,
3526 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3527 &postAssocReqParam->addBssParams.acvi);
3528 WDA_UpdateEdcaParamsForAC(pWDA,
3529 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3530 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 /* Store Init Req pointer, as this will be used for response */
3532 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003533 /* store Params pass it to WDI */
3534 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003535 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3536 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 if(IS_WDI_STATUS_FAILURE(status))
3538 {
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3540 "Failure in Post Assoc WDI API, free all the memory " );
3541 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3542 pWDA->wdaWdiApiMsgParam = NULL;
3543 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3546 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 return CONVERT_WDI2VOS_STATUS(status) ;
3548}
3549#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003550/*
3551 * FUNCTION: WDA_AddStaReqCallback
3552 * ADD STA req callback, send RSP back to PE
3553 */
3554void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3555 void* pUserData)
3556{
3557 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3558 tWDA_CbContext *pWDA;
3559 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003561 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 if(NULL == pWdaParams)
3563 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 VOS_ASSERT(0) ;
3566 return ;
3567 }
3568 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3569 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003571 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3573 {
3574 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3575 /*TODO: UMAC structure doesn't have these fields*/
3576 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3577 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3578 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3579 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3580 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3581 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003582#ifdef FEATURE_WLAN_TDLS
3583 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3584 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3585#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003587#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 {
3589 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3590 wdiConfigStaRsp->ucBssIdx;
3591 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3592 WDA_VALID_STA_INDEX ;
3593 }
3594 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3595 {
3596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003597 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 VOS_ASSERT(0) ;
3599 return ;
3600 }
3601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3603 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003604 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 return ;
3606}
Jeff Johnson295189b2012-06-20 16:38:30 -07003607/*
3608 * FUNCTION: WDA_ConfigStaReq
3609 * Trigger Config STA processing in WDI
3610 */
3611VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3612 tAddStaParams *addStaReqParam)
3613{
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3616 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3617 sizeof(WDI_ConfigSTAReqParamsType)) ;
3618 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003620 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 if(NULL == wdiConfigStaReqParam)
3622 {
3623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 VOS_ASSERT(0);
3626 return VOS_STATUS_E_NOMEM;
3627 }
3628 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3629 if(NULL == pWdaParams)
3630 {
3631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003632 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003633 VOS_ASSERT(0);
3634 vos_mem_free(wdiConfigStaReqParam);
3635 return VOS_STATUS_E_NOMEM;
3636 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003638 /* update STA params into WDI structure */
3639 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3640 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 /* Store Init Req pointer, as this will be used for response */
3642 /* store Params pass it to WDI */
3643 pWdaParams->pWdaContext = pWDA;
3644 pWdaParams->wdaMsgParam = addStaReqParam;
3645 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003646 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3647 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 if(IS_WDI_STATUS_FAILURE(status))
3649 {
3650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3651 "Failure in Config STA WDI API, free all the memory " );
3652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3653 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 return CONVERT_WDI2VOS_STATUS(status) ;
3658}
Jeff Johnson295189b2012-06-20 16:38:30 -07003659/*
3660 * FUNCTION: WDA_DelBSSReqCallback
3661 * Dens DEL BSS RSP back to PE
3662 */
3663void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3664 void* pUserData)
3665{
3666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3667 tWDA_CbContext *pWDA;
3668 tDeleteBssParams *delBssReqParam;
3669 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003671 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 if(NULL == pWdaParams)
3673 {
3674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003675 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 VOS_ASSERT(0) ;
3677 return ;
3678 }
3679 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3680 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003681 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3683 {
3684 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3685 sizeof(tSirMacAddr)) ;
3686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3688 {
3689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003690 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 VOS_ASSERT(0) ;
3692 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3694 {
3695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003696 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 VOS_ASSERT(0) ;
3698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3700 {
3701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003702 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003703 VOS_ASSERT(0) ;
3704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3706 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 /* reset the the system role*/
3708 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3709
3710 /* Reset the BA related information */
3711 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3712 {
3713 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3714 {
3715 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3716 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3717 /* Reset framesTxed counters here */
3718 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3719 {
3720 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3721 }
3722 }
3723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003724 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 return ;
3726}
3727
Jeff Johnson295189b2012-06-20 16:38:30 -07003728/*
3729 * FUNCTION: WDA_ProcessDelBssReq
3730 * Init DEL BSS req with WDI
3731 */
3732VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3733 tDeleteBssParams *delBssParam)
3734{
3735 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3737 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3738 sizeof(WDI_DelBSSReqParamsType)) ;
3739 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003741 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 if(NULL == wdiDelBssReqParam)
3743 {
3744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003746 VOS_ASSERT(0);
3747 return VOS_STATUS_E_NOMEM;
3748 }
3749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3750 if(NULL == pWdaParams)
3751 {
3752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 VOS_ASSERT(0);
3755 vos_mem_free(wdiDelBssReqParam);
3756 return VOS_STATUS_E_NOMEM;
3757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3759 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3760
3761 /* Store Init Req pointer, as this will be used for response */
3762 /* store Params pass it to WDI */
3763 pWdaParams->pWdaContext = pWDA;
3764 pWdaParams->wdaMsgParam = delBssParam;
3765 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 status = WDI_DelBSSReq(wdiDelBssReqParam,
3767 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 if(IS_WDI_STATUS_FAILURE(status))
3769 {
3770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3771 "Failure in Del BSS WDI API, free all the memory " );
3772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3773 vos_mem_free(pWdaParams) ;
3774 delBssParam->status = eSIR_FAILURE ;
3775 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 return CONVERT_WDI2VOS_STATUS(status) ;
3778}
Jeff Johnson295189b2012-06-20 16:38:30 -07003779/*
3780 * FUNCTION: WDA_DelSTAReqCallback
3781 * Dens DEL STA RSP back to PE
3782 */
3783void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3784 void* pUserData)
3785{
3786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3787 tWDA_CbContext *pWDA;
3788 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003790 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003791 if(NULL == pWdaParams)
3792 {
3793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003794 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 VOS_ASSERT(0) ;
3796 return ;
3797 }
3798 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3799 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003800 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003801 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3802 {
3803 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3804 {
3805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003806 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 VOS_ASSERT(0) ;
3808 }
3809 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3810 }
3811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3812 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003813 /*Reset the BA information corresponding to this STAIdx */
3814 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3815 WDA_INVALID_STA_INDEX;
3816 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3817
3818 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003819 return ;
3820}
Jeff Johnson295189b2012-06-20 16:38:30 -07003821/*
3822 * FUNCTION: WDA_ProcessDelStaReq
3823 * Init DEL STA req with WDI
3824 */
3825VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3826 tDeleteStaParams *delStaParam)
3827{
3828 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3830 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3831 sizeof(WDI_DelSTAReqParamsType)) ;
3832 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003834 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 if(NULL == wdiDelStaReqParam)
3836 {
3837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 VOS_ASSERT(0);
3840 return VOS_STATUS_E_NOMEM;
3841 }
3842 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3843 if(NULL == pWdaParams)
3844 {
3845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003847 VOS_ASSERT(0);
3848 vos_mem_free(wdiDelStaReqParam);
3849 return VOS_STATUS_E_NOMEM;
3850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3852 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 /* Store Init Req pointer, as this will be used for response */
3854 /* store Params pass it to WDI */
3855 pWdaParams->pWdaContext = pWDA;
3856 pWdaParams->wdaMsgParam = delStaParam;
3857 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 status = WDI_DelSTAReq(wdiDelStaReqParam,
3859 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003860 if(IS_WDI_STATUS_FAILURE(status))
3861 {
3862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3863 "Failure in Del STA WDI API, free all the memory status = %d",
3864 status );
3865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3866 vos_mem_free(pWdaParams) ;
3867 delStaParam->status = eSIR_FAILURE ;
3868 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3869 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 return CONVERT_WDI2VOS_STATUS(status) ;
3871}
Jeff Johnson295189b2012-06-20 16:38:30 -07003872void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3873{
3874 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3875 tWDA_CbContext *pWDA;
3876 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003878 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003879 if(NULL == pWdaParams)
3880 {
3881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003882 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 VOS_ASSERT(0) ;
3884 return ;
3885 }
3886 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3887 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3889 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3891 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3892 pwdiAddSTASelfRsp->macSelfSta,
3893 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 return ;
3896}
Jeff Johnson295189b2012-06-20 16:38:30 -07003897/*
3898 * FUNCTION: WDA_ProcessAddStaSelfReq
3899 *
3900 */
3901VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3902{
3903 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003904 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3906 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3907 sizeof(WDI_AddSTASelfReqParamsType)) ;
3908 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003910 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 if( NULL == wdiAddStaSelfReq )
3912 {
3913 VOS_ASSERT( 0 );
3914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003915 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003916 return( VOS_STATUS_E_NOMEM );
3917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003918 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 if( NULL == pWdaParams )
3920 {
3921 VOS_ASSERT( 0 );
3922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003923 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 vos_mem_free(wdiAddStaSelfReq) ;
3925 return( VOS_STATUS_E_NOMEM );
3926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003929 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 /* Store Init Req pointer, as this will be used for response */
3931 /* store Params pass it to WDI */
3932 pWdaParams->pWdaContext = pWDA;
3933 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3934 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003935 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003936
Jeff Johnson43971f52012-07-17 12:26:56 -07003937 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003938 {
3939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3940 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003941 wstatus );
3942 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3944 vos_mem_free(pWdaParams) ;
3945 pAddStaSelfReq->status = eSIR_FAILURE ;
3946 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3947 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003948 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003949}
Jeff Johnson295189b2012-06-20 16:38:30 -07003950/*
3951 * FUNCTION: WDA_DelSTASelfRespCallback
3952 *
3953 */
3954void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3955 wdiDelStaSelfRspParams , void* pUserData)
3956{
3957 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3958 tWDA_CbContext *pWDA;
3959 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003961 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003962 if (NULL == pWdaParams)
3963 {
3964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003965 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 VOS_ASSERT(0);
3967 return;
3968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003969 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3970 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003972 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003973
3974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3975 vos_mem_free(pWdaParams) ;
3976
3977 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 return ;
3979}
Jeff Johnson295189b2012-06-20 16:38:30 -07003980/*
3981 * FUNCTION: WDA_DelSTASelfReqCallback
3982 *
3983 */
3984void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3985 void* pUserData)
3986{
3987 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3988 tWDA_CbContext *pWDA;
3989 tDelStaSelfParams *delStaSelfParams;
3990
3991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303992 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003993 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003994
3995 if (NULL == pWdaParams)
3996 {
3997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003998 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 VOS_ASSERT(0);
4000 return;
4001 }
4002
4003 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4004 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4005
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004006 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007
4008 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4009 {
4010 VOS_ASSERT(0);
4011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4012 vos_mem_free(pWdaParams) ;
4013 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4014 }
4015
4016 return ;
4017}
4018
4019/*
4020 * FUNCTION: WDA_DelSTASelfReq
4021 * Trigger Config STA processing in WDI
4022 */
4023VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4024 tDelStaSelfParams* pDelStaSelfReqParam)
4025{
4026 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004027 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 tWDA_ReqParams *pWdaParams = NULL;
4029 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4030 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4031 sizeof(WDI_DelSTASelfReqParamsType)) ;
4032
Jeff Johnson295189b2012-06-20 16:38:30 -07004033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 if( NULL == wdiDelStaSelfReq )
4036 {
4037 VOS_ASSERT( 0 );
4038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004039 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004040 return( VOS_STATUS_E_NOMEM );
4041 }
4042
4043 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4044 if( NULL == pWdaParams )
4045 {
4046 VOS_ASSERT( 0 );
4047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004048 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 vos_mem_free(wdiDelStaSelfReq) ;
4050 return( VOS_STATUS_E_NOMEM );
4051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 pWdaParams->pWdaContext = pWDA;
4053 /* Store param pointer as passed in by caller */
4054 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4055 /* store Params pass it to WDI */
4056 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4058 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4059
4060 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4061 wdiDelStaSelfReq->pUserData = pWdaParams;
4062
Jeff Johnson43971f52012-07-17 12:26:56 -07004063 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4065
Jeff Johnson43971f52012-07-17 12:26:56 -07004066 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 {
4068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4069 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4070 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004071 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4073 vos_mem_free(pWdaParams) ;
4074 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4075 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4076 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004077 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004078}
4079
Jeff Johnson295189b2012-06-20 16:38:30 -07004080/*
4081 * FUNCTION: WDA_SendMsg
4082 * Send Message back to PE
4083 */
4084void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4085 void *pBodyptr, tANI_U32 bodyVal)
4086{
4087 tSirMsgQ msg = {0} ;
4088 tANI_U32 status = VOS_STATUS_SUCCESS ;
4089 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 msg.type = msgType;
4091 msg.bodyval = bodyVal;
4092 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 if (VOS_STATUS_SUCCESS != status)
4095 {
4096 if(NULL != pBodyptr)
4097 {
4098 vos_mem_free(pBodyptr);
4099 }
4100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004101 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 VOS_ASSERT(0) ;
4103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004104 return ;
4105}
Jeff Johnson295189b2012-06-20 16:38:30 -07004106/*
4107 * FUNCTION: WDA_UpdateBSSParams
4108 * Translated WDA/PE BSS info into WDI BSS info..
4109 */
4110void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4111 WDI_ConfigBSSReqInfoType *wdiBssParams,
4112 tAddBssParams *wdaBssParams)
4113{
4114 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 /* copy bssReq Params to WDI structure */
4116 vos_mem_copy(wdiBssParams->macBSSID,
4117 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4118 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4119 sizeof(tSirMacAddr)) ;
4120 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4121 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4122 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 wdiBssParams->ucShortSlotTimeSupported =
4124 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4126 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4127 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4128 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4129 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4130
4131 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4132 wdiBssParams->ucTXOPProtectionFullSupport =
4133 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4135 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4138 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4139 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4140 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4141
Chet Lanctot186b5732013-03-18 10:26:30 -07004142 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4143
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 /* copy SSID into WDI structure */
4145 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4146 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4147 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4149 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004151#ifdef WLAN_FEATURE_VOWIFI
4152 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4153#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004156#ifdef WLAN_FEATURE_VOWIFI_11R
4157 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 if(wdiBssParams->bExtSetStaKeyParamValid)
4159 {
4160 /* copy set STA key params to WDI structure */
4161 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4162 wdaBssParams->extSetStaKeyParam.staIdx;
4163 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4164 wdaBssParams->extSetStaKeyParam.encType;
4165 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4166 wdaBssParams->extSetStaKeyParam.wepType;
4167 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4168 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4170 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004171 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4173 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4174 {
4175 WDA_GetWepKeysFromCfg( pWDA,
4176 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4177 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4178 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4179 }
4180 else
4181 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4183 keyIndex++)
4184 {
4185 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4186 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4187 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4188 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4189 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4190 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4192 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4193 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4194 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4195 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4196 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4197 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4198 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4201 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 }
4203 }
4204 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4205 }
4206 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4207 {
4208 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4209 sizeof(wdaBssParams->extSetStaKeyParam) );
4210 }
4211#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004212#ifdef WLAN_FEATURE_11AC
4213 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4214 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4215#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004216
4217 return ;
4218}
Jeff Johnson295189b2012-06-20 16:38:30 -07004219/*
4220 * FUNCTION: WDA_UpdateSTAParams
4221 * Translated WDA/PE BSS info into WDI BSS info..
4222 */
4223void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4224 WDI_ConfigStaReqInfoType *wdiStaParams,
4225 tAddStaParams *wdaStaParams)
4226{
4227 tANI_U8 i = 0;
4228 /* Update STA params */
4229 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4230 sizeof(tSirMacAddr)) ;
4231 wdiStaParams->usAssocId = wdaStaParams->assocId;
4232 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004233 wdiStaParams->staIdx = wdaStaParams->staIdx;
4234
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 wdiStaParams->ucShortPreambleSupported =
4236 wdaStaParams->shortPreambleSupported;
4237 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4238 sizeof(tSirMacAddr)) ;
4239 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4240
4241 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4242
4243 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4244 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4245 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4246 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4247 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4248 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4249 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4250
4251 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4252 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004253 wdiStaParams->wdiSupportedRates.opRateMode =
4254 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4256 {
4257 wdiStaParams->wdiSupportedRates.llbRates[i] =
4258 wdaStaParams->supportedRates.llbRates[i];
4259 }
4260 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4261 {
4262 wdiStaParams->wdiSupportedRates.llaRates[i] =
4263 wdaStaParams->supportedRates.llaRates[i];
4264 }
4265 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4266 {
4267 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4268 wdaStaParams->supportedRates.aniLegacyRates[i];
4269 }
4270 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4271 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004272#ifdef WLAN_FEATURE_11AC
4273 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4274 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4275 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4276 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4277#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4279 {
4280 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4281 wdaStaParams->supportedRates.supportedMCSSet[i];
4282 }
4283 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4284 wdaStaParams->supportedRates.rxHighestDataRate;
4285
4286 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4287
4288 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4289
4290 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4291 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4292 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4293
4294 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4295 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4296 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4297 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004299#ifdef WLAN_FEATURE_11AC
4300 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4301 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004302 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004303#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004304 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4305 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 return ;
4307}
Jeff Johnson295189b2012-06-20 16:38:30 -07004308/*
4309 * -------------------------------------------------------------------------
4310 * CFG update to WDI
4311 * -------------------------------------------------------------------------
4312 */
4313
4314 /*
4315 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4316 * Convert the WNI CFG ID to HAL CFG ID
4317 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004318static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004319{
4320 switch(wniCfgId)
4321 {
4322 case WNI_CFG_STA_ID:
4323 return QWLAN_HAL_CFG_STA_ID;
4324 case WNI_CFG_CURRENT_TX_ANTENNA:
4325 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4326 case WNI_CFG_CURRENT_RX_ANTENNA:
4327 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4328 case WNI_CFG_LOW_GAIN_OVERRIDE:
4329 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4330 case WNI_CFG_POWER_STATE_PER_CHAIN:
4331 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4332 case WNI_CFG_CAL_PERIOD:
4333 return QWLAN_HAL_CFG_CAL_PERIOD;
4334 case WNI_CFG_CAL_CONTROL:
4335 return QWLAN_HAL_CFG_CAL_CONTROL;
4336 case WNI_CFG_PROXIMITY:
4337 return QWLAN_HAL_CFG_PROXIMITY;
4338 case WNI_CFG_NETWORK_DENSITY:
4339 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4340 case WNI_CFG_MAX_MEDIUM_TIME:
4341 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4342 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4343 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4344 case WNI_CFG_RTS_THRESHOLD:
4345 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4346 case WNI_CFG_SHORT_RETRY_LIMIT:
4347 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4348 case WNI_CFG_LONG_RETRY_LIMIT:
4349 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4350 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4351 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4352 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4353 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4354 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4355 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4356 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4357 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4358 case WNI_CFG_FIXED_RATE:
4359 return QWLAN_HAL_CFG_FIXED_RATE;
4360 case WNI_CFG_RETRYRATE_POLICY:
4361 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4362 case WNI_CFG_RETRYRATE_SECONDARY:
4363 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4364 case WNI_CFG_RETRYRATE_TERTIARY:
4365 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4366 case WNI_CFG_FORCE_POLICY_PROTECTION:
4367 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4368 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4369 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4370 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4371 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4372 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4373 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4374 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4375 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4376 case WNI_CFG_MAX_BA_SESSIONS:
4377 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4378 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4379 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4380 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4381 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4382 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4383 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4384 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4385 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4386 case WNI_CFG_STATS_PERIOD:
4387 return QWLAN_HAL_CFG_STATS_PERIOD;
4388 case WNI_CFG_CFP_MAX_DURATION:
4389 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4390#if 0 /*This is not part of CFG*/
4391 case WNI_CFG_FRAME_TRANS_ENABLED:
4392 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4393#endif
4394 case WNI_CFG_DTIM_PERIOD:
4395 return QWLAN_HAL_CFG_DTIM_PERIOD;
4396 case WNI_CFG_EDCA_WME_ACBK:
4397 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4398 case WNI_CFG_EDCA_WME_ACBE:
4399 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4400 case WNI_CFG_EDCA_WME_ACVI:
4401 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4402 case WNI_CFG_EDCA_WME_ACVO:
4403 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4404#if 0
4405 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4406 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4407 case WNI_CFG_TELE_BCN_TRANS_LI:
4408 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4409 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4410 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4411 case WNI_CFG_TELE_BCN_MAX_LI:
4412 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4413 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4414 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4415#endif
4416 case WNI_CFG_ENABLE_CLOSE_LOOP:
4417 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004418 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4419 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 default:
4421 {
4422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004423 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 wniCfgId);
4425 return VOS_STATUS_E_INVAL;
4426 }
4427 }
4428}
Jeff Johnson295189b2012-06-20 16:38:30 -07004429/*
4430 * FUNCTION: WDA_UpdateCfgCallback
4431 *
4432 */
4433void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4434{
4435 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4436 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4437 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004439 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 /*
4441 * currently there is no response message is expected between PE and
4442 * WDA, Failure return from WDI is a ASSERT condition
4443 */
4444 if(WDI_STATUS_SUCCESS != wdiStatus)
4445 {
4446 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004447 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4449 }
4450
4451 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4452 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4453 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 return ;
4455}
Jeff Johnson295189b2012-06-20 16:38:30 -07004456/*
4457 * FUNCTION: WDA_UpdateCfg
4458 *
4459 */
4460VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4461{
4462
4463 WDI_Status status = WDI_STATUS_SUCCESS ;
4464 tANI_U32 val =0;
4465 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4466 tHalCfg *configData;
4467 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4468 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004470 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 if (NULL == pMac )
4472 {
4473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004474 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004475 return VOS_STATUS_E_FAILURE;
4476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 if(WDA_START_STATE != pWDA->wdaState)
4478 {
4479 return VOS_STATUS_E_FAILURE;
4480 }
4481
4482 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4483 {
4484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004485 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 VOS_ASSERT(0);
4487 return VOS_STATUS_E_FAILURE;
4488 }
4489
4490 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4491 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 if(NULL == wdiCfgReqParam)
4493 {
4494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 VOS_ASSERT(0);
4497 return VOS_STATUS_E_NOMEM;
4498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4500 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 if(NULL == wdiCfgReqParam->pConfigBuffer)
4502 {
4503 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 vos_mem_free(wdiCfgReqParam);
4506 VOS_ASSERT(0);
4507 return VOS_STATUS_E_NOMEM;
4508 }
4509
4510 /*convert the WNI CFG Id to HAL CFG Id*/
4511 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4512 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4513
4514 /*TODO: revisit this for handling string parameters */
4515 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4516 &val) != eSIR_SUCCESS)
4517 {
4518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004519 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4521 vos_mem_free(wdiCfgReqParam);
4522 return eSIR_FAILURE;
4523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4525 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4526 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4527 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4528 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4529
4530 /* store Params pass it to WDI */
4531 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4533 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4534 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 if(IS_WDI_STATUS_FAILURE(status))
4536 {
4537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4538 "Failure in Update CFG WDI API, free all the memory " );
4539 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4540 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4541 pWDA->wdaWdiCfgApiMsgParam = NULL;
4542 /* Failure is not expected */
4543 VOS_ASSERT(0) ;
4544 }
4545#else
4546 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4547 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4548 pWDA->wdaWdiCfgApiMsgParam = NULL;
4549#endif
4550 return CONVERT_WDI2VOS_STATUS(status) ;
4551}
4552
Jeff Johnson295189b2012-06-20 16:38:30 -07004553VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4554 v_U8_t *pDefaultKeyId,
4555 v_U8_t *pNumKeys,
4556 WDI_KeysType *pWdiKeys )
4557{
4558 v_U32_t i, j, defKeyId = 0;
4559 v_U32_t val = SIR_MAC_KEY_LENGTH;
4560 VOS_STATUS status = WDI_STATUS_SUCCESS;
4561 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 if (NULL == pMac )
4563 {
4564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004565 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 return VOS_STATUS_E_FAILURE;
4567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004568 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4569 &defKeyId ))
4570 {
4571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4572 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4573 }
4574
4575 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 /* Need to extract ALL of the configured WEP Keys */
4577 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4578 {
4579 val = SIR_MAC_KEY_LENGTH;
4580 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4581 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4582 pWdiKeys[j].key,
4583 &val ))
4584 {
4585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004586 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 }
4588 else
4589 {
4590 pWdiKeys[j].keyId = (tANI_U8) i;
4591 /*
4592 * Actually, a DC (Don't Care) because
4593 * this is determined (and set) by PE/MLME
4594 */
4595 pWdiKeys[j].unicast = 0;
4596 /*
4597 * Another DC (Don't Care)
4598 */
4599 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4600 /* Another DC (Don't Care). Unused for WEP */
4601 pWdiKeys[j].paeRole = 0;
4602 /* Determined from wlan_cfgGetStr() above.*/
4603 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 j++;
4605 *pNumKeys = (tANI_U8) j;
4606 }
4607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 return status;
4609}
Jeff Johnson295189b2012-06-20 16:38:30 -07004610/*
4611 * FUNCTION: WDA_SetBssKeyReqCallback
4612 * send SET BSS key RSP back to PE
4613 */
4614void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4615{
4616 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4617 tWDA_CbContext *pWDA;
4618 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004620 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 if(NULL == pWdaParams)
4622 {
4623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004624 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 VOS_ASSERT(0) ;
4626 return ;
4627 }
4628 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4629 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4631 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004632 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004633 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 return ;
4635}
Jeff Johnson295189b2012-06-20 16:38:30 -07004636/*
4637 * FUNCTION: WDA_ProcessSetBssKeyReq
4638 * Request to WDI for programming the BSS key( key for
4639 * broadcast/multicast frames Encryption)
4640 */
4641VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4642 tSetBssKeyParams *setBssKeyParams )
4643{
4644 WDI_Status status = WDI_STATUS_SUCCESS ;
4645 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4646 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4647 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4648 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004651 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004652 if(NULL == wdiSetBssKeyParam)
4653 {
4654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 VOS_ASSERT(0);
4657 return VOS_STATUS_E_NOMEM;
4658 }
4659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4660 if(NULL == pWdaParams)
4661 {
4662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 VOS_ASSERT(0);
4665 vos_mem_free(wdiSetBssKeyParam);
4666 return VOS_STATUS_E_NOMEM;
4667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 /* copy set BSS params to WDI structure */
4670 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4671 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4672 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 if(setBssKeyParams->encType != eSIR_ED_NONE)
4674 {
4675 if( setBssKeyParams->numKeys == 0 &&
4676 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4677 setBssKeyParams->encType == eSIR_ED_WEP104))
4678 {
4679 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4681 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4682 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4683 }
4684 else
4685 {
4686 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4687 {
4688 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4689 setBssKeyParams->key[keyIndex].keyId;
4690 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4691 setBssKeyParams->key[keyIndex].unicast;
4692 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4693 setBssKeyParams->key[keyIndex].keyDirection;
4694 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4695 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4696 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4697 setBssKeyParams->key[keyIndex].paeRole;
4698 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4699 setBssKeyParams->key[keyIndex].keyLength;
4700 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4701 setBssKeyParams->key[keyIndex].key,
4702 SIR_MAC_MAX_KEY_LENGTH);
4703 }
4704 }
4705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4707 setBssKeyParams->singleTidRc;
4708 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 /* Store set key pointer, as this will be used for response */
4710 /* store Params pass it to WDI */
4711 pWdaParams->pWdaContext = pWDA;
4712 pWdaParams->wdaMsgParam = setBssKeyParams;
4713 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4715 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4716
4717 if(IS_WDI_STATUS_FAILURE(status))
4718 {
4719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4720 "Failure in Set BSS Key Req WDI API, free all the memory " );
4721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4722 vos_mem_free(pWdaParams) ;
4723 setBssKeyParams->status = eSIR_FAILURE ;
4724 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 return CONVERT_WDI2VOS_STATUS(status) ;
4727}
Jeff Johnson295189b2012-06-20 16:38:30 -07004728/*
4729 * FUNCTION: WDA_RemoveBssKeyReqCallback
4730 * send SET BSS key RSP back to PE
4731 */
4732void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4733{
4734 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4735 tWDA_CbContext *pWDA;
4736 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 if(NULL == pWdaParams)
4740 {
4741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004742 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004743 VOS_ASSERT(0) ;
4744 return ;
4745 }
4746 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4747 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4749 vos_mem_free(pWdaParams) ;
4750
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004751 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004752 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004753 return ;
4754}
Jeff Johnson295189b2012-06-20 16:38:30 -07004755/*
4756 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4757 * Request to WDI to remove the BSS key( key for broadcast/multicast
4758 * frames Encryption)
4759 */
4760VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4761 tRemoveBssKeyParams *removeBssKeyParams )
4762{
4763 WDI_Status status = WDI_STATUS_SUCCESS ;
4764 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4765 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4766 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4767 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004769 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 if(NULL == wdiRemoveBssKeyParam)
4771 {
4772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004773 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 VOS_ASSERT(0);
4775 return VOS_STATUS_E_NOMEM;
4776 }
4777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4778 if(NULL == pWdaParams)
4779 {
4780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004782 VOS_ASSERT(0);
4783 vos_mem_free(wdiRemoveBssKeyParam);
4784 return VOS_STATUS_E_NOMEM;
4785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 /* copy Remove BSS key params to WDI structure*/
4787 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4788 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4789 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4790 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4791 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 /* Store remove key pointer, as this will be used for response */
4793 /* store Params pass it to WDI */
4794 pWdaParams->pWdaContext = pWDA;
4795 pWdaParams->wdaMsgParam = removeBssKeyParams;
4796 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4798 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 if(IS_WDI_STATUS_FAILURE(status))
4800 {
4801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4802 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4804 vos_mem_free(pWdaParams) ;
4805 removeBssKeyParams->status = eSIR_FAILURE ;
4806 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 return CONVERT_WDI2VOS_STATUS(status) ;
4809}
Jeff Johnson295189b2012-06-20 16:38:30 -07004810/*
4811 * FUNCTION: WDA_SetBssKeyReqCallback
4812 * send SET BSS key RSP back to PE
4813 */
4814void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4815{
4816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4817 tWDA_CbContext *pWDA;
4818 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004820 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 if(NULL == pWdaParams)
4822 {
4823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004824 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 VOS_ASSERT(0) ;
4826 return ;
4827 }
4828 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4829 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4831 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004832 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004833 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 return ;
4835}
Jeff Johnson295189b2012-06-20 16:38:30 -07004836/*
4837 * FUNCTION: WDA_ProcessSetStaKeyReq
4838 * Request to WDI for programming the STA key( key for Unicast frames
4839 * Encryption)
4840 */
4841VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4842 tSetStaKeyParams *setStaKeyParams )
4843{
4844 WDI_Status status = WDI_STATUS_SUCCESS ;
4845 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4846 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4847 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4848 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004851 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 if(NULL == wdiSetStaKeyParam)
4853 {
4854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 VOS_ASSERT(0);
4857 return VOS_STATUS_E_NOMEM;
4858 }
4859 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4860 if(NULL == pWdaParams)
4861 {
4862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004863 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 VOS_ASSERT(0);
4865 vos_mem_free(wdiSetStaKeyParam);
4866 return VOS_STATUS_E_NOMEM;
4867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 /* copy set STA key params to WDI structure */
4871 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4872 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4873 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4874 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 if(setStaKeyParams->encType != eSIR_ED_NONE)
4876 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004877 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4879 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4880 {
4881 WDA_GetWepKeysFromCfg( pWDA,
4882 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4883 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4884 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4885 }
4886 else
4887 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4889 keyIndex++)
4890 {
4891 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4892 setStaKeyParams->key[keyIndex].keyId;
4893 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4894 setStaKeyParams->key[keyIndex].unicast;
4895 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4896 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4898 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4899 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4900 setStaKeyParams->key[keyIndex].paeRole;
4901 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4902 setStaKeyParams->key[keyIndex].keyLength;
4903 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4904 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4905 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4906 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4907 {
4908 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4909 }
4910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4912 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 }
4914 }
4915 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4916 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 /* Store set key pointer, as this will be used for response */
4918 /* store Params pass it to WDI */
4919 pWdaParams->pWdaContext = pWDA;
4920 pWdaParams->wdaMsgParam = setStaKeyParams;
4921 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4923 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 if(IS_WDI_STATUS_FAILURE(status))
4925 {
4926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4927 "Failure in set STA Key Req WDI API, free all the memory " );
4928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4929 vos_mem_free(pWdaParams) ;
4930 setStaKeyParams->status = eSIR_FAILURE ;
4931 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 return CONVERT_WDI2VOS_STATUS(status) ;
4934}
Jeff Johnson295189b2012-06-20 16:38:30 -07004935/*
4936 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4937 * send SET Bcast STA key RSP back to PE
4938 */
4939void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4940{
4941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4942 tWDA_CbContext *pWDA;
4943 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004945 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 if(NULL == pWdaParams)
4947 {
4948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004949 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 VOS_ASSERT(0) ;
4951 return ;
4952 }
4953 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4954 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4956 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004957 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 return ;
4960}
4961
Jeff Johnson295189b2012-06-20 16:38:30 -07004962/*
4963 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4964 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4965 * Encryption)
4966 */
4967VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4968 tSetStaKeyParams *setStaKeyParams )
4969{
4970 WDI_Status status = WDI_STATUS_SUCCESS ;
4971 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4972 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4973 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4974 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004977 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 if(NULL == wdiSetStaKeyParam)
4979 {
4980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004981 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 VOS_ASSERT(0);
4983 return VOS_STATUS_E_NOMEM;
4984 }
4985 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4986 if(NULL == pWdaParams)
4987 {
4988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 VOS_ASSERT(0);
4991 vos_mem_free(wdiSetStaKeyParam);
4992 return VOS_STATUS_E_NOMEM;
4993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 /* copy set STA key params to WDI structure */
4997 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4998 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4999 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5000 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 if(setStaKeyParams->encType != eSIR_ED_NONE)
5002 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5004 keyIndex++)
5005 {
5006 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5007 setStaKeyParams->key[keyIndex].keyId;
5008 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5009 setStaKeyParams->key[keyIndex].unicast;
5010 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5011 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5013 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5014 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5015 setStaKeyParams->key[keyIndex].paeRole;
5016 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5017 setStaKeyParams->key[keyIndex].keyLength;
5018 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5019 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5022 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 }
5024 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005025 /* Store set key pointer, as this will be used for response */
5026 /* store Params pass it to WDI */
5027 pWdaParams->pWdaContext = pWDA;
5028 pWdaParams->wdaMsgParam = setStaKeyParams;
5029 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5031 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 if(IS_WDI_STATUS_FAILURE(status))
5033 {
5034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5035 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5037 vos_mem_free(pWdaParams) ;
5038 setStaKeyParams->status = eSIR_FAILURE ;
5039 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005041 return CONVERT_WDI2VOS_STATUS(status) ;
5042}
Jeff Johnson295189b2012-06-20 16:38:30 -07005043/*
5044 * FUNCTION: WDA_RemoveStaKeyReqCallback
5045 * send SET BSS key RSP back to PE
5046 */
5047void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5048{
5049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5050 tWDA_CbContext *pWDA;
5051 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005053 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 if(NULL == pWdaParams)
5055 {
5056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005057 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 VOS_ASSERT(0) ;
5059 return ;
5060 }
5061 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5062 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5064 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005065 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 return ;
5068}
5069
Jeff Johnson295189b2012-06-20 16:38:30 -07005070/*
5071 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5072 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5073 */
5074VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5075 tRemoveStaKeyParams *removeStaKeyParams )
5076{
5077 WDI_Status status = WDI_STATUS_SUCCESS ;
5078 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5079 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5080 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5081 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005083 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005084 if(NULL == wdiRemoveStaKeyParam)
5085 {
5086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005088 VOS_ASSERT(0);
5089 return VOS_STATUS_E_NOMEM;
5090 }
5091 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5092 if(NULL == pWdaParams)
5093 {
5094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005095 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005096 VOS_ASSERT(0);
5097 vos_mem_free(wdiRemoveStaKeyParam);
5098 return VOS_STATUS_E_NOMEM;
5099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005100 /* copy remove STA key params to WDI structure*/
5101 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5102 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5103 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5104 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5105 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 /* Store remove key pointer, as this will be used for response */
5107 /* store Params pass it to WDI */
5108 pWdaParams->pWdaContext = pWDA;
5109 pWdaParams->wdaMsgParam = removeStaKeyParams;
5110 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5112 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 if(IS_WDI_STATUS_FAILURE(status))
5114 {
5115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5116 "Failure in remove STA Key Req WDI API, free all the memory " );
5117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5118 vos_mem_free(pWdaParams) ;
5119 removeStaKeyParams->status = eSIR_FAILURE ;
5120 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005122 return CONVERT_WDI2VOS_STATUS(status) ;
5123}
Jeff Johnson295189b2012-06-20 16:38:30 -07005124/*
5125 * FUNCTION: WDA_IsHandleSetLinkStateReq
5126 * Update the WDA state and return the status to handle this message or not
5127 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005128WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5129 tWDA_CbContext *pWDA,
5130 tLinkStateParams *linkStateParams)
5131{
5132 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 switch(linkStateParams->state)
5134 {
5135 case eSIR_LINK_PREASSOC_STATE:
5136 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5137 /*
5138 * set the WDA state to PRE ASSOC
5139 * copy the BSSID into pWDA to use it in join request and return,
5140 * No need to handle these messages.
5141 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005142 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5143 {
5144 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005146 }
5147 else
5148 {
5149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005151 VOS_ASSERT(0);
5152 }
5153
5154 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5155 {
5156 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005158 }
5159 else
5160 {
5161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005162 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005163 VOS_ASSERT(0);
5164 }
5165
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5167 *channel and after ) so reset the WDA state to ready when the second
5168 * time UMAC issue the link state with PREASSOC
5169 */
5170 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5171 {
5172 /* RESET WDA state back to WDA_READY_STATE */
5173 pWDA->wdaState = WDA_READY_STATE;
5174 }
5175 else
5176 {
5177 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5178 }
5179 //populate linkState info in WDACbCtxt
5180 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 default:
5183 if(pWDA->wdaState != WDA_READY_STATE)
5184 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005185 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5186 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5187 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5188 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5189 *the ASSERT in WDA_Stop during module unload.*/
5190 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5191 {
5192 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005193 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005194 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005195 else
5196 {
5197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005198 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005199 status = WDA_IGNORE_SET_LINK_STATE;
5200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 }
5202 break;
5203 }
5204
5205 return status;
5206}
Jeff Johnson295189b2012-06-20 16:38:30 -07005207/*
5208 * FUNCTION: WDA_SetLinkStateCallback
5209 * call back function for set link state from WDI
5210 */
5211void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5212{
5213 tWDA_CbContext *pWDA;
5214 tLinkStateParams *linkStateParams;
5215 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005217 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005218 if(NULL == pWdaParams)
5219 {
5220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005221 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 VOS_ASSERT(0) ;
5223 return ;
5224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005225 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 /*
5228 * In STA mode start the BA activity check timer after association
5229 * and in AP mode start BA activity check timer after BSS start */
5230 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5231 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005232 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5233 ((status == WDI_STATUS_SUCCESS) &&
5234 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 {
5236 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 /*
5240 * No respone required for WDA_SET_LINK_STATE so free the request
5241 * param here
5242 */
5243 if( pWdaParams != NULL )
5244 {
5245 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5246 {
5247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5248 }
5249 vos_mem_free(pWdaParams);
5250 }
5251 return ;
5252}
Jeff Johnson295189b2012-06-20 16:38:30 -07005253/*
5254 * FUNCTION: WDA_ProcessSetLinkState
5255 * Request to WDI to set the link status.
5256 */
5257VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5258 tLinkStateParams *linkStateParams)
5259{
5260 WDI_Status status = WDI_STATUS_SUCCESS ;
5261 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5262 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5263 sizeof(WDI_SetLinkReqParamsType)) ;
5264 tWDA_ReqParams *pWdaParams ;
5265 tpAniSirGlobal pMac;
5266 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5267
5268 if(NULL == pMac)
5269 {
5270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005271 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005273 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 return VOS_STATUS_E_FAILURE;
5275 }
5276
5277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005278 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 if(NULL == wdiSetLinkStateParam)
5280 {
5281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005282 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 VOS_ASSERT(0);
5284 return VOS_STATUS_E_NOMEM;
5285 }
5286 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5287 if(NULL == pWdaParams)
5288 {
5289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 VOS_ASSERT(0);
5292 vos_mem_free(wdiSetLinkStateParam);
5293 return VOS_STATUS_E_NOMEM;
5294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 if(WDA_IGNORE_SET_LINK_STATE ==
5296 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5297 {
5298 status = WDI_STATUS_E_FAILURE;
5299 }
5300 else
5301 {
5302 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5303 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5305 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5307 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 pWdaParams->pWdaContext = pWDA;
5309 /* Store remove key pointer, as this will be used for response */
5310 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 /* store Params pass it to WDI */
5312 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5313 /* Stop Timer only other than GO role and concurrent session */
5314 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005315 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5317 {
5318 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5321 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 if(IS_WDI_STATUS_FAILURE(status))
5323 {
5324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5325 "Failure in set link state Req WDI API, free all the memory " );
5326 }
5327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 if(IS_WDI_STATUS_FAILURE(status))
5329 {
5330 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005331 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 vos_mem_free(pWdaParams);
5333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 return CONVERT_WDI2VOS_STATUS(status) ;
5335}
Jeff Johnson295189b2012-06-20 16:38:30 -07005336/*
5337 * FUNCTION: WDA_GetStatsReqParamsCallback
5338 * send the response to PE with Stats received from WDI
5339 */
5340void WDA_GetStatsReqParamsCallback(
5341 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5342 void* pUserData)
5343{
5344 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5345 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5346
5347 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 pGetPEStatsRspParams =
5350 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5351 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5352
5353 if(NULL == pGetPEStatsRspParams)
5354 {
5355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005357 VOS_ASSERT(0);
5358 return;
5359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5361 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5362 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5363 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005364
5365 //Fill the Session Id Properly in PE
5366 pGetPEStatsRspParams->sessionId = 0;
5367 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005368 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5370 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 vos_mem_copy( pGetPEStatsRspParams + 1,
5372 wdiGetStatsRsp + 1,
5373 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 /* send response to UMAC*/
5375 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5376
5377 return;
5378}
5379
Jeff Johnson295189b2012-06-20 16:38:30 -07005380/*
5381 * FUNCTION: WDA_ProcessGetStatsReq
5382 * Request to WDI to get the statistics
5383 */
5384VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5385 tAniGetPEStatsReq *pGetStatsParams)
5386{
5387 WDI_Status status = WDI_STATUS_SUCCESS ;
5388 WDI_GetStatsReqParamsType wdiGetStatsParam;
5389 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005391 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5393 pGetStatsParams->staId;
5394 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5395 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005396 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 status = WDI_GetStatsReq(&wdiGetStatsParam,
5398 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 if(IS_WDI_STATUS_FAILURE(status))
5400 {
5401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5402 "Failure in Get Stats Req WDI API, free all the memory " );
5403 pGetPEStatsRspParams =
5404 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5405 if(NULL == pGetPEStatsRspParams)
5406 {
5407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005409 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005410 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 return VOS_STATUS_E_NOMEM;
5412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5414 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5415 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5416 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5417 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5418 (void *)pGetPEStatsRspParams, 0) ;
5419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 /* Free the request message */
5421 vos_mem_free(pGetStatsParams);
5422 return CONVERT_WDI2VOS_STATUS(status);
5423}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005424
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005425#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005426/*
5427 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5428 * send the response to PE with roam Rssi received from WDI
5429 */
5430void WDA_GetRoamRssiReqParamsCallback(
5431 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5432 void* pUserData)
5433{
5434 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5435 tWDA_CbContext *pWDA = NULL;
5436 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5437 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5439 "<------ %s " ,__func__);
5440 if(NULL == pWdaParams)
5441 {
5442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5443 "%s: pWdaParams received NULL", __func__);
5444 VOS_ASSERT(0) ;
5445 return ;
5446 }
5447 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5448 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5449
5450 if(NULL == pGetRoamRssiReqParams)
5451 {
5452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5453 "%s: pGetRoamRssiReqParams received NULL", __func__);
5454 VOS_ASSERT(0);
5455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5456 vos_mem_free(pWdaParams);
5457 return ;
5458 }
5459 pGetRoamRssiRspParams =
5460 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5461
5462 if(NULL == pGetRoamRssiRspParams)
5463 {
5464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5465 "%s: VOS MEM Alloc Failure", __func__);
5466 VOS_ASSERT(0);
5467 return;
5468 }
5469 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5470 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005471 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005472 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5473 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5474
5475 /* Assign get roam rssi req (backup) in to the response */
5476 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5477
5478 /* free WDI command buffer */
5479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5480 vos_mem_free(pWdaParams) ;
5481
5482 /* send response to UMAC*/
5483 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5484
5485 return;
5486}
5487
5488
5489
5490/*
5491 * FUNCTION: WDA_ProcessGetRoamRssiReq
5492 * Request to WDI to get the statistics
5493 */
5494VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5495 tAniGetRssiReq *pGetRoamRssiParams)
5496{
5497 WDI_Status status = WDI_STATUS_SUCCESS ;
5498 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5499 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5500 tWDA_ReqParams *pWdaParams = NULL;
5501
5502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5503 "------> %s " ,__func__);
5504 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5505 pGetRoamRssiParams->staId;
5506 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5507
5508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5509 if(NULL == pWdaParams)
5510 {
5511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5512 "%s: VOS MEM Alloc Failure", __func__);
5513 VOS_ASSERT(0);
5514 return VOS_STATUS_E_NOMEM;
5515 }
5516
5517 /* Store Init Req pointer, as this will be used for response */
5518 pWdaParams->pWdaContext = pWDA;
5519
5520 /* Take Get roam Rssi req backup as it stores the callback to be called after
5521 receiving the response */
5522 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5523 pWdaParams->wdaWdiApiMsgParam = NULL;
5524
5525 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5526 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5527 if(IS_WDI_STATUS_FAILURE(status))
5528 {
5529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5530 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5531 pGetRoamRssiRspParams =
5532 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5533 if(NULL == pGetRoamRssiRspParams)
5534 {
5535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5536 "%s: VOS MEM Alloc Failure", __func__);
5537 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305538 vos_mem_free(pGetRoamRssiParams);
5539 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005540 return VOS_STATUS_E_NOMEM;
5541 }
5542 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5543 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5544 pGetRoamRssiRspParams->rssi = 0;
5545 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5546 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5547 (void *)pGetRoamRssiRspParams, 0) ;
5548 }
5549 return CONVERT_WDI2VOS_STATUS(status);
5550}
5551#endif
5552
5553
Jeff Johnson295189b2012-06-20 16:38:30 -07005554/*
5555 * FUNCTION: WDA_UpdateEDCAParamCallback
5556 * call back function for Update EDCA params from WDI
5557 */
5558void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5559{
5560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5561 tEdcaParams *pEdcaParams;
5562
5563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005564 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 if(NULL == pWdaParams)
5566 {
5567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005568 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 VOS_ASSERT(0) ;
5570 return ;
5571 }
5572 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5574 vos_mem_free(pWdaParams);
5575 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 return ;
5577}
Jeff Johnson295189b2012-06-20 16:38:30 -07005578/*
5579 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5580 * Request to WDI to Update the EDCA params.
5581 */
5582VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5583 tEdcaParams *pEdcaParams)
5584{
5585 WDI_Status status = WDI_STATUS_SUCCESS ;
5586 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5587 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5588 sizeof(WDI_UpdateEDCAParamsType)) ;
5589 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005591 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 if(NULL == wdiEdcaParam)
5593 {
5594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005597 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 return VOS_STATUS_E_NOMEM;
5599 }
5600 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5601 if(NULL == pWdaParams)
5602 {
5603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 VOS_ASSERT(0);
5606 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005607 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 return VOS_STATUS_E_NOMEM;
5609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005611 /*
5612 Since firmware is not using highperformance flag, we have removed
5613 this flag from wdiEDCAInfo structure to match sizeof the structure
5614 between host and firmware.In future if we are planning to use
5615 highperformance flag then Please define this flag in wdiEDCAInfo
5616 structure, update it here and send it to firmware. i.e.
5617 Following is the original line which we removed as part of the fix
5618 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5619 pEdcaParams->highPerformance;
5620 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005621 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5622 &pEdcaParams->acbe);
5623 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5624 &pEdcaParams->acbk);
5625 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5626 &pEdcaParams->acvi);
5627 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5628 &pEdcaParams->acvo);
5629 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 pWdaParams->pWdaContext = pWDA;
5631 /* Store remove key pointer, as this will be used for response */
5632 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 /* store Params pass it to WDI */
5634 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5636 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 if(IS_WDI_STATUS_FAILURE(status))
5638 {
5639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5640 "Failure in Update EDCA Params WDI API, free all the memory " );
5641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5642 vos_mem_free(pWdaParams);
5643 vos_mem_free(pEdcaParams);
5644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 return CONVERT_WDI2VOS_STATUS(status) ;
5646}
Jeff Johnson295189b2012-06-20 16:38:30 -07005647/*
5648 * FUNCTION: WDA_AddBAReqCallback
5649 * send ADD BA RSP back to PE
5650 */
5651void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5652 void* pUserData)
5653{
5654 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5655 tWDA_CbContext *pWDA;
5656 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 if(NULL == pWdaParams)
5660 {
5661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005662 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 VOS_ASSERT(0) ;
5664 return ;
5665 }
5666 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5667 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5669 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005670 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005672 return ;
5673}
5674
Jeff Johnson295189b2012-06-20 16:38:30 -07005675/*
5676 * FUNCTION: WDA_ProcessAddBAReq
5677 * Request to WDI to Update the ADDBA REQ params.
5678 */
5679VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5680 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5681{
Jeff Johnson43971f52012-07-17 12:26:56 -07005682 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005683 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5684 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5685 sizeof(WDI_AddBAReqParamsType)) ;
5686 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005688 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 if(NULL == wdiAddBAReqParam)
5690 {
5691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005693 VOS_ASSERT(0);
5694 return VOS_STATUS_E_NOMEM;
5695 }
5696 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5697 if(NULL == pWdaParams)
5698 {
5699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005701 VOS_ASSERT(0);
5702 vos_mem_free(wdiAddBAReqParam);
5703 return VOS_STATUS_E_NOMEM;
5704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 do
5706 {
5707 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005708 wdiAddBaInfo->ucSTAIdx = staIdx ;
5709 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5710 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005711 } while(0) ;
5712 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 pWdaParams->pWdaContext = pWDA;
5714 /* store Params pass it to WDI */
5715 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5716 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005717 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5718 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005719
Jeff Johnson43971f52012-07-17 12:26:56 -07005720 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005721 {
5722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005723 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5724 status = CONVERT_WDI2VOS_STATUS(wstatus);
5725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 vos_mem_free(pWdaParams);
5727 pAddBAReqParams->status = eSIR_FAILURE;
5728 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5729 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005730 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005731}
Jeff Johnson295189b2012-06-20 16:38:30 -07005732/*
5733 * FUNCTION: WDA_AddBASessionReqCallback
5734 * send ADD BA SESSION RSP back to PE/(or TL)
5735 */
5736void WDA_AddBASessionReqCallback(
5737 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5738{
5739 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5741 tWDA_CbContext *pWDA;
5742 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005744 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 if(NULL == pWdaParams)
5746 {
5747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005748 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005749 VOS_ASSERT(0) ;
5750 return ;
5751 }
5752 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5753 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005754 if( NULL == pAddBAReqParams )
5755 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005757 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5760 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 return ;
5762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5764 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 /*
5766 * if WDA in update TL state, update TL with BA session parama and send
5767 * another request to HAL(/WDI) (ADD_BA_REQ)
5768 */
5769
5770 if((VOS_STATUS_SUCCESS ==
5771 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5772 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5773 {
5774 /* Update TL with BA info received from HAL/WDI */
5775 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5776 wdiAddBaSession->usBaSessionID,
5777 wdiAddBaSession->ucSTAIdx,
5778 wdiAddBaSession->ucBaTID,
5779 wdiAddBaSession->ucBaBufferSize,
5780 wdiAddBaSession->ucWinSize,
5781 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005782 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5783 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5784 }
5785 else
5786 {
5787 pAddBAReqParams->status =
5788 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5789
5790 /* Setting Flag to indicate that Set BA is success */
5791 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5792 {
5793 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5794 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5795 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 /*Reset the WDA state to READY */
5800 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 return ;
5802}
5803
Jeff Johnson295189b2012-06-20 16:38:30 -07005804/*
5805 * FUNCTION: WDA_ProcessAddBASessionReq
5806 * Request to WDI to Update the ADDBA REQ params.
5807 */
5808VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5809 tAddBAParams *pAddBAReqParams)
5810{
5811 WDI_Status status = WDI_STATUS_SUCCESS ;
5812 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5813 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5814 sizeof(WDI_AddBASessionReqParamsType)) ;
5815 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005816 WLANTL_STAStateType tlSTAState = 0;
5817
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005819 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005820 if(NULL == wdiAddBASessionReqParam)
5821 {
5822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005823 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005824 VOS_ASSERT(0);
5825 return VOS_STATUS_E_NOMEM;
5826 }
5827 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5828 if(NULL == pWdaParams)
5829 {
5830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 VOS_ASSERT(0);
5833 vos_mem_free(wdiAddBASessionReqParam);
5834 return VOS_STATUS_E_NOMEM;
5835 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 /*
5837 * Populate ADD BA parameters and pass these paarmeters to WDI.
5838 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5839 * the state to track if these is BA recipient case or BA initiator
5840 * case.
5841 */
5842 do
5843 {
5844 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5845 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5846 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5847 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5848 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5849 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5850 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005851 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005852 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5853 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5854 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5855 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5856 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 /* check the BA direction and update state accordingly */
5858 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5859 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5860 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5861
5862 }while(0) ;
5863 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 pWdaParams->pWdaContext = pWDA;
5865 /* Store ADD BA pointer, as this will be used for response */
5866 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5867 /* store Params pass it to WDI */
5868 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005869
5870 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5871 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5872 */
5873 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5874 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5875 {
5876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005877 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005878 status = WDI_STATUS_E_NOT_ALLOWED;
5879 pAddBAReqParams->status =
5880 CONVERT_WDI2SIR_STATUS(status) ;
5881 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5882 /*Reset the WDA state to READY */
5883 pWDA->wdaState = WDA_READY_STATE;
5884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5885 vos_mem_free(pWdaParams);
5886
5887 return CONVERT_WDI2VOS_STATUS(status) ;
5888 }
5889
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5891 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 if(IS_WDI_STATUS_FAILURE(status))
5893 {
5894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005895 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005897 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005898 pAddBAReqParams->status =
5899 CONVERT_WDI2SIR_STATUS(status) ;
5900 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005901 /*Reset the WDA state to READY */
5902 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 vos_mem_free(pWdaParams);
5905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005907}
Jeff Johnson295189b2012-06-20 16:38:30 -07005908/*
5909 * FUNCTION: WDA_DelBANotifyTL
5910 * send DEL BA IND to TL
5911 */
5912void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5913 tDelBAParams *pDelBAReqParams)
5914{
5915 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5916 //tSirMsgQ msg;
5917 vos_msg_t vosMsg;
5918 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 if(NULL == pDelBAInd)
5920 {
5921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 VOS_ASSERT(0) ;
5924 return;
5925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5927 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5928 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5929 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005930
Jeff Johnson295189b2012-06-20 16:38:30 -07005931
5932 vosMsg.type = WDA_DELETEBA_IND;
5933 vosMsg.bodyptr = pDelBAInd;
5934 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5935 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5936 {
5937 vosStatus = VOS_STATUS_E_BADMSG;
5938 }
5939}
Jeff Johnson295189b2012-06-20 16:38:30 -07005940/*
5941 * FUNCTION: WDA_DelBAReqCallback
5942 * send DEL BA RSP back to PE
5943 */
5944void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5945{
5946 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5947 tWDA_CbContext *pWDA;
5948 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005950 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 if(NULL == pWdaParams)
5952 {
5953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005954 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 VOS_ASSERT(0) ;
5956 return ;
5957 }
5958 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5959 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 /* Notify TL about DEL BA in case of recipinet */
5961 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5962 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5963 {
5964 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 /*
5967 * No respone required for WDA_DELBA_IND so just free the request
5968 * param here
5969 */
5970 vos_mem_free(pDelBAReqParams);
5971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5972 vos_mem_free(pWdaParams);
5973 return ;
5974}
5975
Jeff Johnson295189b2012-06-20 16:38:30 -07005976/*
5977 * FUNCTION: WDA_ProcessDelBAReq
5978 * Request to WDI to Update the DELBA REQ params.
5979 */
5980VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5981 tDelBAParams *pDelBAReqParams)
5982{
5983 WDI_Status status = WDI_STATUS_SUCCESS ;
5984 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5985 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5986 sizeof(WDI_DelBAReqParamsType)) ;
5987 tWDA_ReqParams *pWdaParams ;
5988 tANI_U16 staIdx = 0;
5989 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005991 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 if(NULL == wdiDelBAReqParam)
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 return VOS_STATUS_E_NOMEM;
5998 }
5999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6000 if(NULL == pWdaParams)
6001 {
6002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006004 VOS_ASSERT(0);
6005 vos_mem_free(wdiDelBAReqParam);
6006 return VOS_STATUS_E_NOMEM;
6007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006008 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6009 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6010 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6011 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 pWdaParams->pWdaContext = pWDA;
6013 /* Store DEL BA pointer, as this will be used for response */
6014 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 /* store Params pass it to WDI */
6016 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6018 * maintained in WDA, so that WDA can retry for another BA session
6019 */
6020 staIdx = pDelBAReqParams->staIdx;
6021 tid = pDelBAReqParams->baTID;
6022 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 status = WDI_DelBAReq(wdiDelBAReqParam,
6024 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 if(IS_WDI_STATUS_FAILURE(status))
6026 {
6027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6028 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6030 vos_mem_free(pWdaParams->wdaMsgParam);
6031 vos_mem_free(pWdaParams);
6032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006034}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006035
6036/*
6037 * FUNCTION: WDA_UpdateChReqCallback
6038 *
6039 */
6040void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6041{
6042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6043 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam =
6044 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6045 WDI_UpdateChannelReqType *pwdiUpdateChanReqType =
6046 &pwdiUpdateChReqParam->wdiUpdateChanParams;
6047 WDI_UpdateChannelReqinfoType *pChanInfoType =
6048 pwdiUpdateChanReqType->pchanParam;
6049 tSirUpdateChanList *pChanList =
6050 (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
6051
6052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6053 "<------ %s " ,__func__);
6054 if(NULL == pWdaParams)
6055 {
6056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6057 "%s: pWdaParams received NULL", __func__);
6058 VOS_ASSERT(0);
6059 return;
6060 }
6061
6062 /*
6063 * currently there is no response message is expected between PE and
6064 * WDA, Failure return from WDI is a ASSERT condition
6065 */
6066 vos_mem_free(pChanInfoType);
6067 vos_mem_free(pChanList);
6068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6069 vos_mem_free(pWdaParams);
6070
6071 return;
6072}
6073
6074/*
6075 * FUNCTION: WDA_ProcessUpdateChannelList
6076 * Request to WDI to Update the ChannelList params.
6077 */
6078VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6079 tSirUpdateChanList *pChanList)
6080{
6081 WDI_Status status = WDI_STATUS_SUCCESS;
6082 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6083 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6084 WDI_UpdateChannelReqinfoType *pChanInfoType;
6085 tWDA_ReqParams *pWdaParams;
6086 wpt_uint8 i;
6087
6088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6089 "------> %s " ,__func__);
6090 if(NULL == pChanList)
6091 {
6092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6093 "%s: NULL pChanList", __func__);
6094 VOS_ASSERT(0);
6095 return VOS_STATUS_E_INVAL;
6096 }
6097
6098 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6099 {
6100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6101 "Update channel list capability Not Supported");
6102 vos_mem_free(pChanList);
6103 return VOS_STATUS_E_INVAL;
6104 }
6105
6106 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6107 sizeof(WDI_UpdateChReqParamsType));
6108 if(NULL == pwdiUpdateChReqParam)
6109 {
6110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6111 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6112 __func__);
6113 VOS_ASSERT(0);
6114 vos_mem_free(pChanList);
6115 return VOS_STATUS_E_NOMEM;
6116 }
6117 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6118 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6119 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6120 pChanList->numChan);
6121 if(NULL == pChanInfoType)
6122 {
6123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6124 "%s: VOS MEM Alloc Failure", __func__);
6125 VOS_ASSERT(0);
6126 vos_mem_free(pChanList);
6127 vos_mem_free(pwdiUpdateChReqParam);
6128 return VOS_STATUS_E_NOMEM;
6129 }
6130 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6131 * pChanList->numChan);
6132 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6133
6134 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6135 if(NULL == pWdaParams)
6136 {
6137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6138 "%s: VOS MEM Alloc Failure", __func__);
6139 VOS_ASSERT(0);
6140 vos_mem_free(pChanList);
6141 vos_mem_free(pChanInfoType);
6142 vos_mem_free(pwdiUpdateChReqParam);
6143 return VOS_STATUS_E_NOMEM;
6144 }
6145 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6146
6147 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6148 {
6149 pChanInfoType->mhz =
6150 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6151
6152 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6153 pChanInfoType->band_center_freq2 = 0;
6154
6155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6156 "chan[%d] = %u", i, pChanInfoType->mhz);
6157 if (pChanList->chanParam[i].dfsSet)
6158 {
6159 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6161 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6162 pChanList->chanParam[i].dfsSet);
6163 }
6164
6165 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6166 {
6167 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6168 }
6169 else
6170 {
6171 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6172 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6173 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6174 }
6175
6176 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6177 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6178
6179 pChanInfoType++;
6180 }
6181
6182 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6183 pWdaParams->pWdaContext = pWDA;
6184 pWdaParams->wdaMsgParam = (void *)pChanList;
6185 /* store Params pass it to WDI */
6186 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6187 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6188 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6189 if(IS_WDI_STATUS_FAILURE(status))
6190 {
6191 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6192 "Failure in Update Channel REQ Params WDI API, free all the memory");
6193 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6194 vos_mem_free(pwdiUpdateChReqParam);
6195 vos_mem_free(pWdaParams->wdaMsgParam);
6196 vos_mem_free(pWdaParams);
6197 }
6198 return CONVERT_WDI2VOS_STATUS(status);
6199}
6200
Jeff Johnson295189b2012-06-20 16:38:30 -07006201/*
6202 * FUNCTION: WDA_AddTSReqCallback
6203 * send ADD TS RSP back to PE
6204 */
6205void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6206{
6207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6208 tWDA_CbContext *pWDA;
6209 tAddTsParams *pAddTsReqParams;
6210
6211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006212 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 if(NULL == pWdaParams)
6214 {
6215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006216 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 VOS_ASSERT(0) ;
6218 return ;
6219 }
6220 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6221 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6223 vos_mem_free(pWdaParams);
6224
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006225 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 return ;
6228}
6229
Jeff Johnson295189b2012-06-20 16:38:30 -07006230/*
6231 * FUNCTION: WDA_ProcessAddTSReq
6232 * Request to WDI to Update the ADD TS REQ params.
6233 */
6234VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6235 tAddTsParams *pAddTsReqParams)
6236{
6237 WDI_Status status = WDI_STATUS_SUCCESS ;
6238 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6239 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6240 sizeof(WDI_AddTSReqParamsType)) ;
6241 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006243 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006244 if(NULL == wdiAddTSReqParam)
6245 {
6246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006247 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 VOS_ASSERT(0);
6249 return VOS_STATUS_E_NOMEM;
6250 }
6251 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6252 if(NULL == pWdaParams)
6253 {
6254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006256 VOS_ASSERT(0);
6257 vos_mem_free(wdiAddTSReqParam);
6258 return VOS_STATUS_E_NOMEM;
6259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6261 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 //TS IE
6263 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6264 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6265 pAddTsReqParams->tspec.length;
6266
6267 //TS IE : TS INFO : TRAFFIC
6268 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6269 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6270 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6271 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6272 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6273 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6274 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6275 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6276 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6277 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6278 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6279 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6280 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6281 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6282 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6283 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6284
6285 //TS IE : TS INFO : SCHEDULE
6286 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6287 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6288 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6289 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006290 //TS IE
6291 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6292 pAddTsReqParams->tspec.nomMsduSz;
6293 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6294 pAddTsReqParams->tspec.maxMsduSz;
6295 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6296 pAddTsReqParams->tspec.minSvcInterval;
6297 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6298 pAddTsReqParams->tspec.maxSvcInterval;
6299 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6300 pAddTsReqParams->tspec.inactInterval;
6301 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6302 pAddTsReqParams->tspec.suspendInterval;
6303 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6304 pAddTsReqParams->tspec.svcStartTime;
6305 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6306 pAddTsReqParams->tspec.minDataRate;
6307 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6308 pAddTsReqParams->tspec.meanDataRate;
6309 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6310 pAddTsReqParams->tspec.peakDataRate;
6311 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6312 pAddTsReqParams->tspec.maxBurstSz;
6313 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6314 pAddTsReqParams->tspec.delayBound;
6315 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6316 pAddTsReqParams->tspec.minPhyRate;
6317 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6318 pAddTsReqParams->tspec.surplusBw;
6319 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6320 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 /* TODO: tAddTsParams doesn't have the following fields */
6322#if 0
6323 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6324 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6325 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6326 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6327#endif
6328 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6329
6330 pWdaParams->pWdaContext = pWDA;
6331 /* Store ADD TS pointer, as this will be used for response */
6332 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 /* store Params pass it to WDI */
6334 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 status = WDI_AddTSReq(wdiAddTSReqParam,
6336 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006337 if(IS_WDI_STATUS_FAILURE(status))
6338 {
6339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6340 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6342 vos_mem_free(pWdaParams);
6343 pAddTsReqParams->status = eSIR_FAILURE ;
6344 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006347}
6348
Jeff Johnson295189b2012-06-20 16:38:30 -07006349/*
6350 * FUNCTION: WDA_DelTSReqCallback
6351 * send DEL TS RSP back to PE
6352 */
6353void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6354{
6355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006357 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6359 vos_mem_free(pWdaParams->wdaMsgParam) ;
6360 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 /*
6362 * No respone required for WDA_DEL_TS_REQ so just free the request
6363 * param here
6364 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 return ;
6366}
6367
Jeff Johnson295189b2012-06-20 16:38:30 -07006368/*
6369 * FUNCTION: WDA_ProcessDelTSReq
6370 * Request to WDI to Update the DELTS REQ params.
6371 */
6372VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6373 tDelTsParams *pDelTSReqParams)
6374{
6375 WDI_Status status = WDI_STATUS_SUCCESS ;
6376 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6377 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6378 sizeof(WDI_DelTSReqParamsType)) ;
6379 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006381 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006382 if(NULL == wdiDelTSReqParam)
6383 {
6384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 VOS_ASSERT(0);
6387 return VOS_STATUS_E_NOMEM;
6388 }
6389 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6390 if(NULL == pWdaParams)
6391 {
6392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 VOS_ASSERT(0);
6395 vos_mem_free(wdiDelTSReqParam);
6396 return VOS_STATUS_E_NOMEM;
6397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6399 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6400 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6401 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6402 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 pWdaParams->pWdaContext = pWDA;
6404 /* Store DEL TS pointer, as this will be used for response */
6405 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 /* store Params pass it to WDI */
6407 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006408 status = WDI_DelTSReq(wdiDelTSReqParam,
6409 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 if(IS_WDI_STATUS_FAILURE(status))
6411 {
6412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6413 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6415 vos_mem_free(pWdaParams->wdaMsgParam);
6416 vos_mem_free(pWdaParams);
6417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006419}
Jeff Johnson295189b2012-06-20 16:38:30 -07006420/*
6421 * FUNCTION: WDA_UpdateBeaconParamsCallback
6422 * Free the memory. No need to send any response to PE in this case
6423 */
6424void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6425{
6426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006428 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006429 if(NULL == pWdaParams)
6430 {
6431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006432 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 VOS_ASSERT(0) ;
6434 return ;
6435 }
6436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6437 vos_mem_free(pWdaParams->wdaMsgParam) ;
6438 vos_mem_free(pWdaParams);
6439 /*
6440 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6441 * param here
6442 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 return ;
6444}
Jeff Johnson295189b2012-06-20 16:38:30 -07006445/*
6446 * FUNCTION: WDA_ProcessUpdateBeaconParams
6447 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6448 */
6449VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6450 tUpdateBeaconParams *pUpdateBeaconParams)
6451{
6452 WDI_Status status = WDI_STATUS_SUCCESS ;
6453 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6454 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6455 sizeof(WDI_UpdateBeaconParamsType)) ;
6456 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006459 if(NULL == wdiUpdateBeaconParams)
6460 {
6461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 VOS_ASSERT(0);
6464 return VOS_STATUS_E_NOMEM;
6465 }
6466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6467 if(NULL == pWdaParams)
6468 {
6469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 VOS_ASSERT(0);
6472 vos_mem_free(wdiUpdateBeaconParams);
6473 return VOS_STATUS_E_NOMEM;
6474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6476 pUpdateBeaconParams->bssIdx;
6477 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6478 pUpdateBeaconParams->fShortPreamble;
6479 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6480 pUpdateBeaconParams->fShortSlotTime;
6481 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6482 pUpdateBeaconParams->beaconInterval;
6483 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6484 pUpdateBeaconParams->llaCoexist;
6485 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6486 pUpdateBeaconParams->llbCoexist;
6487 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6488 pUpdateBeaconParams->llgCoexist;
6489 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6490 pUpdateBeaconParams->ht20MhzCoexist;
6491 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6492 pUpdateBeaconParams->llnNonGFCoexist;
6493 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6494 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6495 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6496 pUpdateBeaconParams->fRIFSMode;
6497 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6498 pUpdateBeaconParams->paramChangeBitmap;
6499 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6500
6501 pWdaParams->pWdaContext = pWDA;
6502 /* Store UpdateBeacon Req pointer, as this will be used for response */
6503 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 /* store Params pass it to WDI */
6505 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6507 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6508 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 if(IS_WDI_STATUS_FAILURE(status))
6510 {
6511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6512 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6514 vos_mem_free(pWdaParams->wdaMsgParam);
6515 vos_mem_free(pWdaParams);
6516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006517 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006518}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006519#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006520/*
6521 * FUNCTION: WDA_TSMStatsReqCallback
6522 * send TSM Stats RSP back to PE
6523 */
6524void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6525{
6526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6527 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006528 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6529 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006530
6531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006532 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 if(NULL == pWdaParams)
6534 {
6535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006536 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 VOS_ASSERT(0) ;
6538 return ;
6539 }
6540 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006541 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6542
6543 if(NULL == pGetTsmStatsReqParams)
6544 {
6545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6546 "%s: pGetTsmStatsReqParams received NULL", __func__);
6547 VOS_ASSERT(0);
6548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6549 vos_mem_free(pWdaParams);
6550 return;
6551 }
6552
6553 pTsmRspParams =
6554 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006555 if( NULL == pTsmRspParams )
6556 {
6557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006558 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 VOS_ASSERT( 0 );
6560 return ;
6561 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006562 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6563 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6564 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6565
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6567 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6568 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6569 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6570 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6571 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6572 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6573 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6574 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6575 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006576
6577 /* Assign get tsm stats req req (backup) in to the response */
6578 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6579
6580 /* free WDI command buffer */
6581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6582 vos_mem_free(pWdaParams);
6583
Jeff Johnson295189b2012-06-20 16:38:30 -07006584 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 return ;
6586}
6587
6588
Jeff Johnson295189b2012-06-20 16:38:30 -07006589/*
6590 * FUNCTION: WDA_ProcessTsmStatsReq
6591 * Request to WDI to get the TSM Stats params.
6592 */
6593VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006594 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006595{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006596 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006597 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006598 tWDA_ReqParams *pWdaParams = NULL;
6599 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6600
Jeff Johnson295189b2012-06-20 16:38:30 -07006601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006602 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006603 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6604 sizeof(WDI_TSMStatsReqParamsType));
6605 if(NULL == wdiTSMReqParam)
6606 {
6607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 VOS_ASSERT(0);
6610 return VOS_STATUS_E_NOMEM;
6611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6613 if(NULL == pWdaParams)
6614 {
6615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006617 VOS_ASSERT(0);
6618 vos_mem_free(wdiTSMReqParam);
6619 return VOS_STATUS_E_NOMEM;
6620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6622 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6623 pTsmStats->bssId,
6624 sizeof(wpt_macAddr));
6625 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6626
6627 pWdaParams->pWdaContext = pWDA;
6628 /* Store TSM Stats pointer, as this will be used for response */
6629 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006630 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 status = WDI_TSMStatsReq(wdiTSMReqParam,
6632 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 if(IS_WDI_STATUS_FAILURE(status))
6634 {
6635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6636 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006637 vos_mem_free(pWdaParams);
6638
6639 pGetTsmStatsRspParams =
6640 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6641 if(NULL == pGetTsmStatsRspParams)
6642 {
6643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6644 "%s: VOS MEM Alloc Failure", __func__);
6645 VOS_ASSERT(0);
6646 vos_mem_free(pTsmStats);
6647 return VOS_STATUS_E_NOMEM;
6648 }
6649 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6650 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6651 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6652
6653 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006655 return CONVERT_WDI2VOS_STATUS(status) ;
6656}
6657#endif
6658/*
6659 * FUNCTION: WDA_SendBeaconParamsCallback
6660 * No need to send any response to PE in this case
6661 */
6662void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6663{
6664
Jeff Johnson295189b2012-06-20 16:38:30 -07006665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006666 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006667 return ;
6668}
Jeff Johnson295189b2012-06-20 16:38:30 -07006669/*
6670 * FUNCTION: WDA_ProcessSendBeacon
6671 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6672 * start beacon trasmission
6673 */
6674VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6675 tSendbeaconParams *pSendbeaconParams)
6676{
6677 WDI_Status status = WDI_STATUS_SUCCESS ;
6678 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006680 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006681 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6682 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6683 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6684 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6686 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306687 /* p2pIeOffset should be atleast greater than timIeOffset */
6688 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6689 (pSendbeaconParams->p2pIeOffset <
6690 pSendbeaconParams->timIeOffset))
6691 {
6692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6693 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6694 VOS_ASSERT( 0 );
6695 return WDI_STATUS_E_FAILURE;
6696 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006697 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6698 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 /* Copy the beacon template to local buffer */
6700 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6701 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6702 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6703
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6705 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006706 if(IS_WDI_STATUS_FAILURE(status))
6707 {
6708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6709 "Failure in SEND BEACON REQ Params WDI API" );
6710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 vos_mem_free(pSendbeaconParams);
6712 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006713}
Jeff Johnson295189b2012-06-20 16:38:30 -07006714/*
6715 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6716 * No need to send any response to PE in this case
6717 */
6718void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6719{
Jeff Johnson295189b2012-06-20 16:38:30 -07006720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006721 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 return ;
6723}
6724
Jeff Johnson295189b2012-06-20 16:38:30 -07006725/*
6726 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6727 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6728 * send probe response
6729 */
6730VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6731 tSendProbeRespParams *pSendProbeRspParams)
6732{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006733 WDI_Status status = WDI_STATUS_SUCCESS;
6734 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6735 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006737 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006738
6739 if (!wdiSendProbeRspParam)
6740 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6741
Jeff Johnson295189b2012-06-20 16:38:30 -07006742 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006743 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006745 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 /* Copy the Probe Response template to local buffer */
6748 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006749 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006750 pSendProbeRspParams->pProbeRespTemplate,
6751 pSendProbeRspParams->probeRespTemplateLen);
6752 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006753 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6755 WDI_PROBE_REQ_BITMAP_IE_LEN);
6756
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006757 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006758
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006759 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 if(IS_WDI_STATUS_FAILURE(status))
6762 {
6763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6764 "Failure in SEND Probe RSP Params WDI API" );
6765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006767 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006769}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006770#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07006771/*
6772 * FUNCTION: WDA_SetMaxTxPowerCallBack
6773 * send the response to PE with power value received from WDI
6774 */
6775void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6776 void* pUserData)
6777{
6778 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6779 tWDA_CbContext *pWDA = NULL;
6780 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6781
6782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 if(NULL == pWdaParams)
6785 {
6786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006787 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 VOS_ASSERT(0) ;
6789 return ;
6790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6792 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 if( NULL == pMaxTxPowerParams )
6794 {
6795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006796 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006797 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6799 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 return ;
6801 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006802
Jeff Johnson295189b2012-06-20 16:38:30 -07006803
6804 /*need to free memory for the pointers used in the
6805 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6807 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006809
Jeff Johnson295189b2012-06-20 16:38:30 -07006810
6811 /* send response to UMAC*/
6812 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6813
6814 return;
6815}
Jeff Johnson295189b2012-06-20 16:38:30 -07006816/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006817 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 * Request to WDI to send set Max Tx Power Request
6819 */
6820 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6821 tMaxTxPowerParams *MaxTxPowerParams)
6822{
6823 WDI_Status status = WDI_STATUS_SUCCESS;
6824 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6825 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006826
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006828 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006829
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6831 sizeof(WDI_SetMaxTxPowerParamsType));
6832 if(NULL == wdiSetMaxTxPowerParams)
6833 {
6834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 VOS_ASSERT(0);
6837 return VOS_STATUS_E_NOMEM;
6838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6840 if(NULL == pWdaParams)
6841 {
6842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 vos_mem_free(wdiSetMaxTxPowerParams);
6845 VOS_ASSERT(0);
6846 return VOS_STATUS_E_NOMEM;
6847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 /* Copy.Max.Tx.Power Params to WDI structure */
6849 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6850 MaxTxPowerParams->bssId,
6851 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6853 MaxTxPowerParams->selfStaMacAddr,
6854 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6856 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 pWdaParams->pWdaContext = pWDA;
6859 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 /* store Params pass it to WDI */
6861 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6863 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 if(IS_WDI_STATUS_FAILURE(status))
6865 {
6866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6867 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6869 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006870 /* send response to UMAC*/
6871 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 }
6873 return CONVERT_WDI2VOS_STATUS(status);
6874
6875}
Jeff Johnson295189b2012-06-20 16:38:30 -07006876#endif
schang86c22c42013-03-13 18:41:24 -07006877
6878/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006879 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6880 * send the response to PE with power value received from WDI
6881 */
6882void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6883 *pwdiSetMaxTxPowerPerBandRsp,
6884 void* pUserData)
6885{
6886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6887 tWDA_CbContext *pWDA = NULL;
6888 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6889
6890 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6891 "<------ %s ", __func__);
6892 if (NULL == pWdaParams)
6893 {
6894 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6895 "%s: pWdaParams received NULL", __func__);
6896 VOS_ASSERT(0);
6897 return ;
6898 }
6899 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6900 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6901 if ( NULL == pMxTxPwrPerBandParams )
6902 {
6903 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6904 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6905 VOS_ASSERT(0);
6906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6907 vos_mem_free(pWdaParams);
6908 return;
6909 }
6910
6911 /*need to free memory for the pointers used in the
6912 WDA Process.Set Max Tx Power Req function*/
6913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6914 vos_mem_free(pWdaParams);
6915 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6916
6917 /* send response to UMAC*/
6918 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6919 pMxTxPwrPerBandParams, 0);
6920
6921 return;
6922}
6923
6924/*
6925 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6926 * Request to WDI to send set Max Tx Power Per band Request
6927 */
6928 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6929 tMaxTxPowerPerBandParams
6930 *MaxTxPowerPerBandParams)
6931{
6932 WDI_Status status = WDI_STATUS_SUCCESS;
6933 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6934 tWDA_ReqParams *pWdaParams = NULL;
6935
6936 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6937 "------> %s ", __func__);
6938
6939 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6940 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6941
6942 if (NULL == wdiSetMxTxPwrPerBandParams)
6943 {
6944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6945 "%s: VOS MEM Alloc Failure", __func__);
6946 VOS_ASSERT(0);
6947 return VOS_STATUS_E_NOMEM;
6948 }
6949 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6950 if (NULL == pWdaParams)
6951 {
6952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6953 "%s: VOS MEM Alloc Failure", __func__);
6954 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6955 VOS_ASSERT(0);
6956 return VOS_STATUS_E_NOMEM;
6957 }
6958 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6959 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6960 MaxTxPowerPerBandParams->bandInfo;
6961 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6962 MaxTxPowerPerBandParams->power;
6963 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6964 pWdaParams->pWdaContext = pWDA;
6965 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6966 /* store Params pass it to WDI */
6967 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6968 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6969 WDA_SetMaxTxPowerPerBandCallBack,
6970 pWdaParams);
6971 if (IS_WDI_STATUS_FAILURE(status))
6972 {
6973 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6974 "Failure in SET MAX TX Power REQ Params WDI API,"
6975 " free all the memory");
6976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6977 vos_mem_free(pWdaParams);
6978 /* send response to UMAC*/
6979 WDA_SendMsg(pWDA,
6980 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6981 MaxTxPowerPerBandParams, 0);
6982 }
6983 return CONVERT_WDI2VOS_STATUS(status);
6984}
6985
6986/*
schang86c22c42013-03-13 18:41:24 -07006987 * FUNCTION: WDA_SetTxPowerCallBack
6988 * send the response to PE with power value received from WDI
6989 */
6990void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6991 void* pUserData)
6992{
6993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6994 tWDA_CbContext *pWDA = NULL;
6995 tSirSetTxPowerReq *pTxPowerParams = NULL;
6996
6997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6998 "<------ %s ", __func__);
6999 if(NULL == pWdaParams)
7000 {
7001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7002 "%s: pWdaParams received NULL", __func__);
7003 VOS_ASSERT(0) ;
7004 return ;
7005 }
7006 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7007 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7008 if(NULL == pTxPowerParams)
7009 {
7010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7011 "%s: pTxPowerParams received NULL " ,__func__);
7012 VOS_ASSERT(0);
7013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7014 vos_mem_free(pWdaParams);
7015 return ;
7016 }
7017
7018 /*need to free memory for the pointers used in the
7019 WDA Process.Set Max Tx Power Req function*/
7020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7021 vos_mem_free(pWdaParams);
7022
7023 /* send response to UMAC*/
7024 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7025 return;
7026}
7027
7028/*
7029 * FUNCTION: WDA_ProcessSetTxPowerReq
7030 * Request to WDI to send set Tx Power Request
7031 */
7032 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7033 tSirSetTxPowerReq *txPowerParams)
7034{
7035 WDI_Status status = WDI_STATUS_SUCCESS;
7036 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7037 tWDA_ReqParams *pWdaParams = NULL;
7038
7039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7040 "------> %s ", __func__);
7041
7042 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7043 sizeof(WDI_SetTxPowerParamsType));
7044 if(NULL == wdiSetTxPowerParams)
7045 {
7046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7047 "%s: VOS MEM Alloc Failure", __func__);
7048 VOS_ASSERT(0);
7049 return VOS_STATUS_E_NOMEM;
7050 }
7051 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7052 if(NULL == pWdaParams)
7053 {
7054 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7055 "%s: VOS MEM Alloc Failure", __func__);
7056 vos_mem_free(wdiSetTxPowerParams);
7057 VOS_ASSERT(0);
7058 return VOS_STATUS_E_NOMEM;
7059 }
7060 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7061 txPowerParams->bssIdx;
7062 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7063 txPowerParams->mwPower;
7064 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7065 pWdaParams->pWdaContext = pWDA;
7066 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7067 /* store Params pass it to WDI */
7068 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7069 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7070 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7071 if(IS_WDI_STATUS_FAILURE(status))
7072 {
7073 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7074 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7076 vos_mem_free(pWdaParams);
7077 /* send response to UMAC*/
7078 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7079 }
7080 return CONVERT_WDI2VOS_STATUS(status);
7081}
7082
Jeff Johnson295189b2012-06-20 16:38:30 -07007083/*
7084 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7085 * Free the memory. No need to send any response to PE in this case
7086 */
7087void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7088{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7090
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007092 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007093
7094 if(NULL == pWdaParams)
7095 {
7096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007097 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007098 VOS_ASSERT(0) ;
7099 return ;
7100 }
7101
7102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7103 vos_mem_free(pWdaParams->wdaMsgParam) ;
7104 vos_mem_free(pWdaParams);
7105
Jeff Johnson295189b2012-06-20 16:38:30 -07007106 /*
7107 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7108 * so just free the request param here
7109 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 return ;
7111}
7112
Jeff Johnson295189b2012-06-20 16:38:30 -07007113/*
7114 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7115 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7116 */
7117VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7118 tP2pPsParams *pP2pPsConfigParams)
7119{
7120 WDI_Status status = WDI_STATUS_SUCCESS ;
7121 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7122 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7123 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007124 tWDA_ReqParams *pWdaParams = NULL;
7125
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007127 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 if(NULL == wdiSetP2PGONOAReqParam)
7129 {
7130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 VOS_ASSERT(0);
7133 return VOS_STATUS_E_NOMEM;
7134 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007135
7136 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__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007141 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007142 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007143 VOS_ASSERT(0);
7144 return VOS_STATUS_E_NOMEM;
7145 }
7146
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7148 pP2pPsConfigParams->opp_ps;
7149 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7150 pP2pPsConfigParams->ctWindow;
7151 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7152 pP2pPsConfigParams->count;
7153 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7154 pP2pPsConfigParams->duration;
7155 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7156 pP2pPsConfigParams->interval;
7157 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7158 pP2pPsConfigParams->single_noa_duration;
7159 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7160 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007161
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7163 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007164 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7165
Jeff Johnson295189b2012-06-20 16:38:30 -07007166 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007167 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7168 pWdaParams->pWdaContext = pWDA;
7169
Jeff Johnson295189b2012-06-20 16:38:30 -07007170 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007171 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7172
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 if(IS_WDI_STATUS_FAILURE(status))
7174 {
7175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7176 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7178 vos_mem_free(pWdaParams->wdaMsgParam);
7179 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 return CONVERT_WDI2VOS_STATUS(status);
7182
Jeff Johnson295189b2012-06-20 16:38:30 -07007183}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307184
7185#ifdef FEATURE_WLAN_TDLS
7186/*
7187 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7188 * Free the memory. No need to send any response to PE in this case
7189 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307190void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7191 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307192{
7193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7194 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307195 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307196
7197
7198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7199 "<------ %s " ,__func__);
7200 if(NULL == pWdaParams)
7201 {
7202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7203 "%s: pWdaParams received NULL", __func__);
7204 VOS_ASSERT(0) ;
7205 return ;
7206 }
7207 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7208
7209 if(NULL == pWdaParams)
7210 {
7211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7212 "%s: pWdaParams received NULL", __func__);
7213 VOS_ASSERT(0) ;
7214 return ;
7215 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307216 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7217 if( NULL == pTdlsLinkEstablishParams )
7218 {
7219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7220 "%s: pTdlsLinkEstablishParams "
7221 "received NULL " ,__func__);
7222 VOS_ASSERT(0);
7223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7224 vos_mem_free(pWdaParams);
7225 return ;
7226 }
7227 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7228 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307230 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307231 /* send response to UMAC*/
7232 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7233
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307234 return ;
7235}
7236
7237VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7238 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7239{
7240 WDI_Status status = WDI_STATUS_SUCCESS ;
7241 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7242 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7243 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7244 tWDA_ReqParams *pWdaParams = NULL;
7245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7246 "------> %s " ,__func__);
7247 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7248 {
7249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7250 "%s: VOS MEM Alloc Failure", __func__);
7251 VOS_ASSERT(0);
7252 return VOS_STATUS_E_NOMEM;
7253 }
7254 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7255 if(NULL == pWdaParams)
7256 {
7257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7258 "%s: VOS MEM Alloc Failure", __func__);
7259 vos_mem_free(pTdlsLinkEstablishParams);
7260 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7261 VOS_ASSERT(0);
7262 return VOS_STATUS_E_NOMEM;
7263 }
7264 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307265 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307266 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307267 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307268 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307269 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307270 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307271 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307272 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307273 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307274 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7275 pTdlsLinkEstablishParams->isOffChannelSupported;
7276
7277 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7278 pTdlsLinkEstablishParams->validChannels,
7279 pTdlsLinkEstablishParams->validChannelsLen);
7280
7281 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7282 pTdlsLinkEstablishParams->validChannelsLen;
7283
7284 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7285 pTdlsLinkEstablishParams->validOperClasses,
7286 pTdlsLinkEstablishParams->validOperClassesLen);
7287 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7288 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307289
7290 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7291 /* Store msg pointer from PE, as this will be used for response */
7292 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7293 /* store Params pass it to WDI */
7294 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7295 pWdaParams->pWdaContext = pWDA;
7296
7297 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7298 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7299 WDA_SetTDLSLinkEstablishReqParamsCallback,
7300 pWdaParams);
7301 if(IS_WDI_STATUS_FAILURE(status))
7302 {
7303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7304 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7306 vos_mem_free(pWdaParams->wdaMsgParam);
7307 vos_mem_free(pWdaParams);
7308 }
7309 return CONVERT_WDI2VOS_STATUS(status);
7310}
7311#endif
7312
7313
Jeff Johnson295189b2012-06-20 16:38:30 -07007314#ifdef WLAN_FEATURE_VOWIFI_11R
7315/*
7316 * FUNCTION: WDA_AggrAddTSReqCallback
7317 * send ADD AGGREGATED TS RSP back to PE
7318 */
7319void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7320{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7322 tWDA_CbContext *pWDA;
7323 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007324 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007326 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007327 if(NULL == pWdaParams)
7328 {
7329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007330 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007331 VOS_ASSERT(0) ;
7332 return ;
7333 }
7334
7335 pWDA = pWdaParams->pWdaContext;
7336 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007337
7338 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7339 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007340 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007343
7344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7345 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 return ;
7347}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007348/*
7349 * FUNCTION: WDA_ProcessAddTSReq
7350 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7351 */
7352VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7353 tAggrAddTsParams *pAggrAddTsReqParams)
7354{
7355 WDI_Status status = WDI_STATUS_SUCCESS ;
7356 int i;
7357 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007358 tWDA_ReqParams *pWdaParams = NULL;
7359
7360
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007362 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7364 sizeof(WDI_AggrAddTSReqParamsType)) ;
7365 if(NULL == wdiAggrAddTSReqParam)
7366 {
7367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007368 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007369 VOS_ASSERT(0);
7370 return VOS_STATUS_E_NOMEM;
7371 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007372
7373
7374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7375 if(NULL == pWdaParams)
7376 {
7377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007378 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007379 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007380 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007381 VOS_ASSERT(0);
7382 return VOS_STATUS_E_NOMEM;
7383 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7385 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7386 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7388 {
7389 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7390 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7391 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007392 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7393 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7394 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7395 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7396 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7397 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7398 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7399 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7400 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7401 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7402 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7403 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7404 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7405 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7406 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7407 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7409 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7411 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7412 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7413 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7414 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7415 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7416 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7417 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7418 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7419 pAggrAddTsReqParams->tspec[i].inactInterval;
7420 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7421 pAggrAddTsReqParams->tspec[i].suspendInterval;
7422 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7423 pAggrAddTsReqParams->tspec[i].svcStartTime;
7424 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7425 pAggrAddTsReqParams->tspec[i].minDataRate;
7426 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7427 pAggrAddTsReqParams->tspec[i].meanDataRate;
7428 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7429 pAggrAddTsReqParams->tspec[i].peakDataRate;
7430 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7431 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7432 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7433 pAggrAddTsReqParams->tspec[i].delayBound;
7434 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7435 pAggrAddTsReqParams->tspec[i].minPhyRate;
7436 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7437 pAggrAddTsReqParams->tspec[i].surplusBw;
7438 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7439 pAggrAddTsReqParams->tspec[i].mediumTime;
7440 }
7441
7442 /* TODO: tAggrAddTsParams doesn't have the following fields */
7443#if 0
7444 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7445 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7446 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7447 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7448#endif
7449 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7450
7451 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007452 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007454 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7455
7456 pWdaParams->pWdaContext = pWDA;
7457
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007459 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7460
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 if(IS_WDI_STATUS_FAILURE(status))
7462 {
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7464 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7466 vos_mem_free(pWdaParams);
7467
7468 /* send the failure response back to PE*/
7469 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7470 {
7471 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7472 }
7473
7474 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7475 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 return CONVERT_WDI2VOS_STATUS(status) ;
7478}
7479#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007480/*
Mihir Shetea4306052014-03-25 00:02:54 +05307481 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 * send Enter IMPS RSP back to PE
7483 */
Mihir Shetea4306052014-03-25 00:02:54 +05307484void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007485{
Mihir Shetea4306052014-03-25 00:02:54 +05307486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7487 tWDA_CbContext *pWDA;
7488
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307490 "<------ %s status=%d" ,__func__,status);
7491 if(NULL == pWdaParams)
7492 {
7493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7494 "%s: pWdaParams received NULL", __func__);
7495 VOS_ASSERT(0);
7496 return;
7497 }
7498
7499 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7500
7501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7502 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007503 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 return ;
7505}
Mihir Shetea4306052014-03-25 00:02:54 +05307506
7507
7508/*
7509 * FUNCTION: WDA_EnterImpsReqCallback
7510 * Free memory and send Enter IMPS RSP back to PE.
7511 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7512 */
7513void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7514{
7515 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7516 tWDA_CbContext *pWDA;
7517
7518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7519 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7520
7521 if(NULL == pWdaParams)
7522 {
7523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7524 "%s: pWdaParams received NULL", __func__);
7525 VOS_ASSERT(0);
7526 return;
7527 }
7528
7529 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7530
7531 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7532 {
7533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7534 vos_mem_free(pWdaParams);
7535 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7536 CONVERT_WDI2SIR_STATUS(wdiStatus));
7537 }
7538
7539 return;
7540}
Jeff Johnson295189b2012-06-20 16:38:30 -07007541/*
7542 * FUNCTION: WDA_ProcessEnterImpsReq
7543 * Request to WDI to Enter IMPS power state.
7544 */
7545VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7546{
7547 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307548 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7549 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007551 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307552
7553
7554 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7555 if (NULL == wdiEnterImpsReqParams)
7556 {
7557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7558 "%s: VOS MEM Alloc Failure", __func__);
7559 VOS_ASSERT(0);
7560 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7561 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7562 return VOS_STATUS_E_NOMEM;
7563 }
7564
7565 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7566 if (NULL == pWdaParams)
7567 {
7568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7569 "%s: VOS MEM Alloc Failure", __func__);
7570 VOS_ASSERT(0);
7571 vos_mem_free(wdiEnterImpsReqParams);
7572 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7573 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7574 return VOS_STATUS_E_NOMEM;
7575 }
7576
7577 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7578 wdiEnterImpsReqParams->pUserData = pWdaParams;
7579
7580 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7581 pWdaParams->wdaMsgParam = NULL;
7582 pWdaParams->pWdaContext = pWDA;
7583
7584 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7585 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7586 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007587 if(IS_WDI_STATUS_FAILURE(status))
7588 {
7589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7590 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05307591 vos_mem_free(wdiEnterImpsReqParams);
7592 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007593 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007595 return CONVERT_WDI2VOS_STATUS(status) ;
7596}
Jeff Johnson295189b2012-06-20 16:38:30 -07007597/*
7598 * FUNCTION: WDA_ExitImpsReqCallback
7599 * send Exit IMPS RSP back to PE
7600 */
7601void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7602{
7603 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007605 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007606 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 return ;
7608}
Jeff Johnson295189b2012-06-20 16:38:30 -07007609/*
7610 * FUNCTION: WDA_ProcessExitImpsReq
7611 * Request to WDI to Exit IMPS power state.
7612 */
7613VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7614{
7615 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007617 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007618 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007619 if(IS_WDI_STATUS_FAILURE(status))
7620 {
7621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7622 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007623 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 return CONVERT_WDI2VOS_STATUS(status) ;
7626}
Jeff Johnson295189b2012-06-20 16:38:30 -07007627/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007628 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007629 * send Enter BMPS RSP back to PE
7630 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007631void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007632{
7633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7634 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007635 tEnterBmpsParams *pEnterBmpsRspParams;
7636
Jeff Johnson295189b2012-06-20 16:38:30 -07007637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007638 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 if(NULL == pWdaParams)
7640 {
7641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007642 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007643 VOS_ASSERT(0) ;
7644 return ;
7645 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007646
7647 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7648 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7649
7650 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007651 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007652
7653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007654 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007655 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7656
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 return ;
7658}
Jeff Johnson295189b2012-06-20 16:38:30 -07007659/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007660 * FUNCTION: WDA_EnterBmpsReqCallback
7661 * Free memory and send Enter BMPS RSP back to PE.
7662 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7663 */
7664void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7665{
7666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7667 tWDA_CbContext *pWDA;
7668 tEnterBmpsParams *pEnterBmpsRspParams;
7669
7670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7671 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7672
7673 if(NULL == pWdaParams)
7674 {
7675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7676 "%s: pWdaParams received NULL", __func__);
7677 VOS_ASSERT(0);
7678 return;
7679 }
7680
7681 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7682 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7683 pEnterBmpsRspParams->status = wdiStatus;
7684
7685 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7686 {
7687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7688 vos_mem_free(pWdaParams);
7689 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7690 }
7691
7692 return;
7693}
7694/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007695 * FUNCTION: WDA_ProcessEnterBmpsReq
7696 * Request to WDI to Enter BMPS power state.
7697 */
7698VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7699 tEnterBmpsParams *pEnterBmpsReqParams)
7700{
7701 WDI_Status status = WDI_STATUS_SUCCESS;
7702 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7703 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007705 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007706 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7707 {
7708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007709 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 VOS_ASSERT(0);
7711 return VOS_STATUS_E_FAILURE;
7712 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7714 if (NULL == wdiEnterBmpsReqParams)
7715 {
7716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007718 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007719 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7720 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 return VOS_STATUS_E_NOMEM;
7722 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007723 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7724 if (NULL == pWdaParams)
7725 {
7726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007727 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 VOS_ASSERT(0);
7729 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007730 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7731 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007732 return VOS_STATUS_E_NOMEM;
7733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7735 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7736 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7737 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007738 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07007739 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7740 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7741 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007742 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7743 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007744
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 /* Store param pointer as passed in by caller */
7746 /* store Params pass it to WDI */
7747 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007748 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007751 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 if (IS_WDI_STATUS_FAILURE(status))
7753 {
7754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7755 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007757 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007759 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007761 return CONVERT_WDI2VOS_STATUS(status);
7762}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007763
7764
7765static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7766 WDI_Status wdiStatus,
7767 tExitBmpsParams *pExitBmpsReqParams)
7768{
7769 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7770
7771 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7772}
7773
7774
Jeff Johnson295189b2012-06-20 16:38:30 -07007775/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007776 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 * send Exit BMPS RSP back to PE
7778 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007779void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007780{
7781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7782 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007783 tExitBmpsParams *pExitBmpsRspParams;
7784
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007786 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 if(NULL == pWdaParams)
7788 {
7789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007790 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 VOS_ASSERT(0) ;
7792 return ;
7793 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007794
7795 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7796 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7797
7798 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007799 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007800
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7802 vos_mem_free(pWdaParams) ;
7803
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007804 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 return ;
7806}
Jeff Johnson295189b2012-06-20 16:38:30 -07007807/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007808 * FUNCTION: WDA_ExitBmpsReqCallback
7809 * Free memory and send Exit BMPS RSP back to PE.
7810 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7811 */
7812void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7813{
7814 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7815 tWDA_CbContext *pWDA;
7816 tExitBmpsParams *pExitBmpsRspParams;
7817
7818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7819 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7820
7821 if(NULL == pWdaParams)
7822 {
7823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7824 "%s: pWdaParams received NULL", __func__);
7825 VOS_ASSERT(0);
7826 return;
7827 }
7828
7829 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7830 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7831 pExitBmpsRspParams->status = wdiStatus;
7832
7833 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7834 {
7835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7836 vos_mem_free(pWdaParams);
7837 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7838 }
7839
7840 return;
7841}
7842/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 * FUNCTION: WDA_ProcessExitBmpsReq
7844 * Request to WDI to Exit BMPS power state.
7845 */
7846VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7847 tExitBmpsParams *pExitBmpsReqParams)
7848{
7849 WDI_Status status = WDI_STATUS_SUCCESS ;
7850 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7851 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7852 sizeof(WDI_ExitBmpsReqParamsType)) ;
7853 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007855 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007856 if(NULL == wdiExitBmpsReqParams)
7857 {
7858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007861 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007862 return VOS_STATUS_E_NOMEM;
7863 }
7864 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7865 if(NULL == pWdaParams)
7866 {
7867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007868 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007869 VOS_ASSERT(0);
7870 vos_mem_free(wdiExitBmpsReqParams);
7871 return VOS_STATUS_E_NOMEM;
7872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007874
7875 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7876
Yue Ma7f44bbe2013-04-12 11:47:39 -07007877 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7878 wdiExitBmpsReqParams->pUserData = pWdaParams;
7879
Jeff Johnson295189b2012-06-20 16:38:30 -07007880 /* Store param pointer as passed in by caller */
7881 /* store Params pass it to WDI */
7882 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7883 pWdaParams->pWdaContext = pWDA;
7884 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007886 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 if(IS_WDI_STATUS_FAILURE(status))
7888 {
7889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7890 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7892 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007893 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007895 return CONVERT_WDI2VOS_STATUS(status) ;
7896}
Jeff Johnson295189b2012-06-20 16:38:30 -07007897/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007898 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 * send Enter UAPSD RSP back to PE
7900 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007901void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007902{
7903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7904 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007905 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007907 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007908 if(NULL == pWdaParams)
7909 {
7910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007911 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 VOS_ASSERT(0) ;
7913 return ;
7914 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007915
7916 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7917 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7918
7919 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007920 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007921
Jeff Johnson295189b2012-06-20 16:38:30 -07007922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7923 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007924 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 return ;
7926}
Jeff Johnson295189b2012-06-20 16:38:30 -07007927/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007928 * FUNCTION: WDA_EnterUapsdReqCallback
7929 * Free memory and send Enter UAPSD RSP back to PE.
7930 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7931 */
7932void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7933{
7934 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7935 tWDA_CbContext *pWDA;
7936 tUapsdParams *pEnterUapsdRsqParams;
7937
7938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7939 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7940
7941 if(NULL == pWdaParams)
7942 {
7943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7944 "%s: pWdaParams received NULL", __func__);
7945 VOS_ASSERT(0);
7946 return;
7947 }
7948
7949 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7950 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7951 pEnterUapsdRsqParams->status = wdiStatus;
7952
7953 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7954 {
7955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7956 vos_mem_free(pWdaParams);
7957 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7958 }
7959
7960 return;
7961}
7962/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007963 * FUNCTION: WDA_ProcessEnterUapsdReq
7964 * Request to WDI to Enter UAPSD power state.
7965 */
7966VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7967 tUapsdParams *pEnterUapsdReqParams)
7968{
7969 WDI_Status status = WDI_STATUS_SUCCESS ;
7970 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7971 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7972 sizeof(WDI_EnterUapsdReqParamsType)) ;
7973 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007975 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 if(NULL == wdiEnterUapsdReqParams)
7977 {
7978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007980 VOS_ASSERT(0);
7981 return VOS_STATUS_E_NOMEM;
7982 }
7983 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7984 if(NULL == pWdaParams)
7985 {
7986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007987 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 VOS_ASSERT(0);
7989 vos_mem_free(wdiEnterUapsdReqParams);
7990 return VOS_STATUS_E_NOMEM;
7991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7993 pEnterUapsdReqParams->beDeliveryEnabled;
7994 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7995 pEnterUapsdReqParams->beTriggerEnabled;
7996 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7997 pEnterUapsdReqParams->bkDeliveryEnabled;
7998 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7999 pEnterUapsdReqParams->bkTriggerEnabled;
8000 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8001 pEnterUapsdReqParams->viDeliveryEnabled;
8002 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8003 pEnterUapsdReqParams->viTriggerEnabled;
8004 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8005 pEnterUapsdReqParams->voDeliveryEnabled;
8006 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8007 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008008 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008009
Yue Ma7f44bbe2013-04-12 11:47:39 -07008010 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8011 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008012
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 /* Store param pointer as passed in by caller */
8014 /* store Params pass it to WDI */
8015 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8016 pWdaParams->pWdaContext = pWDA;
8017 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008019 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 if(IS_WDI_STATUS_FAILURE(status))
8021 {
8022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8023 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8024 vos_mem_free(pWdaParams->wdaMsgParam) ;
8025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8026 vos_mem_free(pWdaParams) ;
8027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 return CONVERT_WDI2VOS_STATUS(status) ;
8029}
Jeff Johnson295189b2012-06-20 16:38:30 -07008030/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008031 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 * send Exit UAPSD RSP back to PE
8033 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008034void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008035{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008036
8037 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8038 tWDA_CbContext *pWDA;
8039 tExitUapsdParams *pExitUapsdRspParams;
8040
Jeff Johnson295189b2012-06-20 16:38:30 -07008041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008042 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008043 if(NULL == pWdaParams)
8044 {
8045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008046 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008047 VOS_ASSERT(0);
8048 return;
8049 }
8050
8051 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8052 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8053
8054 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008055 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008056
8057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8058 vos_mem_free(pWdaParams) ;
8059
8060 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 return ;
8062}
Jeff Johnson295189b2012-06-20 16:38:30 -07008063/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008064 * FUNCTION: WDA_ExitUapsdReqCallback
8065 * Free memory and send Exit UAPSD RSP back to PE.
8066 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8067 */
8068void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8069{
8070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8071 tWDA_CbContext *pWDA;
8072 tExitUapsdParams *pExitUapsdRspParams;
8073
8074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8075 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8076
8077 if(NULL == pWdaParams)
8078 {
8079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8080 "%s: pWdaParams received NULL", __func__);
8081 VOS_ASSERT(0);
8082 return;
8083 }
8084
8085 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8086 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8087 pExitUapsdRspParams->status = wdiStatus;
8088
8089 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8090 {
8091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8092 vos_mem_free(pWdaParams);
8093 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8094 }
8095
8096 return;
8097}
8098/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 * FUNCTION: WDA_ProcessExitUapsdReq
8100 * Request to WDI to Exit UAPSD power state.
8101 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008102VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8103 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008104{
8105 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008106 tWDA_ReqParams *pWdaParams ;
8107 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8108 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8109 sizeof(WDI_ExitUapsdReqParamsType)) ;
8110
Jeff Johnson295189b2012-06-20 16:38:30 -07008111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008112 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008113
8114 if(NULL == wdiExitUapsdReqParams)
8115 {
8116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008117 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008118 VOS_ASSERT(0);
8119 return VOS_STATUS_E_NOMEM;
8120 }
8121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8122 if(NULL == pWdaParams)
8123 {
8124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008125 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008126 VOS_ASSERT(0);
8127 vos_mem_free(wdiExitUapsdReqParams);
8128 return VOS_STATUS_E_NOMEM;
8129 }
8130
8131 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008132 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8133 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008134
8135 /* Store param pointer as passed in by caller */
8136 /* store Params pass it to WDI */
8137 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8138 pWdaParams->pWdaContext = pWDA;
8139 pWdaParams->wdaMsgParam = pExitUapsdParams;
8140
Yue Ma7f44bbe2013-04-12 11:47:39 -07008141 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 if(IS_WDI_STATUS_FAILURE(status))
8143 {
8144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8145 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008146 vos_mem_free(pWdaParams->wdaMsgParam) ;
8147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8148 vos_mem_free(pWdaParams) ;
8149
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008151 return CONVERT_WDI2VOS_STATUS(status) ;
8152}
8153
Jeff Johnson295189b2012-06-20 16:38:30 -07008154/*
8155 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8156 *
8157 */
8158void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8159{
8160 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008162 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008163 if(NULL == pWdaParams)
8164 {
8165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008166 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008167 VOS_ASSERT(0) ;
8168 return ;
8169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 if( pWdaParams != NULL )
8171 {
8172 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8173 {
8174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8175 }
8176 if( pWdaParams->wdaMsgParam != NULL )
8177 {
8178 vos_mem_free(pWdaParams->wdaMsgParam) ;
8179 }
8180 vos_mem_free(pWdaParams) ;
8181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 return ;
8183}
Jeff Johnson295189b2012-06-20 16:38:30 -07008184/*
8185 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8186 * Request to WDI to set the power save params at start.
8187 */
8188VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8189 tSirPowerSaveCfg *pPowerSaveCfg)
8190{
8191 WDI_Status status = WDI_STATUS_SUCCESS ;
8192 tHalCfg *tlvStruct = NULL ;
8193 tANI_U8 *tlvStructStart = NULL ;
8194 v_PVOID_t *configParam;
8195 tANI_U32 configParamSize;
8196 tANI_U32 *configDataValue;
8197 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8198 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008200 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8202 {
8203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008204 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008205 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008206 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008207 return VOS_STATUS_E_FAILURE;
8208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8210 if (NULL == wdiPowerSaveCfg)
8211 {
8212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008213 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008214 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008215 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008216 return VOS_STATUS_E_NOMEM;
8217 }
8218 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8219 if(NULL == pWdaParams)
8220 {
8221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008223 VOS_ASSERT(0);
8224 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008225 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008226 return VOS_STATUS_E_NOMEM;
8227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008228 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8229 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008230 if(NULL == configParam)
8231 {
8232 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008233 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008234 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 vos_mem_free(pWdaParams);
8236 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008237 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008238 return VOS_STATUS_E_NOMEM;
8239 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008240 vos_mem_set(configParam, configParamSize, 0);
8241 wdiPowerSaveCfg->pConfigBuffer = configParam;
8242 tlvStruct = (tHalCfg *)configParam;
8243 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008244 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8245 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8246 tlvStruct->length = sizeof(tANI_U32);
8247 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8248 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008249 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8250 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8252 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8253 tlvStruct->length = sizeof(tANI_U32);
8254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8255 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8257 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8259 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8260 tlvStruct->length = sizeof(tANI_U32);
8261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8262 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8264 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8266 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8267 tlvStruct->length = sizeof(tANI_U32);
8268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8269 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008270 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8271 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8273 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8274 tlvStruct->length = sizeof(tANI_U32);
8275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8276 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008277 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8278 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8280 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8281 tlvStruct->length = sizeof(tANI_U32);
8282 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8283 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8285 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8287 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8288 tlvStruct->length = sizeof(tANI_U32);
8289 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8290 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8292 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008293 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8294 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8295 tlvStruct->length = sizeof(tANI_U32);
8296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8297 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8298 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8299 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8301 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8302 tlvStruct->length = sizeof(tANI_U32);
8303 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8304 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8305 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8306 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8308 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8309 tlvStruct->length = sizeof(tANI_U32);
8310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8311 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8313 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008314 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8315 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8316 tlvStruct->length = sizeof(tANI_U32);
8317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8318 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008319 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8320 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008321 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 /* store Params pass it to WDI */
8324 pWdaParams->wdaMsgParam = configParam;
8325 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8326 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8328 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 if(IS_WDI_STATUS_FAILURE(status))
8330 {
8331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8332 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8333 vos_mem_free(pWdaParams->wdaMsgParam);
8334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8335 vos_mem_free(pWdaParams);
8336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008338 return CONVERT_WDI2VOS_STATUS(status);
8339}
Jeff Johnson295189b2012-06-20 16:38:30 -07008340/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008341 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008342 *
8343 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008344void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008345{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8347
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008349 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008350
8351 if(NULL == pWdaParams)
8352 {
8353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8354 "%s: pWdaParams received NULL", __func__);
8355 VOS_ASSERT(0);
8356 return ;
8357 }
8358
8359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 vos_mem_free(pWdaParams);
8361
Jeff Johnson295189b2012-06-20 16:38:30 -07008362 return ;
8363}
Jeff Johnson295189b2012-06-20 16:38:30 -07008364/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008365 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8366 * Free memory.
8367 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8368 */
8369void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8370{
8371 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8372
8373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8374 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8375
8376 if(NULL == pWdaParams)
8377 {
8378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8379 "%s: pWdaParams received NULL", __func__);
8380 VOS_ASSERT(0);
8381 return;
8382 }
8383
8384 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8385 {
8386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8387 vos_mem_free(pWdaParams);
8388 }
8389
8390 return;
8391}
8392/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008393 * FUNCTION: WDA_SetUapsdAcParamsReq
8394 * Request to WDI to set the UAPSD params for an ac (sta mode).
8395 */
8396VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8397 tUapsdInfo *pUapsdInfo)
8398{
8399 WDI_Status status = WDI_STATUS_SUCCESS;
8400 tWDA_CbContext *pWDA = NULL ;
8401 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8402 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8403 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8404 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008406 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 if(NULL == wdiUapsdParams)
8408 {
8409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 VOS_ASSERT(0);
8412 return VOS_STATUS_E_NOMEM;
8413 }
8414 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8415 if(NULL == pWdaParams)
8416 {
8417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 VOS_ASSERT(0);
8420 vos_mem_free(wdiUapsdParams);
8421 return VOS_STATUS_E_NOMEM;
8422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8424 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8425 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8426 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8427 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8428 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008429 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8430 wdiUapsdParams->pUserData = pWdaParams;
8431
Jeff Johnson295189b2012-06-20 16:38:30 -07008432 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 pWdaParams->pWdaContext = pWDA;
8434 /* Store param pointer as passed in by caller */
8435 pWdaParams->wdaMsgParam = pUapsdInfo;
8436 /* store Params pass it to WDI */
8437 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008439 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008440 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008441 if(IS_WDI_STATUS_FAILURE(status))
8442 {
8443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8444 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8446 vos_mem_free(pWdaParams);
8447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008448 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8449 return VOS_STATUS_SUCCESS;
8450 else
8451 return VOS_STATUS_E_FAILURE;
8452
Jeff Johnson295189b2012-06-20 16:38:30 -07008453}
8454/*
8455 * FUNCTION: WDA_ClearUapsdAcParamsReq
8456 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8457 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8458 * and again enter the UPASD with the modified params. Hence the disable
8459 * function was kept empty.
8460 *
8461 */
8462VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8463{
8464 /* do nothing */
8465 return VOS_STATUS_SUCCESS;
8466}
Jeff Johnson295189b2012-06-20 16:38:30 -07008467/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008468 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008469 *
8470 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008471void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008472{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8474
Jeff Johnson295189b2012-06-20 16:38:30 -07008475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008476 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008477
8478 if(NULL == pWdaParams)
8479 {
8480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008481 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008482 VOS_ASSERT(0) ;
8483 return ;
8484 }
8485
8486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8487 vos_mem_free(pWdaParams->wdaMsgParam);
8488 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008489
Jeff Johnson295189b2012-06-20 16:38:30 -07008490 //print a msg, nothing else to do
8491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008492 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 return ;
8494}
Jeff Johnson295189b2012-06-20 16:38:30 -07008495/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008496 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8497 * Free memory.
8498 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8499 */
8500void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8501{
8502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8503
8504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8505 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8506
8507 if(NULL == pWdaParams)
8508 {
8509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8510 "%s: pWdaParams received NULL", __func__);
8511 VOS_ASSERT(0);
8512 return;
8513 }
8514
8515 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8516 {
8517 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8518 vos_mem_free(pWdaParams->wdaMsgParam);
8519 vos_mem_free(pWdaParams);
8520 }
8521
8522 return;
8523}
8524/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 * FUNCTION: WDA_UpdateUapsdParamsReq
8526 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8527 */
8528VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8529 tUpdateUapsdParams* pUpdateUapsdInfo)
8530{
8531 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008532 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8534 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8535 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008536 tWDA_ReqParams *pWdaParams = NULL;
8537
Jeff Johnson295189b2012-06-20 16:38:30 -07008538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008539 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008540 if(NULL == wdiUpdateUapsdParams)
8541 {
8542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008543 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008544 VOS_ASSERT(0);
8545 return VOS_STATUS_E_NOMEM;
8546 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008547 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8548 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8549 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008550 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8551 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008552
8553 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8554 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 {
8556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008558 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008559 vos_mem_free(pUpdateUapsdInfo);
8560 vos_mem_free(wdiUpdateUapsdParams);
8561 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008562 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008563 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008564 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008566 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8567 pWdaParams->pWdaContext = pWDA;
8568
Jeff Johnson43971f52012-07-17 12:26:56 -07008569 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008570 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008571 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008572
Jeff Johnson43971f52012-07-17 12:26:56 -07008573 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008574 {
8575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8576 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008577 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8579 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008580 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008581 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008582 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008583}
Jeff Johnson295189b2012-06-20 16:38:30 -07008584/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008585 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 *
8587 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008588void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008589{
8590 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008592 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 if(WDI_STATUS_SUCCESS != wdiStatus)
8594 {
8595 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008596 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008598 if(NULL == pWdaParams)
8599 {
8600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008601 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 VOS_ASSERT(0) ;
8603 return ;
8604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8606 vos_mem_free(pWdaParams->wdaMsgParam);
8607 vos_mem_free(pWdaParams);
8608 return ;
8609}
Jeff Johnson295189b2012-06-20 16:38:30 -07008610/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008611 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8612 * Free memory.
8613 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8614 */
8615void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8616{
8617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8618
8619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8620 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8621
8622 if(NULL == pWdaParams)
8623 {
8624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8625 "%s: pWdaParams received NULL", __func__);
8626 VOS_ASSERT(0);
8627 return;
8628 }
8629
8630 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8631 {
8632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8633 vos_mem_free(pWdaParams->wdaMsgParam);
8634 vos_mem_free(pWdaParams);
8635 }
8636
8637 return;
8638}
8639/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008640 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8641 *
8642 */
8643VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8644 tSirWlanSetRxpFilters *pWlanSuspendParam)
8645{
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008647 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8649 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8650 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8651 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008653 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 if(NULL == wdiRxpFilterParams)
8655 {
8656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 VOS_ASSERT(0);
8659 vos_mem_free(pWlanSuspendParam);
8660 return VOS_STATUS_E_NOMEM;
8661 }
8662 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8663 if(NULL == pWdaParams)
8664 {
8665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008666 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008667 VOS_ASSERT(0);
8668 vos_mem_free(wdiRxpFilterParams);
8669 vos_mem_free(pWlanSuspendParam);
8670 return VOS_STATUS_E_NOMEM;
8671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8673 pWlanSuspendParam->setMcstBcstFilter;
8674 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8675 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8676
Yue Ma7f44bbe2013-04-12 11:47:39 -07008677 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8678 wdiRxpFilterParams->pUserData = pWdaParams;
8679
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 pWdaParams->pWdaContext = pWDA;
8681 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8682 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008683 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008684 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008685 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008686 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008687 {
8688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8689 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008690 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8692 vos_mem_free(pWdaParams->wdaMsgParam);
8693 vos_mem_free(pWdaParams);
8694 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008695 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008696}
Jeff Johnson295189b2012-06-20 16:38:30 -07008697/*
8698 * FUNCTION: WDA_WdiIndicationCallback
8699 *
8700 */
8701void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8702 void* pUserData)
8703{
8704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008705 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008706}
Jeff Johnson295189b2012-06-20 16:38:30 -07008707/*
8708 * FUNCTION: WDA_ProcessWlanSuspendInd
8709 *
8710 */
8711VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8712 tSirWlanSuspendParam *pWlanSuspendParam)
8713{
8714 WDI_Status wdiStatus;
8715 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008717 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8719 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8720 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8721 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008723 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8724 if(WDI_STATUS_PENDING == wdiStatus)
8725 {
8726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008727 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 }
8729 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8730 {
8731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008732 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 vos_mem_free(pWlanSuspendParam);
8735 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8736}
8737
Chet Lanctot186b5732013-03-18 10:26:30 -07008738#ifdef WLAN_FEATURE_11W
8739/*
8740 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8741 *
8742 */
8743VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8744 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8745{
8746 WDI_Status wdiStatus;
8747 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8749 "------> %s ", __func__);
8750
8751 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8752 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8753 sizeof(tSirMacAddr));
8754
8755 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8756 wdiExclUnencryptParams.pUserData = pWDA;
8757
8758 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8759 if(WDI_STATUS_PENDING == wdiStatus)
8760 {
8761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8762 "Pending received for %s:%d ", __func__, __LINE__ );
8763 }
8764 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8765 {
8766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8767 "Failure in %s:%d ", __func__, __LINE__ );
8768 }
8769 vos_mem_free(pExclUnencryptParam);
8770 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8771}
8772#endif
8773
Jeff Johnson295189b2012-06-20 16:38:30 -07008774/*
8775 * FUNCTION: WDA_ProcessWlanResumeCallback
8776 *
8777 */
8778void WDA_ProcessWlanResumeCallback(
8779 WDI_SuspendResumeRspParamsType *resumeRspParams,
8780 void* pUserData)
8781{
8782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008784 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 if(NULL == pWdaParams)
8786 {
8787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008788 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008789 VOS_ASSERT(0) ;
8790 return ;
8791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8793 {
8794 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008795 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8798 vos_mem_free(pWdaParams->wdaMsgParam);
8799 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 return ;
8801}
Jeff Johnson295189b2012-06-20 16:38:30 -07008802/*
8803 * FUNCTION: WDA_ProcessWlanResumeReq
8804 *
8805 */
8806VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8807 tSirWlanResumeParam *pWlanResumeParam)
8808{
8809 WDI_Status wdiStatus;
8810 WDI_ResumeParamsType *wdiResumeParams =
8811 (WDI_ResumeParamsType *)vos_mem_malloc(
8812 sizeof(WDI_ResumeParamsType) ) ;
8813 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008815 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 if(NULL == wdiResumeParams)
8817 {
8818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008820 VOS_ASSERT(0);
8821 return VOS_STATUS_E_NOMEM;
8822 }
8823 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8824 if(NULL == pWdaParams)
8825 {
8826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 VOS_ASSERT(0);
8829 vos_mem_free(wdiResumeParams);
8830 return VOS_STATUS_E_NOMEM;
8831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008832 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8833 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008835 wdiResumeParams->wdiReqStatusCB = NULL;
8836 pWdaParams->wdaMsgParam = pWlanResumeParam;
8837 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8838 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008839 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8840 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8841 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8843 {
8844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8845 "Failure in Host Resume REQ WDI API, free all the memory " );
8846 VOS_ASSERT(0);
8847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8848 vos_mem_free(pWdaParams->wdaMsgParam);
8849 vos_mem_free(pWdaParams);
8850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8852}
8853
Jeff Johnson295189b2012-06-20 16:38:30 -07008854/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008855 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008856 *
8857 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008858void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008859{
8860 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008862 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008863 if(NULL == pWdaParams)
8864 {
8865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008866 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008867 VOS_ASSERT(0) ;
8868 return ;
8869 }
8870
8871 vos_mem_free(pWdaParams->wdaMsgParam) ;
8872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8873 vos_mem_free(pWdaParams) ;
8874 /*
8875 * No respone required for SetBeaconFilter req so just free the request
8876 * param here
8877 */
8878
Jeff Johnson295189b2012-06-20 16:38:30 -07008879 return ;
8880}
Jeff Johnson295189b2012-06-20 16:38:30 -07008881/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008882 * FUNCTION: WDA_SetBeaconFilterReqCallback
8883 * Free memory.
8884 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8885 */
8886void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8887{
8888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8889
8890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8891 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8892
8893 if(NULL == pWdaParams)
8894 {
8895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8896 "%s: pWdaParams received NULL", __func__);
8897 VOS_ASSERT(0);
8898 return;
8899 }
8900
8901 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8902 {
8903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8904 vos_mem_free(pWdaParams->wdaMsgParam);
8905 vos_mem_free(pWdaParams);
8906 }
8907
8908 return;
8909}
8910/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008911 * FUNCTION: WDA_SetBeaconFilterReq
8912 * Request to WDI to send the beacon filtering related information.
8913 */
8914VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8915 tBeaconFilterMsg* pBeaconFilterInfo)
8916{
8917 WDI_Status status = WDI_STATUS_SUCCESS;
8918 tANI_U8 *dstPtr, *srcPtr;
8919 tANI_U8 filterLength;
8920 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8921 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8922 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8923 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008925 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008926 if(NULL == wdiBeaconFilterInfo)
8927 {
8928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008929 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008930 VOS_ASSERT(0);
8931 return VOS_STATUS_E_NOMEM;
8932 }
8933 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8934 if(NULL == pWdaParams)
8935 {
8936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008937 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008938 VOS_ASSERT(0);
8939 vos_mem_free(wdiBeaconFilterInfo);
8940 return VOS_STATUS_E_NOMEM;
8941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008942 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8943 pBeaconFilterInfo->beaconInterval;
8944 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8945 pBeaconFilterInfo->capabilityInfo;
8946 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8947 pBeaconFilterInfo->capabilityMask;
8948 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008949
8950 //Fill the BssIdx
8951 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8952
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 //Fill structure with info contained in the beaconFilterTable
8954 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8955 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8956 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8957 if(WDI_BEACON_FILTER_LEN < filterLength)
8958 {
8959 filterLength = WDI_BEACON_FILTER_LEN;
8960 }
8961 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008962 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8963 wdiBeaconFilterInfo->pUserData = pWdaParams;
8964
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 /* Store param pointer as passed in by caller */
8966 /* store Params pass it to WDI */
8967 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8968 pWdaParams->pWdaContext = pWDA;
8969 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8970
Jeff Johnson295189b2012-06-20 16:38:30 -07008971 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008972 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 if(IS_WDI_STATUS_FAILURE(status))
8974 {
8975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8976 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8977 vos_mem_free(pWdaParams->wdaMsgParam) ;
8978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8979 vos_mem_free(pWdaParams) ;
8980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008981 return CONVERT_WDI2VOS_STATUS(status) ;
8982}
Jeff Johnson295189b2012-06-20 16:38:30 -07008983/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008984 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008985 *
8986 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008987void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008988{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8990
Jeff Johnson295189b2012-06-20 16:38:30 -07008991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008992 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008993
8994 if(NULL == pWdaParams)
8995 {
8996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008997 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008998 VOS_ASSERT(0) ;
8999 return ;
9000 }
9001
9002 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9003 vos_mem_free(pWdaParams->wdaMsgParam);
9004 vos_mem_free(pWdaParams);
9005
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 //print a msg, nothing else to do
9007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009008 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 return ;
9010}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009011/*
9012 * FUNCTION: WDA_RemBeaconFilterReqCallback
9013 * Free memory.
9014 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9015 */
9016void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9017{
9018 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9019
9020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9021 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9022
9023 if(NULL == pWdaParams)
9024 {
9025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9026 "%s: pWdaParams received NULL", __func__);
9027 VOS_ASSERT(0);
9028 return;
9029 }
9030
9031 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9032 {
9033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9034 vos_mem_free(pWdaParams->wdaMsgParam);
9035 vos_mem_free(pWdaParams);
9036 }
9037
9038 return;
9039}
Jeff Johnson295189b2012-06-20 16:38:30 -07009040 // TODO: PE does not have this feature for now implemented,
9041 // but the support for removing beacon filter exists between
9042 // HAL and FW. This function can be called whenever PE defines
9043 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009044/*
9045 * FUNCTION: WDA_RemBeaconFilterReq
9046 * Request to WDI to send the removal of beacon filtering related information.
9047 */
9048VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9049 tRemBeaconFilterMsg* pBeaconFilterInfo)
9050{
9051 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009052 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9054 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9055 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009056 tWDA_ReqParams *pWdaParams ;
9057
Jeff Johnson295189b2012-06-20 16:38:30 -07009058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009059 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009060 if(NULL == wdiBeaconFilterInfo)
9061 {
9062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009064 VOS_ASSERT(0);
9065 return VOS_STATUS_E_NOMEM;
9066 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009067 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9068 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009069 {
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);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009073 vos_mem_free(wdiBeaconFilterInfo);
9074 vos_mem_free(pBeaconFilterInfo);
9075 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009077
9078 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9079 pBeaconFilterInfo->ucIeCount;
9080 //Fill structure with info contained in the ucRemIeId
9081 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9082 pBeaconFilterInfo->ucRemIeId,
9083 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9084 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9085 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009086
9087 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009088 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009090 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9091
9092 pWdaParams->pWdaContext = pWDA;
9093
Jeff Johnson43971f52012-07-17 12:26:56 -07009094 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009095 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009096 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009097 {
9098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9099 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009100 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9102 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009103 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009104 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009105 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009106}
Jeff Johnson295189b2012-06-20 16:38:30 -07009107/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009108 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009109 *
9110 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009111void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009112{
9113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009115 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009116 if(NULL == pWdaParams)
9117 {
9118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009119 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009120 VOS_ASSERT(0) ;
9121 return ;
9122 }
9123
9124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9125 vos_mem_free(pWdaParams) ;
9126
Jeff Johnson295189b2012-06-20 16:38:30 -07009127 return ;
9128}
Jeff Johnson295189b2012-06-20 16:38:30 -07009129/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009130 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9131 * Free memory.
9132 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9133 */
9134void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9135{
9136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9137
9138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9139 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9140
9141 if(NULL == pWdaParams)
9142 {
9143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9144 "%s: pWdaParams received NULL", __func__);
9145 VOS_ASSERT(0);
9146 return;
9147 }
9148
9149 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9150 {
9151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9152 vos_mem_free(pWdaParams);
9153 }
9154
9155 return;
9156}
9157/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 * FUNCTION: WDA_SetRSSIThresholdsReq
9159 * Request to WDI to set the RSSI thresholds (sta mode).
9160 */
9161VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9162{
9163 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009164 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 tWDA_CbContext *pWDA = NULL ;
9166 v_PVOID_t pVosContext = NULL;
9167 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9168 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9169 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9170 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009172 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 if(NULL == wdiRSSIThresholdsInfo)
9174 {
9175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009177 VOS_ASSERT(0);
9178 return VOS_STATUS_E_NOMEM;
9179 }
9180 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9181 if(NULL == pWdaParams)
9182 {
9183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009185 VOS_ASSERT(0);
9186 vos_mem_free(wdiRSSIThresholdsInfo);
9187 return VOS_STATUS_E_NOMEM;
9188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9191 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9192 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9194 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9195 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9197 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9198 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009199 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9200 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9202 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9203
Jeff Johnson295189b2012-06-20 16:38:30 -07009204 /* Store param pointer as passed in by caller */
9205 /* store Params pass it to WDI */
9206 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9207 pWdaParams->pWdaContext = pWDA;
9208 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009209 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009210 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009211 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 {
9213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9214 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009215 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9217 vos_mem_free(pWdaParams) ;
9218 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009219 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009220
9221}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009222/*
Yue Madb90ac12013-04-04 13:39:13 -07009223 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 *
9225 */
Yue Madb90ac12013-04-04 13:39:13 -07009226void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009227{
9228 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9229
9230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009231 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009232 if(NULL == pWdaParams)
9233 {
9234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009235 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009236 VOS_ASSERT(0) ;
9237 return ;
9238 }
9239
9240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9241 vos_mem_free(pWdaParams->wdaMsgParam);
9242 vos_mem_free(pWdaParams) ;
9243
9244 //print a msg, nothing else to do
9245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009246 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009247 return ;
9248}
Jeff Johnson295189b2012-06-20 16:38:30 -07009249/*
Yue Madb90ac12013-04-04 13:39:13 -07009250 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009251 * Free memory.
9252 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009253 */
9254void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9255{
9256 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9257
9258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9259 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9260
9261 if(NULL == pWdaParams)
9262 {
9263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9264 "%s: Invalid pWdaParams pointer", __func__);
9265 VOS_ASSERT(0);
9266 return;
9267 }
9268
9269 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9270 {
9271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9272 vos_mem_free(pWdaParams->wdaMsgParam);
9273 vos_mem_free(pWdaParams);
9274 }
9275
9276 return;
9277}
9278/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 * FUNCTION: WDA_ProcessHostOffloadReq
9280 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9281 * to broadcast traffic (sta mode).
9282 */
9283VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9284 tSirHostOffloadReq *pHostOffloadParams)
9285{
9286 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009287 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9289 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9290 sizeof(WDI_HostOffloadReqParamsType)) ;
9291 tWDA_ReqParams *pWdaParams ;
9292
9293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009294 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009295
9296 if(NULL == wdiHostOffloadInfo)
9297 {
9298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009299 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 VOS_ASSERT(0);
9301 return VOS_STATUS_E_NOMEM;
9302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009303 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9304 if(NULL == pWdaParams)
9305 {
9306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009307 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 VOS_ASSERT(0);
9309 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009310 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009311 return VOS_STATUS_E_NOMEM;
9312 }
9313
9314 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9315 pHostOffloadParams->offloadType;
9316 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9317 pHostOffloadParams->enableOrDisable;
9318
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009319 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9320 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9321
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9323 {
9324 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9325 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9326 pHostOffloadParams->params.hostIpv4Addr,
9327 4);
9328 break;
9329 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9330 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9331 pHostOffloadParams->params.hostIpv6Addr,
9332 16);
9333 break;
9334 case SIR_IPV6_NS_OFFLOAD:
9335 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9336 pHostOffloadParams->params.hostIpv6Addr,
9337 16);
9338
9339#ifdef WLAN_NS_OFFLOAD
9340 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9341 {
9342 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9343 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9344 16);
9345 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9346 }
9347 else
9348 {
9349 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9350 }
9351
9352 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9353 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9354 16);
9355 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9356 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9357 6);
9358
9359 //Only two are supported so let's go through them without a loop
9360 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9361 {
9362 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9363 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9364 16);
9365 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9366 }
9367 else
9368 {
9369 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9370 }
9371
9372 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9373 {
9374 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9375 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9376 16);
9377 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9378 }
9379 else
9380 {
9381 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9382 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309383 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9384 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 break;
9386#endif //WLAN_NS_OFFLOAD
9387 default:
9388 {
9389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9390 "No Handling for Offload Type %x in WDA "
9391 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9392 //WDA_VOS_ASSERT(0) ;
9393 }
9394 }
Yue Madb90ac12013-04-04 13:39:13 -07009395 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9396 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009397
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009399 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009400 /* store Params pass it to WDI */
9401 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9402 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009403
Jeff Johnson295189b2012-06-20 16:38:30 -07009404
Jeff Johnson43971f52012-07-17 12:26:56 -07009405 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009406 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009407
Jeff Johnson43971f52012-07-17 12:26:56 -07009408 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 {
9410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9411 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009412 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9414 vos_mem_free(pWdaParams->wdaMsgParam);
9415 vos_mem_free(pWdaParams) ;
9416 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009417 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009418
9419}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009420/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009421 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009422 *
9423 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009424void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009425{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9427
Jeff Johnson295189b2012-06-20 16:38:30 -07009428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009429 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009430
9431 if(NULL == pWdaParams)
9432 {
9433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009434 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009435 VOS_ASSERT(0) ;
9436 return ;
9437 }
9438
9439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9440 vos_mem_free(pWdaParams->wdaMsgParam);
9441 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009442
Jeff Johnson295189b2012-06-20 16:38:30 -07009443 //print a msg, nothing else to do
9444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009445 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009446 return ;
9447}
Jeff Johnson295189b2012-06-20 16:38:30 -07009448/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009449 * FUNCTION: WDA_KeepAliveReqCallback
9450 * Free memory.
9451 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9452 */
9453void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9454{
9455 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9456
9457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9458 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9459
9460 if(NULL == pWdaParams)
9461 {
9462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9463 "%s: pWdaParams received NULL", __func__);
9464 VOS_ASSERT(0);
9465 return;
9466 }
9467
9468 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9469 {
9470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9471 vos_mem_free(pWdaParams->wdaMsgParam);
9472 vos_mem_free(pWdaParams);
9473 }
9474
9475 return;
9476}
9477/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 * FUNCTION: WDA_ProcessKeepAliveReq
9479 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9480 * wakeup due to broadcast traffic (sta mode).
9481 */
9482VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9483 tSirKeepAliveReq *pKeepAliveParams)
9484{
9485 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009486 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9488 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9489 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009490 tWDA_ReqParams *pWdaParams;
9491
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009493 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009494 if(NULL == wdiKeepAliveInfo)
9495 {
9496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009498 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009499 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 return VOS_STATUS_E_NOMEM;
9501 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009502
9503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9504 if(NULL == pWdaParams)
9505 {
9506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009507 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009508 VOS_ASSERT(0);
9509 vos_mem_free(wdiKeepAliveInfo);
9510 vos_mem_free(pKeepAliveParams);
9511 return VOS_STATUS_E_NOMEM;
9512 }
9513
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9515 pKeepAliveParams->packetType;
9516 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9517 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009518
9519 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9520 pKeepAliveParams->bssId,
9521 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009522
9523 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9524 {
9525 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9526 pKeepAliveParams->hostIpv4Addr,
9527 SIR_IPV4_ADDR_LEN);
9528 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9529 pKeepAliveParams->destIpv4Addr,
9530 SIR_IPV4_ADDR_LEN);
9531 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9532 pKeepAliveParams->destMacAddr,
9533 SIR_MAC_ADDR_LEN);
9534 }
9535 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9536 {
9537 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9538 SIR_IPV4_ADDR_LEN,
9539 0);
9540 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9541 SIR_IPV4_ADDR_LEN,
9542 0);
9543 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9544 SIR_MAC_ADDR_LEN,
9545 0);
9546 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009547 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9548 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009549
Jeff Johnson295189b2012-06-20 16:38:30 -07009550 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009551 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009552 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009553 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9554 pWdaParams->pWdaContext = pWDA;
9555
Jeff Johnson295189b2012-06-20 16:38:30 -07009556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9557 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9558 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9559 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9560 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9562 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9563 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9564 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9565 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9567 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9568 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9569 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9570 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9571 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9572 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9573 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9575 "TimePeriod %d PacketType %d",
9576 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9577 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009578 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009579 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009580
Jeff Johnson43971f52012-07-17 12:26:56 -07009581 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009582 {
9583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9584 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009585 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9587 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009588 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009590 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009591
9592}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009593/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009594 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009595 *
9596 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009597void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009598 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9599 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009600{
9601 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009603 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 if(NULL == pWdaParams)
9605 {
9606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009607 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 VOS_ASSERT(0) ;
9609 return ;
9610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9612 vos_mem_free(pWdaParams->wdaMsgParam);
9613 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009614 return ;
9615}
Jeff Johnson295189b2012-06-20 16:38:30 -07009616/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009617 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9618 * Free memory.
9619 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9620 */
9621void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9622{
9623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9624
9625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9626 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9627
9628 if(NULL == pWdaParams)
9629 {
9630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9631 "%s: pWdaParams received NULL", __func__);
9632 VOS_ASSERT(0);
9633 return;
9634 }
9635
9636 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9637 {
9638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9639 vos_mem_free(pWdaParams->wdaMsgParam);
9640 vos_mem_free(pWdaParams);
9641 }
9642
9643 return;
9644}
9645
9646/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009647 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9648 * Request to WDI to add WOWL Bcast pattern
9649 */
9650VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9651 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9652{
9653 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009654 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009655 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9656 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9657 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9658 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009660 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009661 if(NULL == wdiWowlAddBcPtrnInfo)
9662 {
9663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009664 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 VOS_ASSERT(0);
9666 return VOS_STATUS_E_NOMEM;
9667 }
9668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9669 if(NULL == pWdaParams)
9670 {
9671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009672 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009673 VOS_ASSERT(0);
9674 vos_mem_free(wdiWowlAddBcPtrnInfo);
9675 return VOS_STATUS_E_NOMEM;
9676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9678 pWowlAddBcPtrnParams->ucPatternId;
9679 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9680 pWowlAddBcPtrnParams->ucPatternByteOffset;
9681 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9682 pWowlAddBcPtrnParams->ucPatternMaskSize;
9683 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9684 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009685 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9686 {
9687 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9688 pWowlAddBcPtrnParams->ucPattern,
9689 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9690 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9691 pWowlAddBcPtrnParams->ucPatternMask,
9692 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9693 }
9694 else
9695 {
9696 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9697 pWowlAddBcPtrnParams->ucPattern,
9698 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9699 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9700 pWowlAddBcPtrnParams->ucPatternMask,
9701 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9702
9703 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9704 pWowlAddBcPtrnParams->ucPatternExt,
9705 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9706 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9707 pWowlAddBcPtrnParams->ucPatternMaskExt,
9708 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9709 }
9710
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009711 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9712 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9713
Yue Ma7f44bbe2013-04-12 11:47:39 -07009714 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9715 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009716 /* Store param pointer as passed in by caller */
9717 /* store Params pass it to WDI */
9718 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9719 pWdaParams->pWdaContext = pWDA;
9720 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009721 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009722 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009723 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 {
9725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9726 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009727 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009728 vos_mem_free(pWdaParams->wdaMsgParam) ;
9729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9730 vos_mem_free(pWdaParams) ;
9731 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009732 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009733
9734}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009735/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009736 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009737 *
9738 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009739void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009740 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9741 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009742{
9743 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009745 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009746 if(NULL == pWdaParams)
9747 {
9748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009749 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009750 VOS_ASSERT(0) ;
9751 return ;
9752 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009753 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9754 vos_mem_free(pWdaParams->wdaMsgParam);
9755 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009756 return ;
9757}
Jeff Johnson295189b2012-06-20 16:38:30 -07009758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009759 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9760 * Free memory.
9761 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9762 */
9763void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9764{
9765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9766
9767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9768 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9769
9770 if(NULL == pWdaParams)
9771 {
9772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9773 "%s: pWdaParams received NULL", __func__);
9774 VOS_ASSERT(0);
9775 return;
9776 }
9777
9778 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9779 {
9780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9781 vos_mem_free(pWdaParams->wdaMsgParam);
9782 vos_mem_free(pWdaParams);
9783 }
9784
9785 return;
9786}
9787/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009788 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9789 * Request to WDI to delete WOWL Bcast pattern
9790 */
9791VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9792 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9793{
9794 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009795 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009796 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9797 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9798 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9799 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009801 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009802 if(NULL == wdiWowlDelBcPtrnInfo)
9803 {
9804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009806 VOS_ASSERT(0);
9807 return VOS_STATUS_E_NOMEM;
9808 }
9809 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9810 if(NULL == pWdaParams)
9811 {
9812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 VOS_ASSERT(0);
9815 vos_mem_free(wdiWowlDelBcPtrnInfo);
9816 return VOS_STATUS_E_NOMEM;
9817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9819 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009820
9821 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9822 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9823
Yue Ma7f44bbe2013-04-12 11:47:39 -07009824 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9825 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009826 /* Store param pointer as passed in by caller */
9827 /* store Params pass it to WDI */
9828 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9829 pWdaParams->pWdaContext = pWDA;
9830 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009831 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009832 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009833 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009834 {
9835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9836 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009837 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009838 vos_mem_free(pWdaParams->wdaMsgParam) ;
9839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9840 vos_mem_free(pWdaParams) ;
9841 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009842 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009843
9844}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009845/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009846 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009847 *
9848 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009849void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009850{
9851 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9852 tWDA_CbContext *pWDA;
9853 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009855 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009856 if(NULL == pWdaParams)
9857 {
9858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009859 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009860 VOS_ASSERT(0) ;
9861 return ;
9862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009863 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9864 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9865
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009866 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9867
Jeff Johnson295189b2012-06-20 16:38:30 -07009868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9869 vos_mem_free(pWdaParams) ;
9870
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009871 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009872 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009874 return ;
9875}
Jeff Johnson295189b2012-06-20 16:38:30 -07009876/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009877 * FUNCTION: WDA_WowlEnterReqCallback
9878 * Free memory and send WOWL Enter RSP back to PE.
9879 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9880 */
9881void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9882{
9883 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9884 tWDA_CbContext *pWDA;
9885 tSirHalWowlEnterParams *pWowlEnterParams;
9886
9887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9888 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9889
9890 if(NULL == pWdaParams)
9891 {
9892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9893 "%s: pWdaParams received NULL", __func__);
9894 VOS_ASSERT(0);
9895 return;
9896 }
9897
9898 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9899 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9900 pWowlEnterParams->status = wdiStatus;
9901
9902 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9903 {
9904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9905 vos_mem_free(pWdaParams);
9906 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9907 }
9908
9909 return;
9910}
9911/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 * FUNCTION: WDA_ProcessWowlEnterReq
9913 * Request to WDI to enter WOWL
9914 */
9915VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9916 tSirHalWowlEnterParams *pWowlEnterParams)
9917{
9918 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009919 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9921 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9922 sizeof(WDI_WowlEnterReqParamsType)) ;
9923 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009925 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 if(NULL == wdiWowlEnterInfo)
9927 {
9928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009929 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 VOS_ASSERT(0);
9931 return VOS_STATUS_E_NOMEM;
9932 }
9933 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9934 if(NULL == pWdaParams)
9935 {
9936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009937 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 VOS_ASSERT(0);
9939 vos_mem_free(wdiWowlEnterInfo);
9940 return VOS_STATUS_E_NOMEM;
9941 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009942
9943 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9944
Jeff Johnson295189b2012-06-20 16:38:30 -07009945 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9946 pWowlEnterParams->magicPtrn,
9947 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9949 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9951 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9953 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9955 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9957 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9959 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9961 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009962 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9963 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009964#ifdef WLAN_WAKEUP_EVENTS
9965 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9966 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9967
9968 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9969 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9970
9971 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9972 pWowlEnterParams->ucWowNetScanOffloadMatch;
9973
9974 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9975 pWowlEnterParams->ucWowGTKRekeyError;
9976
9977 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9978 pWowlEnterParams->ucWoWBSSConnLoss;
9979#endif // WLAN_WAKEUP_EVENTS
9980
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009981 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9982 pWowlEnterParams->bssIdx;
9983
Yue Ma7f44bbe2013-04-12 11:47:39 -07009984 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9985 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009986 /* Store param pointer as passed in by caller */
9987 /* store Params pass it to WDI */
9988 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9989 pWdaParams->pWdaContext = pWDA;
9990 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009991 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009992 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009993 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 {
9995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9996 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009997 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 vos_mem_free(pWdaParams->wdaMsgParam) ;
9999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10000 vos_mem_free(pWdaParams) ;
10001 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010002 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010003
10004}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010005/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010006 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010007 *
10008 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010009void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010010{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010011 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10012 tWDA_CbContext *pWDA;
10013 tSirHalWowlExitParams *pWowlExitParams;
10014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010015 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010016 if(NULL == pWdaParams)
10017 {
10018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010019 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010020 VOS_ASSERT(0) ;
10021 return ;
10022 }
10023 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10024 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10025
10026 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010027 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010028
10029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10030 vos_mem_free(pWdaParams) ;
10031
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010033 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010034 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 return ;
10036}
Jeff Johnson295189b2012-06-20 16:38:30 -070010037/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010038 * FUNCTION: WDA_WowlExitReqCallback
10039 * Free memory and send WOWL Exit RSP back to PE.
10040 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10041 */
10042void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10043{
10044 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10045 tWDA_CbContext *pWDA;
10046 tSirHalWowlExitParams *pWowlExitParams;
10047
10048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10049 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10050
10051 if(NULL == pWdaParams)
10052 {
10053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10054 "%s: pWdaParams received NULL", __func__);
10055 VOS_ASSERT(0);
10056 return;
10057 }
10058
10059 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10060 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10061 pWowlExitParams->status = wdiStatus;
10062
10063 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10064 {
10065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10066 vos_mem_free(pWdaParams);
10067 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10068 }
10069
10070 return;
10071}
10072/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010073 * FUNCTION: WDA_ProcessWowlExitReq
10074 * Request to WDI to add WOWL Bcast pattern
10075 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010076VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10077 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010078{
10079 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010080 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010081 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10082 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10083 sizeof(WDI_WowlExitReqParamsType)) ;
10084 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010086 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010087 if(NULL == wdiWowlExitInfo)
10088 {
10089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010090 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010091 VOS_ASSERT(0);
10092 return VOS_STATUS_E_NOMEM;
10093 }
10094 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10095 if(NULL == pWdaParams)
10096 {
10097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010098 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010099 VOS_ASSERT(0);
10100 vos_mem_free(wdiWowlExitInfo);
10101 return VOS_STATUS_E_NOMEM;
10102 }
10103
10104 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10105 pWowlExitParams->bssIdx;
10106
Yue Ma7f44bbe2013-04-12 11:47:39 -070010107 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10108 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010109
10110 /* Store param pointer as passed in by caller */
10111 /* store Params pass it to WDI */
10112 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10113 pWdaParams->pWdaContext = pWDA;
10114 pWdaParams->wdaMsgParam = pWowlExitParams;
10115
10116 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010117 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010118
Jeff Johnson43971f52012-07-17 12:26:56 -070010119 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 {
10121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10122 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010123 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10125 vos_mem_free(pWdaParams->wdaMsgParam);
10126 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010127 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010128 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010129}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010130/*
10131 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10132 * Request to WDI to determine whether a given station is capable of
10133 * using HW-based frame translation
10134 */
10135v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10136 tANI_U8 staIdx)
10137{
10138 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10139}
Jeff Johnson295189b2012-06-20 16:38:30 -070010140/*
10141 * FUNCTION: WDA_NvDownloadReqCallback
10142 * send NV Download RSP back to PE
10143 */
10144void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10145 void* pUserData)
10146{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010147
10148 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10149 tWDA_CbContext *pWDA;
10150
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010152 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010153
10154 if(NULL == pWdaParams)
10155 {
10156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010157 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010158 VOS_ASSERT(0) ;
10159 return ;
10160 }
10161
10162 pWDA = pWdaParams->pWdaContext;
10163
Jeff Johnson295189b2012-06-20 16:38:30 -070010164 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10166 vos_mem_free(pWdaParams);
10167
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010169 return ;
10170}
Jeff Johnson295189b2012-06-20 16:38:30 -070010171/*
10172 * FUNCTION: WDA_ProcessNvDownloadReq
10173 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10174 */
10175VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10176{
10177 /* Initialize the local Variables*/
10178 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10179 v_VOID_t *pNvBuffer=NULL;
10180 v_SIZE_t bufferSize = 0;
10181 WDI_Status status = WDI_STATUS_E_FAILURE;
10182 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010183 tWDA_ReqParams *pWdaParams ;
10184
Jeff Johnson295189b2012-06-20 16:38:30 -070010185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 if(NULL == pWDA)
10188 {
10189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010190 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010191 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 return VOS_STATUS_E_FAILURE;
10193 }
10194
10195 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010196 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10197
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10199 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010200 if(NULL == wdiNvDownloadReqParam)
10201 {
10202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 VOS_ASSERT(0);
10205 return VOS_STATUS_E_NOMEM;
10206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 /* Copy Params to wdiNvDownloadReqParam*/
10208 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10209 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010210
10211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10212 if(NULL == pWdaParams)
10213 {
10214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010215 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010216 VOS_ASSERT(0);
10217 vos_mem_free(wdiNvDownloadReqParam);
10218 return VOS_STATUS_E_NOMEM;
10219 }
10220
Jeff Johnson295189b2012-06-20 16:38:30 -070010221 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010222 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10223 pWdaParams->wdaMsgParam = NULL;
10224 pWdaParams->pWdaContext = pWDA;
10225
10226
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010228
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010230 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10231
Jeff Johnson295189b2012-06-20 16:38:30 -070010232 if(IS_WDI_STATUS_FAILURE(status))
10233 {
10234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10235 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10237 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010238 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010239 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010240}
10241/*
10242 * FUNCTION: WDA_FlushAcReqCallback
10243 * send Flush AC RSP back to TL
10244 */
10245void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10246{
10247 vos_msg_t wdaMsg = {0} ;
10248 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10249 tFlushACReq *pFlushACReqParams;
10250 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010252 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 if(NULL == pWdaParams)
10254 {
10255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010256 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010257 VOS_ASSERT(0) ;
10258 return ;
10259 }
10260
10261 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10262 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10263 if(NULL == pFlushACRspParams)
10264 {
10265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010268 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 return ;
10270 }
10271 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10272 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10273 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10274 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10275 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010276 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 vos_mem_free(pWdaParams->wdaMsgParam) ;
10278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10279 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10281 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10282 // POST message to TL
10283 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10284
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 return ;
10286}
Jeff Johnson295189b2012-06-20 16:38:30 -070010287/*
10288 * FUNCTION: WDA_ProcessFlushAcReq
10289 * Request to WDI to Update the DELBA REQ params.
10290 */
10291VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10292 tFlushACReq *pFlushAcReqParams)
10293{
10294 WDI_Status status = WDI_STATUS_SUCCESS ;
10295 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10296 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10297 sizeof(WDI_FlushAcReqParamsType)) ;
10298 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010299 if(NULL == wdiFlushAcReqParam)
10300 {
10301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010303 VOS_ASSERT(0);
10304 return VOS_STATUS_E_NOMEM;
10305 }
10306 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10307 if(NULL == pWdaParams)
10308 {
10309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010310 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010311 VOS_ASSERT(0);
10312 vos_mem_free(wdiFlushAcReqParam);
10313 return VOS_STATUS_E_NOMEM;
10314 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010316 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010317 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10318 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10319 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10320 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 /* Store Flush AC pointer, as this will be used for response */
10322 /* store Params pass it to WDI */
10323 pWdaParams->pWdaContext = pWDA;
10324 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10325 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010326 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10327 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 if(IS_WDI_STATUS_FAILURE(status))
10329 {
10330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10331 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10332 vos_mem_free(pWdaParams->wdaMsgParam) ;
10333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10334 vos_mem_free(pWdaParams) ;
10335 //TODO: respond to TL with failure
10336 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010337 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010338}
Jeff Johnson295189b2012-06-20 16:38:30 -070010339/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010340 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010341 *
10342 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010343void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010344{
10345 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10346 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010347 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010348
10349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010350 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 if(NULL == pWdaParams)
10352 {
10353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010354 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010355 VOS_ASSERT(0) ;
10356 return ;
10357 }
10358 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10359 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10360 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10361 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10362 {
10363 pWDA->wdaAmpSessionOn = VOS_FALSE;
10364 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 vos_mem_free(pWdaParams->wdaMsgParam) ;
10366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10367 vos_mem_free(pWdaParams) ;
10368 /*
10369 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10370 * param here
10371 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010372 return ;
10373}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010374/*
10375 * FUNCTION: WDA_BtAmpEventReqCallback
10376 * Free memory.
10377 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10378 */
10379void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10380{
10381 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10382 tWDA_CbContext *pWDA;
10383 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010384
Yue Ma7f44bbe2013-04-12 11:47:39 -070010385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10386 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10387
10388 if(NULL == pWdaParams)
10389 {
10390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10391 "%s: pWdaParams received NULL", __func__);
10392 VOS_ASSERT(0);
10393 return;
10394 }
10395
10396 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10397 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10398
10399 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10400 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10401 {
10402 pWDA->wdaAmpSessionOn = VOS_FALSE;
10403 }
10404
10405 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10406 {
10407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10408 vos_mem_free(pWdaParams->wdaMsgParam);
10409 vos_mem_free(pWdaParams);
10410 }
10411
10412 return;
10413}
Jeff Johnson295189b2012-06-20 16:38:30 -070010414/*
10415 * FUNCTION: WDA_ProcessBtAmpEventReq
10416 * Request to WDI to Update with BT AMP events.
10417 */
10418VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10419 tSmeBtAmpEvent *pBtAmpEventParams)
10420{
10421 WDI_Status status = WDI_STATUS_SUCCESS ;
10422 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10423 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10424 sizeof(WDI_BtAmpEventParamsType)) ;
10425 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010427 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010428 if(NULL == wdiBtAmpEventParam)
10429 {
10430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010432 VOS_ASSERT(0);
10433 return VOS_STATUS_E_NOMEM;
10434 }
10435 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10436 if(NULL == pWdaParams)
10437 {
10438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010440 VOS_ASSERT(0);
10441 vos_mem_free(wdiBtAmpEventParam);
10442 return VOS_STATUS_E_NOMEM;
10443 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010444 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10445 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010446 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10447 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010448 /* Store BT AMP event pointer, as this will be used for response */
10449 /* store Params pass it to WDI */
10450 pWdaParams->pWdaContext = pWDA;
10451 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10452 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010453 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010454 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 if(IS_WDI_STATUS_FAILURE(status))
10456 {
10457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10458 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10459 vos_mem_free(pWdaParams->wdaMsgParam) ;
10460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10461 vos_mem_free(pWdaParams) ;
10462 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010463 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10464 {
10465 pWDA->wdaAmpSessionOn = VOS_TRUE;
10466 }
10467 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010468}
10469
Jeff Johnson295189b2012-06-20 16:38:30 -070010470/*
10471 * FUNCTION: WDA_FTMCommandReqCallback
10472 * Handle FTM CMD response came from HAL
10473 * Route responce to HDD FTM
10474 */
10475void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10476 void *usrData)
10477{
10478 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010479 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10480 {
10481 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010482 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 return;
10484 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010485 /* Release Current FTM Command Request */
10486 vos_mem_free(pWDA->wdaFTMCmdReq);
10487 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010488 /* Post FTM Responce to HDD FTM */
10489 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010490 return;
10491}
Jeff Johnson295189b2012-06-20 16:38:30 -070010492/*
10493 * FUNCTION: WDA_ProcessFTMCommand
10494 * Send FTM command to WDI
10495 */
10496VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10497 tPttMsgbuffer *pPTTFtmCmd)
10498{
10499 WDI_Status status = WDI_STATUS_SUCCESS;
10500 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010501 ftmCMDReq = (WDI_FTMCommandReqType *)
10502 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10503 if(NULL == ftmCMDReq)
10504 {
10505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10506 "WDA FTM Command buffer alloc fail");
10507 return VOS_STATUS_E_NOMEM;
10508 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010509 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10510 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010511 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010512 /* Send command to WDI */
10513 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010514 return status;
10515}
Jeff Johnsone7245742012-09-05 17:12:55 -070010516#ifdef FEATURE_OEM_DATA_SUPPORT
10517/*
10518 * FUNCTION: WDA_StartOemDataReqCallback
10519 *
10520 */
10521void WDA_StartOemDataReqCallback(
10522 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10523 void* pUserData)
10524{
10525 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10527 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010528 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010529
Jeff Johnsone7245742012-09-05 17:12:55 -070010530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010531 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010532
10533 if(NULL == pWdaParams)
10534 {
10535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010536 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010537 VOS_ASSERT(0) ;
10538 return ;
10539 }
10540 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10541
Jeff Johnsone7245742012-09-05 17:12:55 -070010542 if(NULL == pWDA)
10543 {
10544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010545 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010546 VOS_ASSERT(0);
10547 return ;
10548 }
10549
10550 /*
10551 * Allocate memory for response params sent to PE
10552 */
10553 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10554
10555 // Check if memory is allocated for OemdataMeasRsp Params.
10556 if(NULL == pOemDataRspParams)
10557 {
10558 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10559 "OEM DATA WDA callback alloc fail");
10560 VOS_ASSERT(0) ;
10561 return;
10562 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010563
Jeff Johnsone7245742012-09-05 17:12:55 -070010564 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10566 vos_mem_free(pWdaParams->wdaMsgParam);
10567 vos_mem_free(pWdaParams) ;
10568
Jeff Johnsone7245742012-09-05 17:12:55 -070010569 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010570 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010571 * Also, here success always means that we have atleast one BSSID.
10572 */
10573 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10574
10575 //enable Tx
10576 status = WDA_ResumeDataTx(pWDA);
10577 if(status != VOS_STATUS_SUCCESS)
10578 {
10579 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10580 }
10581 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10582 return ;
10583}
10584/*
10585 * FUNCTION: WDA_ProcessStartOemDataReq
10586 * Send Start Oem Data Req to WDI
10587 */
10588VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10589 tStartOemDataReq *pOemDataReqParams)
10590{
10591 WDI_Status status = WDI_STATUS_SUCCESS;
10592 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010593 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010594
10595 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10596
10597 if(NULL == wdiOemDataReqParams)
10598 {
10599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010601 VOS_ASSERT(0);
10602 return VOS_STATUS_E_NOMEM;
10603 }
10604
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010605 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10606 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10607 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10608 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010609
10610 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10611
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10613 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010614 {
10615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010617 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010618 vos_mem_free(pOemDataReqParams);
10619 VOS_ASSERT(0);
10620 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010621 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010622
Bernald44a1ae2013-01-09 08:30:39 -080010623 pWdaParams->pWdaContext = (void*)pWDA;
10624 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10625 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010626
10627 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10628 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010629
10630 if(IS_WDI_STATUS_FAILURE(status))
10631 {
10632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10633 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10635 vos_mem_free(pWdaParams->wdaMsgParam);
10636 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010637 }
10638 return CONVERT_WDI2VOS_STATUS(status) ;
10639}
10640#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010641/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010642 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010643 *
10644 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010645void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010646{
10647 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010649 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010650 if(NULL == pWdaParams)
10651 {
10652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010653 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010654 VOS_ASSERT(0) ;
10655 return ;
10656 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010657
10658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10659 vos_mem_free(pWdaParams->wdaMsgParam);
10660 vos_mem_free(pWdaParams);
10661
10662 return ;
10663}
10664/*
10665 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10666 * Free memory.
10667 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10668 */
10669void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10670{
10671 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10672
10673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10674 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10675
10676 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010677 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10679 "%s: pWdaParams received NULL", __func__);
10680 VOS_ASSERT(0);
10681 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010682 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010683
10684 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010685 {
10686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010687 vos_mem_free(pWdaParams->wdaMsgParam);
10688 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010689 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010690
10691 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010692}
Jeff Johnson295189b2012-06-20 16:38:30 -070010693#ifdef WLAN_FEATURE_GTK_OFFLOAD
10694/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010695 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010696 *
10697 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010698void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010699 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010700{
10701 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10702
10703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010704 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010705 if(NULL == pWdaParams)
10706 {
10707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10708 "%s: pWdaParams received NULL", __func__);
10709 VOS_ASSERT(0);
10710 return;
10711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010712
Jeff Johnson295189b2012-06-20 16:38:30 -070010713 vos_mem_free(pWdaParams->wdaMsgParam) ;
10714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10715 vos_mem_free(pWdaParams) ;
10716
10717 //print a msg, nothing else to do
10718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010719 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010720
10721 return ;
10722}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010723/*
10724 * FUNCTION: WDA_GTKOffloadReqCallback
10725 * Free memory.
10726 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10727 */
10728void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10729{
10730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010731
Yue Ma7f44bbe2013-04-12 11:47:39 -070010732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10733 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10734
10735 if(NULL == pWdaParams)
10736 {
10737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10738 "%s: pWdaParams received NULL", __func__);
10739 VOS_ASSERT(0);
10740 return;
10741 }
10742
10743 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10744 {
10745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10746 vos_mem_free(pWdaParams->wdaMsgParam);
10747 vos_mem_free(pWdaParams);
10748 }
10749
10750 return;
10751}
Jeff Johnson295189b2012-06-20 16:38:30 -070010752/*
10753 * FUNCTION: WDA_ProcessGTKOffloadReq
10754 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10755 * to broadcast traffic (sta mode).
10756 */
10757VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10758 tpSirGtkOffloadParams pGtkOffloadParams)
10759{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010760 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010761 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10762 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10763 sizeof(WDI_GtkOffloadReqMsg)) ;
10764 tWDA_ReqParams *pWdaParams ;
10765
10766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010768
10769 if(NULL == wdiGtkOffloadReqMsg)
10770 {
10771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010773 VOS_ASSERT(0);
10774 return VOS_STATUS_E_NOMEM;
10775 }
10776
10777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10778 if(NULL == pWdaParams)
10779 {
10780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010782 VOS_ASSERT(0);
10783 vos_mem_free(wdiGtkOffloadReqMsg);
10784 return VOS_STATUS_E_NOMEM;
10785 }
10786
10787 //
10788 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10789 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010790
10791 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010792 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010793
Jeff Johnson295189b2012-06-20 16:38:30 -070010794 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10795 // Copy KCK
10796 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10797 // Copy KEK
10798 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10799 // Copy KeyReplayCounter
10800 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10801 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10802
Yue Ma7f44bbe2013-04-12 11:47:39 -070010803 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10804 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010805
Jeff Johnson295189b2012-06-20 16:38:30 -070010806
10807 /* Store Params pass it to WDI */
10808 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10809 pWdaParams->pWdaContext = pWDA;
10810 /* Store param pointer as passed in by caller */
10811 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10812
Yue Ma7f44bbe2013-04-12 11:47:39 -070010813 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010814
10815 if(IS_WDI_STATUS_FAILURE(status))
10816 {
10817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10818 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10819 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10820 vos_mem_free(pWdaParams->wdaMsgParam);
10821 vos_mem_free(pWdaParams);
10822 }
10823
10824 return CONVERT_WDI2VOS_STATUS(status) ;
10825}
10826
10827/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010828 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010829 *
10830 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010831void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010832 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010833{
10834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10835 tWDA_CbContext *pWDA;
10836 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010837 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 vos_msg_t vosMsg;
10839
10840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010841 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010842
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010843 if(NULL == pWdaParams)
10844 {
10845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10846 "%s: pWdaParams received NULL", __func__);
10847 VOS_ASSERT(0);
10848 return;
10849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010850
Nirav Shah374de6e2014-02-13 16:40:01 +053010851 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10852 if(NULL == pGtkOffloadGetInfoRsp)
10853 {
10854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10855 "%s: vos_mem_malloc failed ", __func__);
10856 VOS_ASSERT(0);
10857 return;
10858 }
10859
Jeff Johnson295189b2012-06-20 16:38:30 -070010860 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10861 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10862
10863 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10864 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10865
10866 /* Message Header */
10867 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010868 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010869
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010870 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10871 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10872 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10873 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10874 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010875
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010876 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10877 pwdiGtkOffloadGetInfoRsparams->bssId,
10878 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 /* VOS message wrapper */
10880 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10881 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10882 vosMsg.bodyval = 0;
10883
10884 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10885 {
10886 /* free the mem and return */
10887 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10888 }
10889
10890 vos_mem_free(pWdaParams->wdaMsgParam) ;
10891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10892 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010893
10894 return;
10895}
10896/*
10897 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10898 * Free memory and send RSP back to SME.
10899 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10900 */
10901void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10902{
10903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10904 vos_msg_t vosMsg;
10905
10906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10907 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10908
10909 if(NULL == pWdaParams)
10910 {
10911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10912 "%s: pWdaParams received NULL", __func__);
10913 VOS_ASSERT(0);
10914 return;
10915 }
10916
10917 /* VOS message wrapper */
10918 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10919 vosMsg.bodyptr = NULL;
10920 vosMsg.bodyval = 0;
10921
10922 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10923 {
10924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10925 vos_mem_free(pWdaParams->wdaMsgParam);
10926 vos_mem_free(pWdaParams);
10927 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10928 }
10929
10930 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010931}
10932#endif
10933
10934/*
10935 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10936 * Request to WDI to set Tx Per Tracking configurations
10937 */
10938VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10939{
10940 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010941 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10943 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10944 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10945 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010947 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 if(NULL == pwdiSetTxPerTrackingReqParams)
10949 {
10950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010952 vos_mem_free(pTxPerTrackingParams);
10953 VOS_ASSERT(0);
10954 return VOS_STATUS_E_NOMEM;
10955 }
10956 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10957 if(NULL == pWdaParams)
10958 {
10959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010961 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10962 vos_mem_free(pTxPerTrackingParams);
10963 VOS_ASSERT(0);
10964 return VOS_STATUS_E_NOMEM;
10965 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010966 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10967 pTxPerTrackingParams->ucTxPerTrackingEnable;
10968 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10969 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10970 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10971 pTxPerTrackingParams->ucTxPerTrackingRatio;
10972 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10973 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010974 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10975 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 /* Store param pointer as passed in by caller */
10977 /* store Params pass it to WDI
10978 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10979 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10980 pWdaParams->pWdaContext = pWDA;
10981 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010982 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010983 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010984 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010985 {
10986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10987 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010988 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010989 vos_mem_free(pWdaParams->wdaMsgParam) ;
10990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10991 vos_mem_free(pWdaParams) ;
10992 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010993 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010994
10995}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010996/*
10997 * FUNCTION: WDA_HALDumpCmdCallback
10998 * Send the VOS complete .
10999 */
11000void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11001 void* pUserData)
11002{
11003 tANI_U8 *buffer = NULL;
11004 tWDA_CbContext *pWDA = NULL;
11005 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 if(NULL == pWdaParams)
11007 {
11008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011009 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 VOS_ASSERT(0) ;
11011 return ;
11012 }
11013
11014 pWDA = pWdaParams->pWdaContext;
11015 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011016 if(wdiRspParams->usBufferLen > 0)
11017 {
11018 /*Copy the Resp data to UMAC supplied buffer*/
11019 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11022 vos_mem_free(pWdaParams);
11023
11024 /* Indicate VOSS about the start complete */
11025 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011026 return ;
11027}
11028
Jeff Johnson295189b2012-06-20 16:38:30 -070011029/*
11030 * FUNCTION: WDA_ProcessHALDumpCmdReq
11031 * Send Dump command to WDI
11032 */
11033VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11034 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11035 tANI_U32 arg4, tANI_U8 *pBuffer)
11036{
11037 WDI_Status status = WDI_STATUS_SUCCESS;
11038 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11039 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11040 tWDA_ReqParams *pWdaParams ;
11041 pVosContextType pVosContext = NULL;
11042 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011043 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11044 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011045 if(pVosContext)
11046 {
11047 if (pVosContext->isLogpInProgress)
11048 {
11049 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11050 "%s:LOGP in Progress. Ignore!!!", __func__);
11051 return VOS_STATUS_E_BUSY;
11052 }
11053 }
11054 else
11055 {
11056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11057 "%s: VOS Context Null", __func__);
11058 return VOS_STATUS_E_RESOURCES;
11059 }
11060
Jeff Johnson295189b2012-06-20 16:38:30 -070011061 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11062 if(NULL == pWdaParams)
11063 {
11064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011065 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011066 return VOS_STATUS_E_NOMEM;
11067 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 /* Allocate memory WDI request structure*/
11069 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11070 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11071 if(NULL == wdiHALDumpCmdReqParam)
11072 {
11073 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11074 "WDA HAL DUMP Command buffer alloc fail");
11075 vos_mem_free(pWdaParams);
11076 return WDI_STATUS_E_FAILURE;
11077 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011079 /* Extract the arguments */
11080 wdiHalDumpCmdInfo->command = cmd;
11081 wdiHalDumpCmdInfo->argument1 = arg1;
11082 wdiHalDumpCmdInfo->argument2 = arg2;
11083 wdiHalDumpCmdInfo->argument3 = arg3;
11084 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011085 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011086 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11087
11088 /* Response message will be passed through the buffer */
11089 pWdaParams->wdaMsgParam = (void *)pBuffer;
11090
11091 /* store Params pass it to WDI */
11092 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 /* Send command to WDI */
11094 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011095 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011096 if ( vStatus != VOS_STATUS_SUCCESS )
11097 {
11098 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11099 {
11100 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011101 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 }
11103 else
11104 {
11105 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011106 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 }
11108 VOS_ASSERT(0);
11109 }
11110 return status;
11111}
Jeff Johnson295189b2012-06-20 16:38:30 -070011112#ifdef WLAN_FEATURE_GTK_OFFLOAD
11113/*
11114 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11115 * Request to WDI to get GTK Offload Information
11116 */
11117VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11118 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11119{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011120 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011121 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11122 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11123 tWDA_ReqParams *pWdaParams ;
11124
11125 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11126 {
11127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011128 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 VOS_ASSERT(0);
11130 return VOS_STATUS_E_NOMEM;
11131 }
11132
11133 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11134 if(NULL == pWdaParams)
11135 {
11136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011138 VOS_ASSERT(0);
11139 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11140 return VOS_STATUS_E_NOMEM;
11141 }
11142
Yue Ma7f44bbe2013-04-12 11:47:39 -070011143 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11144 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011145
Jeff Johnson295189b2012-06-20 16:38:30 -070011146 /* Store Params pass it to WDI */
11147 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11148 pWdaParams->pWdaContext = pWDA;
11149 /* Store param pointer as passed in by caller */
11150 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11151
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011152 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011153 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011154
Yue Ma7f44bbe2013-04-12 11:47:39 -070011155 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011156
11157 if(IS_WDI_STATUS_FAILURE(status))
11158 {
11159 /* failure returned by WDI API */
11160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11161 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11163 vos_mem_free(pWdaParams) ;
11164 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11165 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11166 }
11167
11168 return CONVERT_WDI2VOS_STATUS(status) ;
11169}
11170#endif // WLAN_FEATURE_GTK_OFFLOAD
11171
11172/*
Yue Mab9c86f42013-08-14 15:59:08 -070011173 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11174 *
11175 */
11176VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11177 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11178{
11179 WDI_Status wdiStatus;
11180 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11181
11182 addPeriodicTxPtrnParams =
11183 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11184
11185 if (NULL == addPeriodicTxPtrnParams)
11186 {
11187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11188 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11189 __func__);
11190
11191 return VOS_STATUS_E_NOMEM;
11192 }
11193
11194 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11195 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11196
11197 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11198 addPeriodicTxPtrnParams->pUserData = pWDA;
11199
11200 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11201
11202 if (WDI_STATUS_PENDING == wdiStatus)
11203 {
11204 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11205 "Pending received for %s:%d", __func__, __LINE__ );
11206 }
11207 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11208 {
11209 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11210 "Failure in %s:%d", __func__, __LINE__ );
11211 }
11212
11213 vos_mem_free(addPeriodicTxPtrnParams);
11214
11215 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11216}
11217
11218/*
11219 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11220 *
11221 */
11222VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11223 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11224{
11225 WDI_Status wdiStatus;
11226 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11227
11228 delPeriodicTxPtrnParams =
11229 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11230
11231 if (NULL == delPeriodicTxPtrnParams)
11232 {
11233 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11234 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11235 __func__);
11236
11237 return VOS_STATUS_E_NOMEM;
11238 }
11239
11240 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11241 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11242
11243 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11244 delPeriodicTxPtrnParams->pUserData = pWDA;
11245
11246 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11247
11248 if (WDI_STATUS_PENDING == wdiStatus)
11249 {
11250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11251 "Pending received for %s:%d", __func__, __LINE__ );
11252 }
11253 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11254 {
11255 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11256 "Failure in %s:%d", __func__, __LINE__ );
11257 }
11258
11259 vos_mem_free(delPeriodicTxPtrnParams);
11260
11261 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11262}
11263
Rajeev79dbe4c2013-10-05 11:03:42 +053011264#ifdef FEATURE_WLAN_BATCH_SCAN
11265/*
11266 * FUNCTION: WDA_ProcessStopBatchScanInd
11267 *
11268 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11269 *
11270 * PARAM:
11271 * pWDA: pointer to WDA context
11272 * pReq: pointer to stop batch scan request
11273 */
11274VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11275 tSirStopBatchScanInd *pReq)
11276{
11277 WDI_Status wdiStatus;
11278 WDI_StopBatchScanIndType wdiReq;
11279
11280 wdiReq.param = pReq->param;
11281
11282 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11283
11284 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11285 {
11286 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11287 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11288 }
11289
11290 vos_mem_free(pReq);
11291
11292 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11293}
11294/*==========================================================================
11295 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11296
11297 DESCRIPTION
11298 API to pull batch scan result from FW
11299
11300 PARAMETERS
11301 pWDA: Pointer to WDA context
11302 pGetBatchScanReq: Pointer to get batch scan result indication
11303
11304 RETURN VALUE
11305 NONE
11306
11307===========================================================================*/
11308VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11309 tSirTriggerBatchScanResultInd *pReq)
11310{
11311 WDI_Status wdiStatus;
11312 WDI_TriggerBatchScanResultIndType wdiReq;
11313
11314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11315 "------> %s " ,__func__);
11316
11317 wdiReq.param = pReq->param;
11318
11319 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11320
11321 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11322 {
11323 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11324 "Trigger batch scan result ind failed %s:%d",
11325 __func__, wdiStatus);
11326 }
11327
11328 vos_mem_free(pReq);
11329
11330 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11331}
11332
11333/*==========================================================================
11334 FUNCTION WDA_SetBatchScanRespCallback
11335
11336 DESCRIPTION
11337 API to process set batch scan response from FW
11338
11339 PARAMETERS
11340 pRsp: Pointer to set batch scan response
11341 pUserData: Pointer to user data
11342
11343 RETURN VALUE
11344 NONE
11345
11346===========================================================================*/
11347void WDA_SetBatchScanRespCallback
11348(
11349 WDI_SetBatchScanRspType *pRsp,
11350 void* pUserData
11351)
11352{
11353 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11354 tpAniSirGlobal pMac;
11355 void *pCallbackContext;
11356 tWDA_CbContext *pWDA = NULL ;
11357 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11358
11359
11360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11361 "<------ %s " ,__func__);
11362 if (NULL == pWdaParams)
11363 {
11364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11365 "%s: pWdaParams received NULL", __func__);
11366 VOS_ASSERT(0) ;
11367 return ;
11368 }
11369
11370 /*extract WDA context*/
11371 pWDA = pWdaParams->pWdaContext;
11372 if (NULL == pWDA)
11373 {
11374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11375 "%s:pWDA is NULL can't invole HDD callback",
11376 __func__);
11377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11378 vos_mem_free(pWdaParams->wdaMsgParam);
11379 vos_mem_free(pWdaParams);
11380 VOS_ASSERT(0);
11381 return;
11382 }
11383
11384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11385 vos_mem_free(pWdaParams->wdaMsgParam);
11386 vos_mem_free(pWdaParams);
11387
11388 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11389 if (NULL == pMac)
11390 {
11391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11392 "%s:pMac is NULL", __func__);
11393 VOS_ASSERT(0);
11394 return;
11395 }
11396
11397 pHddSetBatchScanRsp =
11398 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11399 if (NULL == pHddSetBatchScanRsp)
11400 {
11401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11402 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11403 VOS_ASSERT(0);
11404 return;
11405 }
11406
11407 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11408
11409 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11410 /*call hdd callback with set batch scan response data*/
11411 if(pMac->pmc.setBatchScanReqCallback)
11412 {
11413 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11414 }
11415 else
11416 {
11417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11418 "%s:HDD callback is null", __func__);
11419 VOS_ASSERT(0);
11420 }
11421
11422 vos_mem_free(pHddSetBatchScanRsp);
11423 return ;
11424}
11425
11426/*==========================================================================
11427 FUNCTION WDA_ProcessSetBatchScanReq
11428
11429 DESCRIPTION
11430 API to send set batch scan request to WDI
11431
11432 PARAMETERS
11433 pWDA: Pointer to WDA context
11434 pSetBatchScanReq: Pointer to set batch scan req
11435
11436 RETURN VALUE
11437 NONE
11438
11439===========================================================================*/
11440VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11441 tSirSetBatchScanReq *pSetBatchScanReq)
11442{
11443 WDI_Status status;
11444 tWDA_ReqParams *pWdaParams ;
11445 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11446
11447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11448 "------> %s " ,__func__);
11449
11450 pWdiSetBatchScanReq =
11451 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11452 if (NULL == pWdiSetBatchScanReq)
11453 {
11454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11455 "%s: VOS MEM Alloc Failure", __func__);
11456 vos_mem_free(pSetBatchScanReq);
11457 VOS_ASSERT(0);
11458 return VOS_STATUS_E_NOMEM;
11459 }
11460
11461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11462 if (NULL == pWdaParams)
11463 {
11464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11465 "%s: VOS MEM Alloc Failure", __func__);
11466 VOS_ASSERT(0);
11467 vos_mem_free(pSetBatchScanReq);
11468 vos_mem_free(pWdiSetBatchScanReq);
11469 return VOS_STATUS_E_NOMEM;
11470 }
11471
11472 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11473 pWdiSetBatchScanReq->numberOfScansToBatch =
11474 pSetBatchScanReq->numberOfScansToBatch;
11475 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11476 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11477 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11478
11479 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11480 pWdaParams->pWdaContext = pWDA;
11481 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11482
11483 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11484 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11485 if (IS_WDI_STATUS_FAILURE(status))
11486 {
11487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11488 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11490 vos_mem_free(pWdaParams->wdaMsgParam);
11491 vos_mem_free(pWdaParams);
11492 }
11493 return CONVERT_WDI2VOS_STATUS(status);
11494}
11495
11496#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011497/*
11498 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11499 *
11500 * DESCRIPTION: This function sends start/update OBSS scan
11501 * inidcation message to WDI
11502 *
11503 * PARAM:
11504 * pWDA: pointer to WDA context
11505 * pReq: pointer to start OBSS scan request
11506 */
11507VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11508 tSirHT40OBSSScanInd *pReq)
11509{
11510 WDI_Status status;
11511 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11512 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011513
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11515 "------> %s " ,__func__);
11516 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11517 wdiOBSSScanParams.pUserData = pWDA;
11518
11519 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11520 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11521 pWdiOBSSScanInd->scanType = pReq->scanType;
11522 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11523 pReq->OBSSScanActiveDwellTime;
11524 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11525 pReq->OBSSScanPassiveDwellTime;
11526 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11527 pReq->BSSChannelWidthTriggerScanInterval;
11528 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11529 pReq->BSSWidthChannelTransitionDelayFactor;
11530 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11531 pReq->OBSSScanActiveTotalPerChannel;
11532 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11533 pReq->OBSSScanPassiveTotalPerChannel;
11534 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11535 pReq->OBSSScanActivityThreshold;
11536 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11537 vos_mem_copy(pWdiOBSSScanInd->channels,
11538 pReq->channels,
11539 pReq->channelCount);
11540 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11541 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11542 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11543 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11544 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11545
11546 vos_mem_copy(pWdiOBSSScanInd->ieField,
11547 pReq->ieField,
11548 pReq->ieFieldLen);
11549
11550 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11551 if (WDI_STATUS_PENDING == status)
11552 {
11553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11554 "Pending received for %s:%d ",__func__,__LINE__ );
11555 }
11556 else if (WDI_STATUS_SUCCESS_SYNC != status)
11557 {
11558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11559 "Failure in %s:%d ",__func__,__LINE__ );
11560 }
11561 return CONVERT_WDI2VOS_STATUS(status) ;
11562}
11563/*
11564 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11565 *
11566 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11567 *
11568 * PARAM:
11569 * pWDA: pointer to WDA context
11570 * pReq: pointer to stop batch scan request
11571 */
11572VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11573 tANI_U8 *bssIdx)
11574{
11575 WDI_Status status;
11576
11577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11578 "------> %s " ,__func__);
11579
11580 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11581 if (WDI_STATUS_PENDING == status)
11582 {
11583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11584 "Pending received for %s:%d ",__func__,__LINE__ );
11585 }
11586 else if (WDI_STATUS_SUCCESS_SYNC != status)
11587 {
11588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11589 "Failure in %s:%d ",__func__,__LINE__ );
11590 }
11591 return CONVERT_WDI2VOS_STATUS(status) ;
11592}
Yue Mab9c86f42013-08-14 15:59:08 -070011593/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011594 * FUNCTION: WDA_ProcessRateUpdateInd
11595 *
11596 */
11597VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11598 tSirRateUpdateInd *pRateUpdateParams)
11599{
11600 WDI_Status wdiStatus;
11601 WDI_RateUpdateIndParams rateUpdateParams;
11602
11603 vos_mem_copy(rateUpdateParams.bssid,
11604 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11605
11606 rateUpdateParams.ucastDataRateTxFlag =
11607 pRateUpdateParams->ucastDataRateTxFlag;
11608 rateUpdateParams.reliableMcastDataRateTxFlag =
11609 pRateUpdateParams->reliableMcastDataRateTxFlag;
11610 rateUpdateParams.mcastDataRate24GHzTxFlag =
11611 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11612 rateUpdateParams.mcastDataRate5GHzTxFlag =
11613 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11614
11615 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11616 rateUpdateParams.reliableMcastDataRate =
11617 pRateUpdateParams->reliableMcastDataRate;
11618 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11619 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11620
11621 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11622 rateUpdateParams.pUserData = pWDA;
11623
11624 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11625
11626 if (WDI_STATUS_PENDING == wdiStatus)
11627 {
11628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11629 "Pending received for %s:%d", __func__, __LINE__ );
11630 }
11631 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11632 {
11633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11634 "Failure in %s:%d", __func__, __LINE__ );
11635 }
11636
11637 vos_mem_free(pRateUpdateParams);
11638
11639 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11640}
11641
11642/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011643 * -------------------------------------------------------------------------
11644 * DATA interface with WDI for Mgmt Frames
11645 * -------------------------------------------------------------------------
11646 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011647/*
11648 * FUNCTION: WDA_TxComplete
11649 * Callback function for the WDA_TxPacket
11650 */
11651VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11652 VOS_STATUS status )
11653{
11654
11655 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11656 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011657 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011658
11659 if(NULL == wdaContext)
11660 {
11661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11662 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011663 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011664 VOS_ASSERT(0);
11665 return VOS_STATUS_E_FAILURE;
11666 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011667
11668 /*Check if frame was timed out or not*/
11669 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11670 (v_PVOID_t)&uUserData);
11671
11672 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11673 {
11674 /*Discard frame - no further processing is needed*/
11675 vos_pkt_return_packet(pData);
11676 return VOS_STATUS_SUCCESS;
11677 }
11678
Jeff Johnson295189b2012-06-20 16:38:30 -070011679 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11680 if( NULL!=wdaContext->pTxCbFunc)
11681 {
11682 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011683 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 {
11685 wdaContext->pTxCbFunc(pMac, pData);
11686 }
11687 else
11688 {
11689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011690 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011691 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011692 //Return from here since we reaching here because the packet already timeout
11693 return status;
11694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 }
11696
11697 /*
11698 * Trigger the event to bring the HAL TL Tx complete function to come
11699 * out of wait
11700 * Let the coe above to complete the packet first. When this event is set,
11701 * the thread waiting for the event may run and set Vospacket_freed causing the original
11702 * packet not being freed.
11703 */
11704 status = vos_event_set(&wdaContext->txFrameEvent);
11705 if(!VOS_IS_STATUS_SUCCESS(status))
11706 {
11707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011708 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011709 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 return status;
11711}
Jeff Johnson295189b2012-06-20 16:38:30 -070011712/*
11713 * FUNCTION: WDA_TxPacket
11714 * Forward TX management frame to WDI
11715 */
11716VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11717 void *pFrmBuf,
11718 tANI_U16 frmLen,
11719 eFrameType frmType,
11720 eFrameTxDir txDir,
11721 tANI_U8 tid,
11722 pWDATxRxCompFunc pCompFunc,
11723 void *pData,
11724 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011725 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011726{
11727 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11728 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11729 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11730 tANI_U8 eventIdx = 0;
11731 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11732 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011733 if((NULL == pWDA)||(NULL == pFrmBuf))
11734 {
11735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011736 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011737 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011738 VOS_ASSERT(0);
11739 return VOS_STATUS_E_FAILURE;
11740 }
11741
11742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011743 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011744 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11745 if(NULL == pMac)
11746 {
11747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011748 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 VOS_ASSERT(0);
11750 return VOS_STATUS_E_FAILURE;
11751 }
11752
11753
11754
11755 /* store the call back function in WDA context */
11756 pWDA->pTxCbFunc = pCompFunc;
11757 /* store the call back for the function of ackTxComplete */
11758 if( pAckTxComp )
11759 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011760 if( NULL != pWDA->pAckTxCbFunc )
11761 {
11762 /* Already TxComp is active no need to active again */
11763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011764 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011765 pWDA->pAckTxCbFunc( pMac, 0);
11766 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011767
Jeff Johnsone7245742012-09-05 17:12:55 -070011768 if( VOS_STATUS_SUCCESS !=
11769 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11770 {
11771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11772 "Tx Complete timeout Timer Stop Failed ");
11773 }
11774 else
11775 {
11776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011777 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011778 }
11779 }
11780
11781 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11782 pWDA->pAckTxCbFunc = pAckTxComp;
11783 if( VOS_STATUS_SUCCESS !=
11784 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11785 {
11786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11787 "Tx Complete Timer Start Failed ");
11788 pWDA->pAckTxCbFunc = NULL;
11789 return eHAL_STATUS_FAILURE;
11790 }
11791 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011792 /* Reset the event to be not signalled */
11793 status = vos_event_reset(&pWDA->txFrameEvent);
11794 if(!VOS_IS_STATUS_SUCCESS(status))
11795 {
11796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011797 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011798 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11799 if( pAckTxComp )
11800 {
11801 pWDA->pAckTxCbFunc = NULL;
11802 if( VOS_STATUS_SUCCESS !=
11803 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11804 {
11805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11806 "Tx Complete timeout Timer Stop Failed ");
11807 }
11808 }
11809 return VOS_STATUS_E_FAILURE;
11810 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011811
11812 /* If Peer Sta mask is set don't overwrite to self sta */
11813 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011814 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011815 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011816 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011817 else
11818 {
Ganesh K08bce952012-12-13 15:04:41 -080011819 /* Get system role, use the self station if in unknown role or STA role */
11820 systemRole = wdaGetGlobalSystemRole(pMac);
11821 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11822 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080011823#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011824 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011825#endif
Ganesh K08bce952012-12-13 15:04:41 -080011826 ))
11827 {
11828 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11829 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011830 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011831
Jeff Johnsone7245742012-09-05 17:12:55 -070011832 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11833 disassoc frame reaches the HW, HAL has already deleted the peer station */
11834 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011836 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011837 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011838 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011839 /*Send Probe request frames on self sta idx*/
11840 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011841 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011842 /* Since we donot want probe responses to be retried, send probe responses
11843 through the NO_ACK queues */
11844 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11845 {
11846 //probe response is sent out using self station and no retries options.
11847 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11848 }
11849 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11850 {
11851 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11852 }
11853 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011854 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011855
11856 /*Set frame tag to 0
11857 We will use the WDA user data in order to tag a frame as expired*/
11858 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11859 (v_PVOID_t)0);
11860
11861
11862 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11863 frmLen, ucTypeSubType, tid,
11864 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11865 {
11866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011867 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011868 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011869 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 -070011870 if( pAckTxComp )
11871 {
11872 pWDA->pAckTxCbFunc = NULL;
11873 if( VOS_STATUS_SUCCESS !=
11874 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11875 {
11876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11877 "Tx Complete timeout Timer Stop Failed ");
11878 }
11879 }
11880 return VOS_STATUS_E_FAILURE;
11881 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011882 /*
11883 * Wait for the event to be set by the TL, to get the response of TX
11884 * complete, this event should be set by the Callback function called by TL
11885 */
11886 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11887 &eventIdx);
11888 if(!VOS_IS_STATUS_SUCCESS(status))
11889 {
11890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11891 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011892 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011893 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11894 after the packet gets completed(packet freed once)*/
11895
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011896 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Mihir Shete40a55652014-03-02 14:14:47 +053011897 WDA_TransportChannelDebug(pMac, 1, WPAL_DEBUG_TX_DESC_RESYNC);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011898
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011899 /*Tag Frame as timed out for later deletion*/
11900 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11901 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11902
Jeff Johnson295189b2012-06-20 16:38:30 -070011903 /* check whether the packet was freed already,so need not free again when
11904 * TL calls the WDA_Txcomplete routine
11905 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011906 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
11907 /*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 -070011908 {
11909 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011910 } */
11911
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 if( pAckTxComp )
11913 {
11914 pWDA->pAckTxCbFunc = NULL;
11915 if( VOS_STATUS_SUCCESS !=
11916 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11917 {
11918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11919 "Tx Complete timeout Timer Stop Failed ");
11920 }
11921 }
11922 status = VOS_STATUS_E_FAILURE;
11923 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011924#ifdef WLAN_DUMP_MGMTFRAMES
11925 if (VOS_IS_STATUS_SUCCESS(status))
11926 {
11927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11928 "%s() TX packet : SubType %d", __func__,pFc->subType);
11929 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11930 pData, frmLen);
11931 }
11932#endif
11933
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080011934 if (VOS_IS_STATUS_SUCCESS(status))
11935 {
11936 if (pMac->fEnableDebugLog & 0x1)
11937 {
11938 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
11939 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
11940 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
11941 {
11942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
11943 pFc->type, pFc->subType);
11944 }
11945 }
11946 }
11947
11948
Jeff Johnson295189b2012-06-20 16:38:30 -070011949 return status;
11950}
Jeff Johnson295189b2012-06-20 16:38:30 -070011951/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011952 * FUNCTION: WDA_ProcessDHCPStartInd
11953 * Forward DHCP Start to WDI
11954 */
11955static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11956 tAniDHCPInd *dhcpStartInd)
11957{
11958 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053011959 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011960
c_hpothu0b0cab72014-02-13 21:52:40 +053011961 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
11962 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011963 sizeof(tSirMacAddr));
11964
c_hpothu0b0cab72014-02-13 21:52:40 +053011965 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011966
c_hpothu0b0cab72014-02-13 21:52:40 +053011967 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011968 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11970 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011971 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011972 else if (WDI_STATUS_SUCCESS_SYNC != status)
11973 {
11974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11975 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
11976 }
11977
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011978 vos_mem_free(dhcpStartInd);
11979 return CONVERT_WDI2VOS_STATUS(status) ;
11980}
11981
11982 /*
11983 * FUNCTION: WDA_ProcessDHCPStopInd
11984 * Forward DHCP Stop to WDI
11985 */
11986 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11987 tAniDHCPInd *dhcpStopInd)
11988 {
11989 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053011990 WDI_DHCPInd wdiDHCPInd;
11991
11992 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
11993 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11994
11995 status = WDI_dhcpStopInd(&wdiDHCPInd);
11996
11997 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011998 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12000 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012001 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012002 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012003 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12005 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012006 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012007
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012008 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012009
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012010 return CONVERT_WDI2VOS_STATUS(status) ;
12011 }
12012
12013/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012014 * FUNCTION: WDA_McProcessMsg
12015 * Trigger DAL-AL to start CFG download
12016 */
12017VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12018{
12019 VOS_STATUS status = VOS_STATUS_SUCCESS;
12020 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012021 if(NULL == pMsg)
12022 {
12023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012024 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012025 VOS_ASSERT(0);
12026 return VOS_STATUS_E_FAILURE;
12027 }
12028
12029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012030 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012031
12032 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12033 if(NULL == pWDA )
12034 {
12035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012036 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012037 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012038 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012039 return VOS_STATUS_E_FAILURE;
12040 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012041 /* Process all the WDA messages.. */
12042 switch( pMsg->type )
12043 {
12044 case WNI_CFG_DNLD_REQ:
12045 {
12046 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 /* call WDA complete event if config download success */
12048 if( VOS_IS_STATUS_SUCCESS(status) )
12049 {
12050 vos_WDAComplete_cback(pVosContext);
12051 }
12052 else
12053 {
12054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12055 "WDA Config Download failure" );
12056 }
12057 break ;
12058 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012059 /*
12060 * Init SCAN request from PE, convert it into DAL format
12061 * and send it to DAL
12062 */
12063 case WDA_INIT_SCAN_REQ:
12064 {
12065 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12066 break ;
12067 }
12068 /* start SCAN request from PE */
12069 case WDA_START_SCAN_REQ:
12070 {
12071 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12072 break ;
12073 }
12074 /* end SCAN request from PE */
12075 case WDA_END_SCAN_REQ:
12076 {
12077 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12078 break ;
12079 }
12080 /* end SCAN request from PE */
12081 case WDA_FINISH_SCAN_REQ:
12082 {
12083 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12084 break ;
12085 }
12086 /* join request from PE */
12087 case WDA_CHNL_SWITCH_REQ:
12088 {
12089 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12090 {
12091 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12092 }
12093 else
12094 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012095 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12096 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12097 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12098 {
12099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12100 "call ProcessChannelSwitchReq_V1" );
12101 WDA_ProcessChannelSwitchReq_V1(pWDA,
12102 (tSwitchChannelParams*)pMsg->bodyptr) ;
12103 }
12104 else
12105 {
12106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12107 "call ProcessChannelSwitchReq" );
12108 WDA_ProcessChannelSwitchReq(pWDA,
12109 (tSwitchChannelParams*)pMsg->bodyptr) ;
12110 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 }
12112 break ;
12113 }
12114 /* ADD BSS request from PE */
12115 case WDA_ADD_BSS_REQ:
12116 {
12117 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12118 break ;
12119 }
12120 case WDA_ADD_STA_REQ:
12121 {
12122 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12123 break ;
12124 }
12125 case WDA_DELETE_BSS_REQ:
12126 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012127 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12128 break ;
12129 }
12130 case WDA_DELETE_STA_REQ:
12131 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012132 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12133 break ;
12134 }
12135 case WDA_CONFIG_PARAM_UPDATE_REQ:
12136 {
12137 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12138 break ;
12139 }
12140 case WDA_SET_BSSKEY_REQ:
12141 {
12142 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12143 break ;
12144 }
12145 case WDA_SET_STAKEY_REQ:
12146 {
12147 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12148 break ;
12149 }
12150 case WDA_SET_STA_BCASTKEY_REQ:
12151 {
12152 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12153 break ;
12154 }
12155 case WDA_REMOVE_BSSKEY_REQ:
12156 {
12157 WDA_ProcessRemoveBssKeyReq(pWDA,
12158 (tRemoveBssKeyParams *)pMsg->bodyptr);
12159 break ;
12160 }
12161 case WDA_REMOVE_STAKEY_REQ:
12162 {
12163 WDA_ProcessRemoveStaKeyReq(pWDA,
12164 (tRemoveStaKeyParams *)pMsg->bodyptr);
12165 break ;
12166 }
12167 case WDA_REMOVE_STA_BCASTKEY_REQ:
12168 {
12169 /* TODO: currently UMAC is not sending this request, Add the code for
12170 handling this request when UMAC supports */
12171 break;
12172 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012173#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012174 case WDA_TSM_STATS_REQ:
12175 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012176 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012177 break;
12178 }
12179#endif
12180 case WDA_UPDATE_EDCA_PROFILE_IND:
12181 {
12182 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12183 break;
12184 }
12185 case WDA_ADD_TS_REQ:
12186 {
12187 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12188 break;
12189 }
12190 case WDA_DEL_TS_REQ:
12191 {
12192 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12193 break;
12194 }
12195 case WDA_ADDBA_REQ:
12196 {
12197 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12198 break;
12199 }
12200 case WDA_DELBA_IND:
12201 {
12202 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12203 break;
12204 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012205 case WDA_UPDATE_CHAN_LIST_REQ:
12206 {
12207 WDA_ProcessUpdateChannelList(pWDA,
12208 (tSirUpdateChanList *)pMsg->bodyptr);
12209 break;
12210 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012211 case WDA_SET_LINK_STATE:
12212 {
12213 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12214 break;
12215 }
12216 case WDA_GET_STATISTICS_REQ:
12217 {
12218 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12219 break;
12220 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012221#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012222 case WDA_GET_ROAM_RSSI_REQ:
12223 {
12224 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12225 break;
12226 }
12227#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012228 case WDA_PWR_SAVE_CFG:
12229 {
12230 if(pWDA->wdaState == WDA_READY_STATE)
12231 {
12232 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12233 }
12234 else
12235 {
12236 if(NULL != pMsg->bodyptr)
12237 {
12238 vos_mem_free(pMsg->bodyptr);
12239 }
12240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12241 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12242 }
12243 break;
12244 }
12245 case WDA_ENTER_IMPS_REQ:
12246 {
12247 if(pWDA->wdaState == WDA_READY_STATE)
12248 {
12249 WDA_ProcessEnterImpsReq(pWDA);
12250 }
12251 else
12252 {
12253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12254 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12255 }
12256 break;
12257 }
12258 case WDA_EXIT_IMPS_REQ:
12259 {
12260 if(pWDA->wdaState == WDA_READY_STATE)
12261 {
12262 WDA_ProcessExitImpsReq(pWDA);
12263 }
12264 else
12265 {
12266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12267 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12268 }
12269 break;
12270 }
12271 case WDA_ENTER_BMPS_REQ:
12272 {
12273 if(pWDA->wdaState == WDA_READY_STATE)
12274 {
12275 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12276 }
12277 else
12278 {
12279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12280 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12281 }
12282 break;
12283 }
12284 case WDA_EXIT_BMPS_REQ:
12285 {
12286 if(pWDA->wdaState == WDA_READY_STATE)
12287 {
12288 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12289 }
12290 else
12291 {
12292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12293 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12294 }
12295 break;
12296 }
12297 case WDA_ENTER_UAPSD_REQ:
12298 {
12299 if(pWDA->wdaState == WDA_READY_STATE)
12300 {
12301 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12302 }
12303 else
12304 {
12305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12306 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12307 }
12308 break;
12309 }
12310 case WDA_EXIT_UAPSD_REQ:
12311 {
12312 if(pWDA->wdaState == WDA_READY_STATE)
12313 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012314 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012315 }
12316 else
12317 {
12318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12319 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12320 }
12321 break;
12322 }
12323 case WDA_UPDATE_UAPSD_IND:
12324 {
12325 if(pWDA->wdaState == WDA_READY_STATE)
12326 {
12327 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12328 }
12329 else
12330 {
12331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12332 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12333 }
12334 break;
12335 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012336 case WDA_REGISTER_PE_CALLBACK :
12337 {
12338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12339 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12340 /*TODO: store the PE callback */
12341 /* Do Nothing? MSG Body should be freed at here */
12342 if(NULL != pMsg->bodyptr)
12343 {
12344 vos_mem_free(pMsg->bodyptr);
12345 }
12346 break;
12347 }
12348 case WDA_SYS_READY_IND :
12349 {
12350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12351 "Handling msg type WDA_SYS_READY_IND " );
12352 pWDA->wdaState = WDA_READY_STATE;
12353 if(NULL != pMsg->bodyptr)
12354 {
12355 vos_mem_free(pMsg->bodyptr);
12356 }
12357 break;
12358 }
12359 case WDA_BEACON_FILTER_IND :
12360 {
12361 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12362 break;
12363 }
12364 case WDA_BTC_SET_CFG:
12365 {
12366 /*TODO: handle this while dealing with BTC */
12367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12368 "Handling msg type WDA_BTC_SET_CFG " );
12369 /* Do Nothing? MSG Body should be freed at here */
12370 if(NULL != pMsg->bodyptr)
12371 {
12372 vos_mem_free(pMsg->bodyptr);
12373 }
12374 break;
12375 }
12376 case WDA_SIGNAL_BT_EVENT:
12377 {
12378 /*TODO: handle this while dealing with BTC */
12379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12380 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12381 /* Do Nothing? MSG Body should be freed at here */
12382 if(NULL != pMsg->bodyptr)
12383 {
12384 vos_mem_free(pMsg->bodyptr);
12385 }
12386 break;
12387 }
12388 case WDA_CFG_RXP_FILTER_REQ:
12389 {
12390 WDA_ProcessConfigureRxpFilterReq(pWDA,
12391 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12392 break;
12393 }
12394 case WDA_SET_HOST_OFFLOAD:
12395 {
12396 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12397 break;
12398 }
12399 case WDA_SET_KEEP_ALIVE:
12400 {
12401 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12402 break;
12403 }
12404#ifdef WLAN_NS_OFFLOAD
12405 case WDA_SET_NS_OFFLOAD:
12406 {
12407 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12408 break;
12409 }
12410#endif //WLAN_NS_OFFLOAD
12411 case WDA_ADD_STA_SELF_REQ:
12412 {
12413 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12414 break;
12415 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012416 case WDA_DEL_STA_SELF_REQ:
12417 {
12418 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12419 break;
12420 }
12421 case WDA_WOWL_ADD_BCAST_PTRN:
12422 {
12423 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12424 break;
12425 }
12426 case WDA_WOWL_DEL_BCAST_PTRN:
12427 {
12428 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12429 break;
12430 }
12431 case WDA_WOWL_ENTER_REQ:
12432 {
12433 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12434 break;
12435 }
12436 case WDA_WOWL_EXIT_REQ:
12437 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012438 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012439 break;
12440 }
12441 case WDA_TL_FLUSH_AC_REQ:
12442 {
12443 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12444 break;
12445 }
12446 case WDA_SIGNAL_BTAMP_EVENT:
12447 {
12448 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12449 break;
12450 }
12451#ifdef WDA_UT
12452 case WDA_WDI_EVENT_MSG:
12453 {
12454 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12455 break ;
12456 }
12457#endif
12458 case WDA_UPDATE_BEACON_IND:
12459 {
12460 WDA_ProcessUpdateBeaconParams(pWDA,
12461 (tUpdateBeaconParams *)pMsg->bodyptr);
12462 break;
12463 }
12464 case WDA_SEND_BEACON_REQ:
12465 {
12466 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12467 break;
12468 }
12469 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12470 {
12471 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12472 (tSendProbeRespParams *)pMsg->bodyptr);
12473 break;
12474 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012475#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070012476 case WDA_SET_MAX_TX_POWER_REQ:
12477 {
12478 WDA_ProcessSetMaxTxPowerReq(pWDA,
12479 (tMaxTxPowerParams *)pMsg->bodyptr);
12480 break;
12481 }
12482#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012483 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12484 {
12485 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12486 pMsg->bodyptr);
12487 break;
12488 }
schang86c22c42013-03-13 18:41:24 -070012489 case WDA_SET_TX_POWER_REQ:
12490 {
12491 WDA_ProcessSetTxPowerReq(pWDA,
12492 (tSirSetTxPowerReq *)pMsg->bodyptr);
12493 break;
12494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 case WDA_SET_P2P_GO_NOA_REQ:
12496 {
12497 WDA_ProcessSetP2PGONOAReq(pWDA,
12498 (tP2pPsParams *)pMsg->bodyptr);
12499 break;
12500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012501 /* timer related messages */
12502 case WDA_TIMER_BA_ACTIVITY_REQ:
12503 {
12504 WDA_BaCheckActivity(pWDA) ;
12505 break ;
12506 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012507
12508 /* timer related messages */
12509 case WDA_TIMER_TRAFFIC_STATS_IND:
12510 {
12511 WDA_TimerTrafficStatsInd(pWDA);
12512 break;
12513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012514#ifdef WLAN_FEATURE_VOWIFI_11R
12515 case WDA_AGGR_QOS_REQ:
12516 {
12517 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12518 break;
12519 }
12520#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 case WDA_FTM_CMD_REQ:
12522 {
12523 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12524 break ;
12525 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012526#ifdef FEATURE_OEM_DATA_SUPPORT
12527 case WDA_START_OEM_DATA_REQ:
12528 {
12529 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12530 break;
12531 }
12532#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012533 /* Tx Complete Time out Indication */
12534 case WDA_TX_COMPLETE_TIMEOUT_IND:
12535 {
12536 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12537 break;
12538 }
12539 case WDA_WLAN_SUSPEND_IND:
12540 {
12541 WDA_ProcessWlanSuspendInd(pWDA,
12542 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12543 break;
12544 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012545 case WDA_WLAN_RESUME_REQ:
12546 {
12547 WDA_ProcessWlanResumeReq(pWDA,
12548 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12549 break;
12550 }
12551
12552 case WDA_UPDATE_CF_IND:
12553 {
12554 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12555 pMsg->bodyptr = NULL;
12556 break;
12557 }
12558#ifdef FEATURE_WLAN_SCAN_PNO
12559 case WDA_SET_PNO_REQ:
12560 {
12561 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12562 break;
12563 }
12564 case WDA_UPDATE_SCAN_PARAMS_REQ:
12565 {
12566 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12567 break;
12568 }
12569 case WDA_SET_RSSI_FILTER_REQ:
12570 {
12571 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12572 break;
12573 }
12574#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012575#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012576 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012577 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012578 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012579 break;
12580 }
12581#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012582 case WDA_SET_TX_PER_TRACKING_REQ:
12583 {
12584 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12585 break;
12586 }
12587
12588#ifdef WLAN_FEATURE_PACKET_FILTERING
12589 case WDA_8023_MULTICAST_LIST_REQ:
12590 {
12591 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12592 break;
12593 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012594 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12595 {
12596 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12597 break;
12598 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012599 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12600 {
12601 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12602 break;
12603 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012604 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12605 {
12606 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12607 break;
12608 }
12609#endif // WLAN_FEATURE_PACKET_FILTERING
12610
12611
12612 case WDA_TRANSMISSION_CONTROL_IND:
12613 {
12614 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12615 break;
12616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012617 case WDA_SET_POWER_PARAMS_REQ:
12618 {
12619 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12620 break;
12621 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012622#ifdef WLAN_FEATURE_GTK_OFFLOAD
12623 case WDA_GTK_OFFLOAD_REQ:
12624 {
12625 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12626 break;
12627 }
12628
12629 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12630 {
12631 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12632 break;
12633 }
12634#endif //WLAN_FEATURE_GTK_OFFLOAD
12635
12636 case WDA_SET_TM_LEVEL_REQ:
12637 {
12638 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12639 break;
12640 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012641
Mohit Khanna4a70d262012-09-11 16:30:12 -070012642 case WDA_UPDATE_OP_MODE:
12643 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012644 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12645 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12646 {
12647 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12648 }
12649 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012650 {
12651 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12652 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12653 else
12654 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012655 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012656 }
12657 else
12658 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012659 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012660 break;
12661 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012662#ifdef WLAN_FEATURE_11W
12663 case WDA_EXCLUDE_UNENCRYPTED_IND:
12664 {
12665 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12666 break;
12667 }
12668#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012669#ifdef FEATURE_WLAN_TDLS
12670 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12671 {
12672 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12673 break;
12674 }
12675#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012676 case WDA_DHCP_START_IND:
12677 {
12678 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12679 break;
12680 }
12681 case WDA_DHCP_STOP_IND:
12682 {
12683 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12684 break;
12685 }
Leo Chang9056f462013-08-01 19:21:11 -070012686#ifdef FEATURE_WLAN_LPHB
12687 case WDA_LPHB_CONF_REQ:
12688 {
12689 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12690 break;
12691 }
12692#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012693 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12694 {
12695 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12696 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12697 break;
12698 }
12699 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12700 {
12701 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12702 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12703 break;
12704 }
12705
Rajeev79dbe4c2013-10-05 11:03:42 +053012706#ifdef FEATURE_WLAN_BATCH_SCAN
12707 case WDA_SET_BATCH_SCAN_REQ:
12708 {
12709 WDA_ProcessSetBatchScanReq(pWDA,
12710 (tSirSetBatchScanReq *)pMsg->bodyptr);
12711 break;
12712 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012713 case WDA_RATE_UPDATE_IND:
12714 {
12715 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12716 break;
12717 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012718 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12719 {
12720 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12721 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12722 break;
12723 }
12724 case WDA_STOP_BATCH_SCAN_IND:
12725 {
12726 WDA_ProcessStopBatchScanInd(pWDA,
12727 (tSirStopBatchScanInd *)pMsg->bodyptr);
12728 break;
12729 }
12730#endif
12731
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012732 case WDA_HT40_OBSS_SCAN_IND:
12733 {
12734 WDA_ProcessHT40OBSSScanInd(pWDA,
12735 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12736 break;
12737 }
12738 case WDA_HT40_OBSS_STOP_SCAN_IND:
12739 {
12740 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12741 (tANI_U8*)pMsg->bodyptr);
12742 break;
12743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012744 default:
12745 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053012746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070012747 "No Handling for msg type %x in WDA "
12748 ,pMsg->type);
12749 /* Do Nothing? MSG Body should be freed at here */
12750 if(NULL != pMsg->bodyptr)
12751 {
12752 vos_mem_free(pMsg->bodyptr);
12753 }
12754 //WDA_VOS_ASSERT(0) ;
12755 }
12756 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012757 return status ;
12758}
12759
Jeff Johnson295189b2012-06-20 16:38:30 -070012760/*
12761 * FUNCTION: WDA_LowLevelIndCallback
12762 * IND API callback from WDI, send Ind to PE
12763 */
12764void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12765 void* pUserData )
12766{
12767 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12768#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12769 tSirRSSINotification rssiNotification;
12770#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012771 if(NULL == pWDA)
12772 {
12773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012774 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012775 VOS_ASSERT(0);
12776 return ;
12777 }
12778
12779 switch(wdiLowLevelInd->wdiIndicationType)
12780 {
12781 case WDI_RSSI_NOTIFICATION_IND:
12782 {
12783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12784 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012785#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12786 rssiNotification.bReserved =
12787 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12788 rssiNotification.bRssiThres1NegCross =
12789 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12790 rssiNotification.bRssiThres1PosCross =
12791 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12792 rssiNotification.bRssiThres2NegCross =
12793 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12794 rssiNotification.bRssiThres2PosCross =
12795 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12796 rssiNotification.bRssiThres3NegCross =
12797 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12798 rssiNotification.bRssiThres3PosCross =
12799 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012800 rssiNotification.avgRssi = (v_S7_t)
12801 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012802 WLANTL_BMPSRSSIRegionChangedNotification(
12803 pWDA->pVosContext,
12804 &rssiNotification);
12805#endif
12806 break ;
12807 }
12808 case WDI_MISSED_BEACON_IND:
12809 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012810 tpSirSmeMissedBeaconInd pMissBeacInd =
12811 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12813 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012814 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012815 if(NULL == pMissBeacInd)
12816 {
12817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12818 "%s: VOS MEM Alloc Failure", __func__);
12819 break;
12820 }
12821 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12822 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12823 pMissBeacInd->bssIdx =
12824 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12825 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012826 break ;
12827 }
12828 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12829 {
12830 /* TODO: Decode Ind and send Ind to PE */
12831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12832 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12833 break ;
12834 }
12835
12836 case WDI_MIC_FAILURE_IND:
12837 {
12838 tpSirSmeMicFailureInd pMicInd =
12839 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12840
12841 if(NULL == pMicInd)
12842 {
12843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012845 break;
12846 }
12847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12848 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012849 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12850 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12851 vos_mem_copy(pMicInd->bssId,
12852 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12853 sizeof(tSirMacAddr));
12854 vos_mem_copy(pMicInd->info.srcMacAddr,
12855 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12856 sizeof(tSirMacAddr));
12857 vos_mem_copy(pMicInd->info.taMacAddr,
12858 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12859 sizeof(tSirMacAddr));
12860 vos_mem_copy(pMicInd->info.dstMacAddr,
12861 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12862 sizeof(tSirMacAddr));
12863 vos_mem_copy(pMicInd->info.rxMacAddr,
12864 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12865 sizeof(tSirMacAddr));
12866 pMicInd->info.multicast =
12867 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12868 pMicInd->info.keyId=
12869 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12870 pMicInd->info.IV1=
12871 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12872 vos_mem_copy(pMicInd->info.TSC,
12873 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12875 (void *)pMicInd , 0) ;
12876 break ;
12877 }
12878 case WDI_FATAL_ERROR_IND:
12879 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012880 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012881 /* TODO: Decode Ind and send Ind to PE */
12882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12883 "Received WDI_FATAL_ERROR_IND from WDI ");
12884 break ;
12885 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 case WDI_DEL_STA_IND:
12887 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012888 tpDeleteStaContext pDelSTACtx =
12889 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12890
12891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12892 "Received WDI_DEL_STA_IND from WDI ");
12893 if(NULL == pDelSTACtx)
12894 {
12895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012897 break;
12898 }
12899 vos_mem_copy(pDelSTACtx->addr2,
12900 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12901 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012902 vos_mem_copy(pDelSTACtx->bssId,
12903 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12904 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012905 pDelSTACtx->assocId =
12906 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12907 pDelSTACtx->reasonCode =
12908 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12909 pDelSTACtx->staId =
12910 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012911 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12912 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012913 break ;
12914 }
12915 case WDI_COEX_IND:
12916 {
12917 tANI_U32 index;
12918 vos_msg_t vosMsg;
12919 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12920 if(NULL == pSmeCoexInd)
12921 {
12922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012923 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012924 break;
12925 }
12926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12927 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012928 /* Message Header */
12929 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12930 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012931 /* Info from WDI Indication */
12932 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12933 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12934 {
12935 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12936 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012937 /* VOS message wrapper */
12938 vosMsg.type = eWNI_SME_COEX_IND;
12939 vosMsg.bodyptr = (void *)pSmeCoexInd;
12940 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012941 /* Send message to SME */
12942 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12943 {
12944 /* free the mem and return */
12945 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12946 }
12947 else
12948 {
12949 /* DEBUG */
12950 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12951 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12952 pSmeCoexInd->coexIndType,
12953 pSmeCoexInd->coexIndData[0],
12954 pSmeCoexInd->coexIndData[1],
12955 pSmeCoexInd->coexIndData[2],
12956 pSmeCoexInd->coexIndData[3]);
12957 }
12958 break;
12959 }
12960 case WDI_TX_COMPLETE_IND:
12961 {
12962 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12963 /* Calling TxCompleteAck Indication from wda context*/
12964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12965 "Complete Indication received from HAL");
12966 if( pWDA->pAckTxCbFunc )
12967 {
12968 if( VOS_STATUS_SUCCESS !=
12969 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12970 {
12971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12972 "Tx Complete timeout Timer Stop Failed ");
12973 }
12974 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12975 pWDA->pAckTxCbFunc = NULL;
12976 }
12977 else
12978 {
12979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12980 "Tx Complete Indication is received after timeout ");
12981 }
12982 break;
12983 }
Viral Modid86bde22012-12-10 13:09:21 -080012984 case WDI_P2P_NOA_START_IND :
12985 {
12986 tSirP2PNoaStart *pP2pNoaStart =
12987 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12988
12989 if (NULL == pP2pNoaStart)
12990 {
12991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12992 "Memory allocation failure, "
12993 "WDI_P2P_NOA_START_IND not forwarded");
12994 break;
12995 }
12996 pP2pNoaStart->status =
12997 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12998 pP2pNoaStart->bssIdx =
12999 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13000 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13001 (void *)pP2pNoaStart , 0) ;
13002 break;
13003 }
13004
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013005#ifdef FEATURE_WLAN_TDLS
13006 case WDI_TDLS_IND :
13007 {
13008 tSirTdlsInd *pTdlsInd =
13009 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13010
13011 if (NULL == pTdlsInd)
13012 {
13013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13014 "Memory allocation failure, "
13015 "WDI_TDLS_IND not forwarded");
13016 break;
13017 }
13018 pTdlsInd->status =
13019 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13020 pTdlsInd->assocId =
13021 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13022 pTdlsInd->staIdx =
13023 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13024 pTdlsInd->reasonCode =
13025 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13026 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13027 (void *)pTdlsInd , 0) ;
13028 break;
13029 }
13030#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013031 case WDI_P2P_NOA_ATTR_IND :
13032 {
13033 tSirP2PNoaAttr *pP2pNoaAttr =
13034 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13036 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013037 if (NULL == pP2pNoaAttr)
13038 {
13039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13040 "Memory allocation failure, "
13041 "WDI_P2P_NOA_ATTR_IND not forwarded");
13042 break;
13043 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013044 pP2pNoaAttr->index =
13045 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13046 pP2pNoaAttr->oppPsFlag =
13047 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13048 pP2pNoaAttr->ctWin =
13049 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13050
13051 pP2pNoaAttr->uNoa1IntervalCnt =
13052 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13053 pP2pNoaAttr->uNoa1Duration =
13054 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13055 pP2pNoaAttr->uNoa1Interval =
13056 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13057 pP2pNoaAttr->uNoa1StartTime =
13058 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013059 pP2pNoaAttr->uNoa2IntervalCnt =
13060 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13061 pP2pNoaAttr->uNoa2Duration =
13062 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13063 pP2pNoaAttr->uNoa2Interval =
13064 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13065 pP2pNoaAttr->uNoa2StartTime =
13066 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013067 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13068 (void *)pP2pNoaAttr , 0) ;
13069 break;
13070 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013071#ifdef FEATURE_WLAN_SCAN_PNO
13072 case WDI_PREF_NETWORK_FOUND_IND:
13073 {
13074 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013075 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13076 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13077 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13078 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13079
Jeff Johnson295189b2012-06-20 16:38:30 -070013080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13081 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013082 if (NULL == pPrefNetworkFoundInd)
13083 {
13084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13085 "Memory allocation failure, "
13086 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013087 if (NULL !=
13088 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13089 {
13090 wpalMemoryFree(
13091 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13092 );
13093 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13094 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013095 break;
13096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013097 /* Message Header */
13098 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013099 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013100
13101 /* Info from WDI Indication */
13102 pPrefNetworkFoundInd->ssId.length =
13103 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013104 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013105 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13106 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13107 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013108 if (NULL !=
13109 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13110 {
13111 pPrefNetworkFoundInd->frameLength =
13112 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13113 vos_mem_copy( pPrefNetworkFoundInd->data,
13114 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13115 pPrefNetworkFoundInd->frameLength);
13116 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13117 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13118 }
13119 else
13120 {
13121 pPrefNetworkFoundInd->frameLength = 0;
13122 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013123 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013124 /* VOS message wrapper */
13125 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13126 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13127 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013128 /* Send message to SME */
13129 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13130 {
13131 /* free the mem and return */
13132 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13133 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013134 break;
13135 }
13136#endif // FEATURE_WLAN_SCAN_PNO
13137
13138#ifdef WLAN_WAKEUP_EVENTS
13139 case WDI_WAKE_REASON_IND:
13140 {
13141 vos_msg_t vosMsg;
13142 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13143 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13144 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13145
13146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13147 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
13148 wdiLowLevelInd->wdiIndicationType,
13149 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13150 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13151 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13152
13153 if (NULL == pWakeReasonInd)
13154 {
13155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13156 "Memory allocation failure, "
13157 "WDI_WAKE_REASON_IND not forwarded");
13158 break;
13159 }
13160
13161 vos_mem_zero(pWakeReasonInd, allocSize);
13162
13163 /* Message Header */
13164 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13165 pWakeReasonInd->mesgLen = allocSize;
13166
13167 /* Info from WDI Indication */
13168 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13169 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13170 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13171 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13172 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13173 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13174 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13175 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13176
13177 /* VOS message wrapper */
13178 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13179 vosMsg.bodyptr = (void *) pWakeReasonInd;
13180 vosMsg.bodyval = 0;
13181
13182 /* Send message to SME */
13183 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13184 {
13185 /* free the mem and return */
13186 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13187 }
13188
13189 break;
13190 }
13191#endif // WLAN_WAKEUP_EVENTS
13192
13193 case WDI_TX_PER_HIT_IND:
13194 {
13195 vos_msg_t vosMsg;
13196 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13197 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13198 /* VOS message wrapper */
13199 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13200 vosMsg.bodyptr = NULL;
13201 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013202 /* Send message to SME */
13203 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13204 {
13205 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13206 }
13207 break;
13208 }
13209
Leo Chang9056f462013-08-01 19:21:11 -070013210#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013211 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013212 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013213 vos_msg_t vosMsg;
13214 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013215
Leo Changd9df8aa2013-09-26 13:32:26 -070013216 lphbInd =
13217 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13218 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013219 {
13220 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13221 "%s: LPHB IND buffer alloc Fail", __func__);
13222 return ;
13223 }
13224
Leo Changd9df8aa2013-09-26 13:32:26 -070013225 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013226 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013227 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013228 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013229 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013230 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13231
13232 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013233 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013234 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13235
Leo Changd9df8aa2013-09-26 13:32:26 -070013236 vosMsg.type = eWNI_SME_LPHB_IND;
13237 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013238 vosMsg.bodyval = 0;
13239 /* Send message to SME */
13240 if (VOS_STATUS_SUCCESS !=
13241 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13242 {
13243 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13244 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013245 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013246 }
13247 break;
13248 }
13249#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013250 case WDI_PERIODIC_TX_PTRN_FW_IND:
13251 {
13252 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13253 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13254 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13255 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13256 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13257 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13258 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13259
13260 break;
13261 }
Leo Chang9056f462013-08-01 19:21:11 -070013262
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013263 case WDI_IBSS_PEER_INACTIVITY_IND:
13264 {
13265 tSirIbssPeerInactivityInd *pIbssInd =
13266 (tSirIbssPeerInactivityInd *)
13267 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13268
13269 if (NULL == pIbssInd)
13270 {
13271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13272 "Memory allocation failure, "
13273 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13274 break;
13275 }
13276
13277 pIbssInd->bssIdx =
13278 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13279 pIbssInd->staIdx =
13280 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13281 vos_mem_copy(pIbssInd->peerAddr,
13282 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13283 sizeof(tSirMacAddr));
13284 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13285 break;
13286 }
13287
Rajeev79dbe4c2013-10-05 11:03:42 +053013288#ifdef FEATURE_WLAN_BATCH_SCAN
13289 case WDI_BATCH_SCAN_RESULT_IND:
13290 {
13291 void *pBatchScanResult;
13292 void *pCallbackContext;
13293 tpAniSirGlobal pMac;
13294
13295 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13296 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13297
13298 /*sanity check*/
13299 if(NULL == pWDA)
13300 {
13301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13302 "%s:pWDA is NULL", __func__);
13303 VOS_ASSERT(0);
13304 return;
13305 }
13306
13307 pBatchScanResult =
13308 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13309 if (NULL == pBatchScanResult)
13310 {
13311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13312 "%s:Batch scan result from FW is null can't invoke HDD callback",
13313 __func__);
13314 VOS_ASSERT(0);
13315 return;
13316 }
13317
13318 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13319 if (NULL == pMac)
13320 {
13321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13322 "%s:pMac is NULL", __func__);
13323 VOS_ASSERT(0);
13324 return;
13325 }
13326
13327 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13328 /*call hdd callback with set batch scan response data*/
13329 if(pMac->pmc.batchScanResultCallback)
13330 {
13331 pMac->pmc.batchScanResultCallback(pCallbackContext,
13332 pBatchScanResult);
13333 }
13334 else
13335 {
13336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13337 "%s:HDD callback is null", __func__);
13338 VOS_ASSERT(0);
13339 }
13340 break;
13341 }
13342#endif
13343
Leo Chang0b0e45a2013-12-15 15:18:55 -080013344#ifdef FEATURE_WLAN_CH_AVOID
13345 case WDI_CH_AVOID_IND:
13346 {
13347 vos_msg_t vosMsg;
13348 tSirChAvoidIndType *chAvoidInd;
13349
13350 chAvoidInd =
13351 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13352 if (NULL == chAvoidInd)
13353 {
13354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13355 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13356 return ;
13357 }
13358
13359 chAvoidInd->avoidRangeCount =
13360 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13361 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13362 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13363 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13364
13365 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13366 "%s : WDA CH avoid notification", __func__);
13367
13368 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13369 vosMsg.bodyptr = chAvoidInd;
13370 vosMsg.bodyval = 0;
13371 /* Send message to SME */
13372 if (VOS_STATUS_SUCCESS !=
13373 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13374 {
13375 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13376 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13377 vos_mem_free(chAvoidInd);
13378 }
13379 break;
13380 }
13381#endif /* FEATURE_WLAN_CH_AVOID */
13382
Jeff Johnson295189b2012-06-20 16:38:30 -070013383 default:
13384 {
13385 /* TODO error */
13386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13387 "Received UNKNOWN Indication from WDI ");
13388 }
13389 }
13390 return ;
13391}
13392
Jeff Johnson295189b2012-06-20 16:38:30 -070013393/*
13394 * BA related processing in WDA.
13395 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013396void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13397 void* pUserData)
13398{
13399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13400 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013401 if(NULL == pWdaParams)
13402 {
13403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013404 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013405 VOS_ASSERT(0) ;
13406 return ;
13407 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013408 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013409 vos_mem_free(pWdaParams->wdaMsgParam) ;
13410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13411 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013413 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013414 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13415 {
13416 tANI_U8 i = 0 ;
13417 tBaActivityInd *baActivityInd = NULL ;
13418 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13419 tANI_U8 allocSize = sizeof(tBaActivityInd)
13420 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13421 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13422 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013423 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013424 if(NULL == baActivityInd)
13425 {
13426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013428 VOS_ASSERT(0) ;
13429 return;
13430 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013431 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13432 sizeof(tSirMacAddr)) ;
13433 baActivityInd->baCandidateCnt = baCandidateCount ;
13434
13435 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13436 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13437
13438 for(i = 0 ; i < baCandidateCount ; i++)
13439 {
13440 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013441 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13442 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013443 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13444 {
13445 baCandidate->baInfo[tid].fBaEnable =
13446 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13447 baCandidate->baInfo[tid].startingSeqNum =
13448 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13449 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013450 wdiBaCandidate++ ;
13451 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013452 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13454 }
13455 else
13456 {
13457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13458 "BA Trigger RSP with Failure received ");
13459 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013460 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013461}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013462
13463
13464/*
13465 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13466 * during MCC
13467 */
13468void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13469{
13470 wpt_uint32 enabled;
13471 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13472 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13473 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13474
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013475 if (NULL == pMac )
13476 {
13477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13478 "%s: Invoked with invalid MAC context ", __func__ );
13479 VOS_ASSERT(0);
13480 return;
13481 }
13482
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013483 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13484 != eSIR_SUCCESS)
13485 {
13486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13487 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13488 return;
13489 }
13490
13491 if(!enabled)
13492 {
13493 return;
13494 }
13495
13496 if(NULL == pWDA)
13497 {
13498 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13499 "%s:WDA context is NULL", __func__);
13500 VOS_ASSERT(0);
13501 return;
13502 }
13503
13504 if(activate)
13505 {
13506 if( VOS_STATUS_SUCCESS !=
13507 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13508 {
13509 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13510 "Traffic Stats Timer Start Failed ");
13511 return;
13512 }
13513 WDI_DS_ActivateTrafficStats();
13514 }
13515 else
13516 {
13517 WDI_DS_DeactivateTrafficStats();
13518 WDI_DS_ClearTrafficStats();
13519
13520 if( VOS_STATUS_SUCCESS !=
13521 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13522 {
13523 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13524 "Traffic Stats Timer Stop Failed ");
13525 return;
13526 }
13527 }
13528}
13529
13530/*
13531 * Traffic Stats Timer handler
13532 */
13533void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13534{
13535 WDI_Status wdiStatus;
13536 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13537 WDI_TrafficStatsIndType trafficStatsIndParams;
13538 wpt_uint32 length, enabled;
13539 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13540
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013541 if (NULL == pMac )
13542 {
13543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13544 "%s: Invoked with invalid MAC context ", __func__ );
13545 VOS_ASSERT(0);
13546 return;
13547 }
13548
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013549 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13550 != eSIR_SUCCESS)
13551 {
13552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13553 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13554 return;
13555 }
13556
13557 if(!enabled)
13558 {
13559 WDI_DS_DeactivateTrafficStats();
13560 return;
13561 }
13562
13563 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13564
13565 if(pWdiTrafficStats != NULL)
13566 {
13567 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13568 trafficStatsIndParams.length = length;
13569 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013570 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013571 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13572 trafficStatsIndParams.pUserData = pWDA;
13573
13574 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13575
13576 if(WDI_STATUS_PENDING == wdiStatus)
13577 {
13578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13579 "Pending received for %s:%d ",__func__,__LINE__ );
13580 }
13581 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13582 {
13583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13584 "Failure in %s:%d ",__func__,__LINE__ );
13585 }
13586
13587 WDI_DS_ClearTrafficStats();
13588 }
13589 else
13590 {
13591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13592 "pWdiTrafficStats is Null");
13593 }
13594
13595 if( VOS_STATUS_SUCCESS !=
13596 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13597 {
13598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13599 "Traffic Stats Timer Start Failed ");
13600 return;
13601 }
13602}
13603
Jeff Johnson295189b2012-06-20 16:38:30 -070013604/*
13605 * BA Activity check timer handler
13606 */
13607void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13608{
13609 tANI_U8 curSta = 0 ;
13610 tANI_U8 tid = 0 ;
13611 tANI_U8 size = 0 ;
13612 tANI_U8 baCandidateCount = 0 ;
13613 tANI_U8 newBaCandidate = 0 ;
13614 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13615
13616 if(NULL == pWDA)
13617 {
13618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013619 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013620 VOS_ASSERT(0);
13621 return ;
13622 }
13623 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13624 {
13625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13626 "Inconsistent STA entries in WDA");
13627 VOS_ASSERT(0) ;
13628 }
13629 /* walk through all STA entries and find out TX packet count */
13630 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13631 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013632#ifdef WLAN_SOFTAP_VSTA_FEATURE
13633 // We can only do BA on "hard" STAs.
13634 if (!(IS_HWSTA_IDX(curSta)))
13635 {
13636 continue;
13637 }
13638#endif //WLAN_SOFTAP_VSTA_FEATURE
13639 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13640 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013641 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013642 tANI_U32 txPktCount = 0 ;
13643 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013644 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013645 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13646 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013647 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13648 curSta, tid, &txPktCount)))
13649 {
13650#if 0
13651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13652 "************* %d:%d, %d ",curSta, txPktCount,
13653 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13654#endif
13655 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013656 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013657 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13658 curSta, tid)))
13659 {
13660 /* get prepare for sending message to HAL */
13661 //baCandidate[baCandidateCount].staIdx = curSta ;
13662 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13663 newBaCandidate = WDA_ENABLE_BA ;
13664 }
13665 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13666 }
13667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013668 /* fill the entry for all the sta with given TID's */
13669 if(WDA_ENABLE_BA == newBaCandidate)
13670 {
13671 /* move to next BA candidate */
13672 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13673 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13674 baCandidateCount++ ;
13675 newBaCandidate = WDA_DISABLE_BA ;
13676 }
13677 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013678 /* prepare and send message to hal */
13679 if( 0 < baCandidateCount)
13680 {
13681 WDI_Status status = WDI_STATUS_SUCCESS ;
13682 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13683 tWDA_ReqParams *pWdaParams =
13684 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013685 if(NULL == pWdaParams)
13686 {
13687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013689 VOS_ASSERT(0) ;
13690 return;
13691 }
13692 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13693 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13694 if(NULL == wdiTriggerBaReq)
13695 {
13696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013698 VOS_ASSERT(0) ;
13699 vos_mem_free(pWdaParams);
13700 return;
13701 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013702 do
13703 {
13704 WDI_TriggerBAReqinfoType *triggerBaInfo =
13705 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13706 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13707 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13708 * for each request */
13709 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13710 triggerBaInfo->ucBASessionID = 0;
13711 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13712 } while(0) ;
13713 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013715 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013716 pWdaParams->pWdaContext = pWDA;
13717 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13718 pWdaParams->wdaMsgParam = NULL;
13719 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13720 WDA_TriggerBaReqCallback, pWdaParams) ;
13721 if(IS_WDI_STATUS_FAILURE(status))
13722 {
13723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13724 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13725 vos_mem_free(pWdaParams->wdaMsgParam) ;
13726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13727 vos_mem_free(pWdaParams) ;
13728 }
13729 }
13730 else
13731 {
13732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13733 "There is no TID for initiating BA");
13734 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013735 if( VOS_STATUS_SUCCESS !=
13736 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13737 {
13738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13739 "BA Activity Timer Stop Failed ");
13740 return ;
13741 }
13742 if( VOS_STATUS_SUCCESS !=
13743 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13744 {
13745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13746 "BA Activity Timer Start Failed ");
13747 return;
13748 }
13749 return ;
13750}
Jeff Johnson295189b2012-06-20 16:38:30 -070013751/*
13752 * WDA common routine to create timer used by WDA.
13753 */
13754static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13755{
Jeff Johnson295189b2012-06-20 16:38:30 -070013756 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13757 tANI_U32 val = 0 ;
13758 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13759
13760 if(NULL == pMac)
13761 {
13762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013763 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013764 VOS_ASSERT(0);
13765 return VOS_STATUS_E_FAILURE;
13766 }
13767 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13768 != eSIR_SUCCESS)
13769 {
13770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13771 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13772 return VOS_STATUS_E_FAILURE;
13773 }
13774 val = SYS_MS_TO_TICKS(val) ;
13775
13776 /* BA activity check timer */
13777 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13778 "BA Activity Check timer", WDA_TimerHandler,
13779 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13780 if(status != TX_SUCCESS)
13781 {
13782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13783 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013784 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013786 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013787 /* Tx Complete Timeout timer */
13788 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13789 "Tx Complete Check timer", WDA_TimerHandler,
13790 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013791 if(status != TX_SUCCESS)
13792 {
13793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13794 "Unable to create Tx Complete Timeout timer");
13795 /* Destroy timer of BA activity check timer */
13796 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13797 if(status != TX_SUCCESS)
13798 {
13799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13800 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013801 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013802 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013803 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013804 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013805
13806 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13807
13808 /* Traffic Stats timer */
13809 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13810 "Traffic Stats timer", WDA_TimerHandler,
13811 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13812 if(status != TX_SUCCESS)
13813 {
13814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13815 "Unable to create traffic stats timer");
13816 /* Destroy timer of BA activity check timer */
13817 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13818 if(status != TX_SUCCESS)
13819 {
13820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13821 "Unable to Destroy BA activity timer");
13822 }
13823 /* Destroy timer of tx complete timer */
13824 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13825 if(status != TX_SUCCESS)
13826 {
13827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13828 "Unable to Tx complete timer");
13829 }
13830 return VOS_STATUS_E_FAILURE ;
13831 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013832 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013833}
Jeff Johnson295189b2012-06-20 16:38:30 -070013834/*
13835 * WDA common routine to destroy timer used by WDA.
13836 */
13837static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13838{
13839 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013840 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13841 if(status != TX_SUCCESS)
13842 {
13843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13844 "Unable to Destroy Tx Complete Timeout timer");
13845 return eSIR_FAILURE ;
13846 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013847 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13848 if(status != TX_SUCCESS)
13849 {
13850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13851 "Unable to Destroy BA activity timer");
13852 return eSIR_FAILURE ;
13853 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013854 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13855 if(status != TX_SUCCESS)
13856 {
13857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13858 "Unable to Destroy traffic stats timer");
13859 return eSIR_FAILURE ;
13860 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013861 return eSIR_SUCCESS ;
13862}
Jeff Johnson295189b2012-06-20 16:38:30 -070013863/*
13864 * WDA timer handler.
13865 */
13866void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13867{
13868 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13869 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013870 /*
13871 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13872 */
13873 wdaMsg.type = timerInfo ;
13874 wdaMsg.bodyptr = NULL;
13875 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013876 /* post the message.. */
13877 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13878 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13879 {
13880 vosStatus = VOS_STATUS_E_BADMSG;
13881 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013882}
Jeff Johnson295189b2012-06-20 16:38:30 -070013883/*
13884 * WDA Tx Complete timeout Indication.
13885 */
13886void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13887{
13888 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013889 if( pWDA->pAckTxCbFunc )
13890 {
13891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013892 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013893 pWDA->pAckTxCbFunc( pMac, 0);
13894 pWDA->pAckTxCbFunc = NULL;
13895 }
13896 else
13897 {
13898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013899 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013900 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013901}
Jeff Johnson295189b2012-06-20 16:38:30 -070013902/*
13903 * WDA Set REG Domain to VOS NV
13904 */
Abhishek Singha306a442013-11-07 18:39:01 +053013905eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13906 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013907{
Abhishek Singha306a442013-11-07 18:39:01 +053013908 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013909 {
13910 return eHAL_STATUS_INVALID_PARAMETER;
13911 }
13912 return eHAL_STATUS_SUCCESS;
13913}
Jeff Johnson295189b2012-06-20 16:38:30 -070013914
Jeff Johnson295189b2012-06-20 16:38:30 -070013915#ifdef FEATURE_WLAN_SCAN_PNO
13916/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013917 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013918 *
13919 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013920void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013921{
13922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013923 tSirPNOScanReq *pPNOScanReqParams;
13924
Jeff Johnson295189b2012-06-20 16:38:30 -070013925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013926 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013927 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013928 {
13929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013930 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013931 VOS_ASSERT(0) ;
13932 return ;
13933 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013934
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013935 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
13936 if(pPNOScanReqParams->statusCallback)
13937 {
13938 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
13939 (status == WDI_STATUS_SUCCESS) ?
13940 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
13941 }
13942
Yue Ma7f44bbe2013-04-12 11:47:39 -070013943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13944 vos_mem_free(pWdaParams->wdaMsgParam);
13945 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013946
13947 return ;
13948}
Jeff Johnson295189b2012-06-20 16:38:30 -070013949/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013950 * FUNCTION: WDA_PNOScanReqCallback
13951 * Free memory.
13952 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13953 */
13954void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013955{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013957 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013958
13959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13960 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13961
13962 if(NULL == pWdaParams)
13963 {
13964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13965 "%s: pWdaParams received NULL", __func__);
13966 VOS_ASSERT(0);
13967 return;
13968 }
13969
13970 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13971 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013972 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
13973 if(pPNOScanReqParams->statusCallback)
13974 {
13975 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
13976 VOS_STATUS_E_FAILURE);
13977 }
13978
Yue Ma7f44bbe2013-04-12 11:47:39 -070013979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13980 vos_mem_free(pWdaParams->wdaMsgParam);
13981 vos_mem_free(pWdaParams);
13982 }
13983
13984 return;
13985}
13986/*
13987 * FUNCTION: WDA_UpdateScanParamsRespCallback
13988 *
13989 */
13990void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13991{
13992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013994 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013995 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013996 {
13997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013998 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013999 VOS_ASSERT(0) ;
14000 return ;
14001 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014002
14003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14004 vos_mem_free(pWdaParams->wdaMsgParam);
14005 vos_mem_free(pWdaParams);
14006
Jeff Johnson295189b2012-06-20 16:38:30 -070014007 return ;
14008}
Jeff Johnson295189b2012-06-20 16:38:30 -070014009/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014010 * FUNCTION: WDA_UpdateScanParamsReqCallback
14011 * Free memory.
14012 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14013 */
14014void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14015{
14016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14017
14018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14019 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14020
14021 if(NULL == pWdaParams)
14022 {
14023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14024 "%s: pWdaParams received NULL", __func__);
14025 VOS_ASSERT(0);
14026 return;
14027 }
14028
14029 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14030 {
14031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14032 vos_mem_free(pWdaParams->wdaMsgParam);
14033 vos_mem_free(pWdaParams);
14034 }
14035
14036 return;
14037}
14038/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014039 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14040 * Request to WDI to set Preferred Network List.Offload
14041 */
14042VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14043 tSirPNOScanReq *pPNOScanReqParams)
14044{
Jeff Johnson43971f52012-07-17 12:26:56 -070014045 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014046 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14047 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14048 tWDA_ReqParams *pWdaParams ;
14049 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014051 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014052 if(NULL == pwdiPNOScanReqInfo)
14053 {
14054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014055 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014056 VOS_ASSERT(0);
14057 return VOS_STATUS_E_NOMEM;
14058 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014059 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14060 if(NULL == pWdaParams)
14061 {
14062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014064 VOS_ASSERT(0);
14065 vos_mem_free(pwdiPNOScanReqInfo);
14066 return VOS_STATUS_E_NOMEM;
14067 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014068 //
14069 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14070 //
14071 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14072 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014073 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14074 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14075 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014076 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14077 {
14078 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14079 &pPNOScanReqParams->aNetworks[i],
14080 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014082 /*Scan timer intervals*/
14083 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14084 &pPNOScanReqParams->scanTimers,
14085 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014086 /*Probe template for 2.4GHz band*/
14087 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14088 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14089 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014090 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14091 pPNOScanReqParams->p24GProbeTemplate,
14092 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014093 /*Probe template for 5GHz band*/
14094 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14095 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14096 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014097 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14098 pPNOScanReqParams->p5GProbeTemplate,
14099 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014100 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14101 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014102
Jeff Johnson295189b2012-06-20 16:38:30 -070014103 /* Store Params pass it to WDI */
14104 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14105 pWdaParams->pWdaContext = pWDA;
14106 /* Store param pointer as passed in by caller */
14107 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014108 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014109 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014110 if(IS_WDI_STATUS_FAILURE(status))
14111 {
14112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14113 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014114 if(pPNOScanReqParams->statusCallback)
14115 {
14116 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14117 VOS_STATUS_E_FAILURE);
14118 }
14119
Jeff Johnson295189b2012-06-20 16:38:30 -070014120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14121 vos_mem_free(pWdaParams->wdaMsgParam);
14122 pWdaParams->wdaWdiApiMsgParam = NULL;
14123 pWdaParams->wdaMsgParam = NULL;
14124 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014125 return CONVERT_WDI2VOS_STATUS(status) ;
14126}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014127
14128#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14129
14130void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14131{
14132 /*Convert the CSR Auth types to WDI Auth types */
14133 switch (csrAuthType)
14134 {
14135 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14136 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14137 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014138#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014139 case eCSR_AUTH_TYPE_CCKM_WPA:
14140 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14141 break;
14142#endif
14143 case eCSR_AUTH_TYPE_WPA:
14144 *AuthType = eWDA_AUTH_TYPE_WPA;
14145 break;
14146 case eCSR_AUTH_TYPE_WPA_PSK:
14147 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14148 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014149#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014150 case eCSR_AUTH_TYPE_CCKM_RSN:
14151 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14152 break;
14153#endif
14154 case eCSR_AUTH_TYPE_RSN:
14155 *AuthType = eWDA_AUTH_TYPE_RSN;
14156 break;
14157 case eCSR_AUTH_TYPE_RSN_PSK:
14158 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14159 break;
14160#if defined WLAN_FEATURE_VOWIFI_11R
14161 case eCSR_AUTH_TYPE_FT_RSN:
14162 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14163 break;
14164 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14165 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14166 break;
14167#endif
14168#ifdef FEATURE_WLAN_WAPI
14169 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14170 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14171 break;
14172 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14173 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14174 break;
14175#endif /* FEATURE_WLAN_WAPI */
14176 case eCSR_AUTH_TYPE_SHARED_KEY:
14177 case eCSR_AUTH_TYPE_AUTOSWITCH:
14178 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14179 break;
14180#if 0
14181 case eCSR_AUTH_TYPE_SHARED_KEY:
14182 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14183 break;
14184 case eCSR_AUTH_TYPE_AUTOSWITCH:
14185 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14186#endif
14187 default:
14188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14189 "%s: Unknown Auth Type", __func__);
14190 break;
14191 }
14192}
14193void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
14194{
14195 switch (csrEncrType)
14196 {
14197 case eCSR_ENCRYPT_TYPE_NONE:
14198 *EncrType = WDI_ED_NONE;
14199 break;
14200 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
14201 case eCSR_ENCRYPT_TYPE_WEP40:
14202 *EncrType = WDI_ED_WEP40;
14203 break;
14204 case eCSR_ENCRYPT_TYPE_WEP104:
14205 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
14206 *EncrType = WDI_ED_WEP104;
14207 break;
14208 case eCSR_ENCRYPT_TYPE_TKIP:
14209 *EncrType = WDI_ED_TKIP;
14210 break;
14211 case eCSR_ENCRYPT_TYPE_AES:
14212 *EncrType = WDI_ED_CCMP;
14213 break;
14214#ifdef WLAN_FEATURE_11W
14215 case eCSR_ENCRYPT_TYPE_AES_CMAC:
14216 *EncrType = WDI_ED_AES_128_CMAC;
14217 break;
14218#endif
14219#ifdef FEATURE_WLAN_WAPI
14220 case eCSR_ENCRYPT_TYPE_WPI:
14221 *EncrType = WDI_ED_WPI;
14222 break;
14223#endif
14224 case eCSR_ENCRYPT_TYPE_ANY:
14225 *EncrType = WDI_ED_ANY;
14226 break;
14227
14228 default:
14229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14230 "%s: Unknown Encryption Type", __func__);
14231 break;
14232 }
14233}
14234
14235/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014236 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014237 * Request to WDI to set Roam Offload Scan
14238 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014239VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014240 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
14241{
14242 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014243 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
14244 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014245 tWDA_ReqParams *pWdaParams ;
14246 v_U8_t csrAuthType;
14247 WDI_RoamNetworkType *pwdiRoamNetworkType;
14248 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
14249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14250 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014251 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014252 {
14253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14254 "%s: VOS MEM Alloc Failure", __func__);
14255 VOS_ASSERT(0);
14256 return VOS_STATUS_E_NOMEM;
14257 }
14258 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14259 if (NULL == pWdaParams)
14260 {
14261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14262 "%s: VOS MEM Alloc Failure", __func__);
14263 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014264 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014265 return VOS_STATUS_E_NOMEM;
14266 }
14267
14268 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014269 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014270 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014271 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
14272 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014273 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
14274 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
14275 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
14276 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
14277 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
14278 sizeof(pwdiRoamNetworkType->currAPbssid));
14279 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
14280 csrAuthType);
14281 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
14282 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14283 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14284 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14285 pwdiRoamOffloadScanInfo->LookupThreshold =
14286 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014287 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14288 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014289 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14290 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014291 pwdiRoamOffloadScanInfo->MAWCEnabled =
14292 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014293 pwdiRoamOffloadScanInfo->Command =
14294 pRoamOffloadScanReqParams->Command ;
14295 pwdiRoamOffloadScanInfo->StartScanReason =
14296 pRoamOffloadScanReqParams->StartScanReason ;
14297 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14298 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14299 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14300 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14301 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14302 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14303 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14304 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14305 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14306 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014307 pwdiRoamOffloadScanInfo->IsESEEnabled =
14308 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014309 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14310 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14311 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14312 pwdiRoamNetworkType->ssId.ucLength =
14313 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14314 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14315 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14316 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14317 pwdiRoamNetworkType->ChannelCount =
14318 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14319 pwdiRoamOffloadScanInfo->ChannelCacheType =
14320 pRoamOffloadScanReqParams->ChannelCacheType;
14321 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14322 pRoamOffloadScanReqParams->ValidChannelList,
14323 pRoamOffloadScanReqParams->ValidChannelCount);
14324 pwdiRoamOffloadScanInfo->ValidChannelCount =
14325 pRoamOffloadScanReqParams->ValidChannelCount;
14326 pwdiRoamOffloadScanInfo->us24GProbeSize =
14327 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14328 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14329 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14330 pRoamOffloadScanReqParams->p24GProbeTemplate,
14331 pwdiRoamOffloadScanInfo->us24GProbeSize);
14332 pwdiRoamOffloadScanInfo->us5GProbeSize =
14333 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14334 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14335 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14336 pRoamOffloadScanReqParams->p5GProbeTemplate,
14337 pwdiRoamOffloadScanInfo->us5GProbeSize);
14338 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14339 pRoamOffloadScanReqParams->MDID.mdiePresent;
14340 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14341 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014342 pwdiRoamOffloadScanInfo->nProbes =
14343 pRoamOffloadScanReqParams->nProbes;
14344 pwdiRoamOffloadScanInfo->HomeAwayTime =
14345 pRoamOffloadScanReqParams->HomeAwayTime;
14346 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014347 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014348 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014349 pWdaParams->pWdaContext = pWDA;
14350 /* Store param pointer as passed in by caller */
14351 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014352 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014353 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14354 if(IS_WDI_STATUS_FAILURE(status))
14355 {
14356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14357 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14359 vos_mem_free(pWdaParams->wdaMsgParam);
14360 pWdaParams->wdaWdiApiMsgParam = NULL;
14361 pWdaParams->wdaMsgParam = NULL;
14362 }
14363 return CONVERT_WDI2VOS_STATUS(status) ;
14364}
14365#endif
14366
Jeff Johnson295189b2012-06-20 16:38:30 -070014367/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014368 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014369 *
14370 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014371void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014372{
14373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14374
14375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014376 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014377
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014378 if(NULL == pWdaParams)
14379 {
14380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014381 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014382 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014383 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014384 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014385
Jeff Johnson295189b2012-06-20 16:38:30 -070014386 vos_mem_free(pWdaParams->wdaMsgParam) ;
14387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14388 vos_mem_free(pWdaParams) ;
14389
14390 return ;
14391}
14392/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014393 * FUNCTION: WDA_RssiFilterReqCallback
14394 * Free memory.
14395 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14396 */
14397void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14398{
14399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14400
14401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14402 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14403
14404 if(NULL == pWdaParams)
14405 {
14406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14407 "%s: pWdaParams received NULL", __func__);
14408 VOS_ASSERT(0);
14409 return;
14410 }
14411
14412 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14413 {
14414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14415 vos_mem_free(pWdaParams->wdaMsgParam);
14416 vos_mem_free(pWdaParams);
14417 }
14418
14419 return;
14420}
14421/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014422 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14423 * Request to WDI to set Preferred Network List.Offload
14424 */
14425VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14426 tSirSetRSSIFilterReq* pRssiFilterParams)
14427{
Jeff Johnson43971f52012-07-17 12:26:56 -070014428 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014429 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14430 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14431 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014433 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014434 if(NULL == pwdiSetRssiFilterReqInfo)
14435 {
14436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014437 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014438 VOS_ASSERT(0);
14439 return VOS_STATUS_E_NOMEM;
14440 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014441 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14442 if(NULL == pWdaParams)
14443 {
14444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014445 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014446 VOS_ASSERT(0);
14447 vos_mem_free(pwdiSetRssiFilterReqInfo);
14448 return VOS_STATUS_E_NOMEM;
14449 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014450 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014451 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14452 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014453
Jeff Johnson295189b2012-06-20 16:38:30 -070014454 /* Store Params pass it to WDI */
14455 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14456 pWdaParams->pWdaContext = pWDA;
14457 /* Store param pointer as passed in by caller */
14458 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014459 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014460 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014461 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014462 if(IS_WDI_STATUS_FAILURE(status))
14463 {
14464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14465 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14467 vos_mem_free(pWdaParams->wdaMsgParam);
14468 pWdaParams->wdaWdiApiMsgParam = NULL;
14469 pWdaParams->wdaMsgParam = NULL;
14470 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014471 return CONVERT_WDI2VOS_STATUS(status) ;
14472}
14473
Jeff Johnson295189b2012-06-20 16:38:30 -070014474/*
14475 * FUNCTION: WDA_ProcessUpdateScanParams
14476 * Request to WDI to update Scan Parameters
14477 */
14478VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14479 tSirUpdateScanParams *pUpdateScanParams)
14480{
Jeff Johnson43971f52012-07-17 12:26:56 -070014481 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014482 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14483 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14484 sizeof(WDI_UpdateScanParamsInfoType)) ;
14485 tWDA_ReqParams *pWdaParams ;
14486 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014488 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014489 if(NULL == wdiUpdateScanParamsInfoType)
14490 {
14491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 VOS_ASSERT(0);
14494 return VOS_STATUS_E_NOMEM;
14495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014496 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14497 if ( NULL == pWdaParams )
14498 {
14499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014501 VOS_ASSERT(0);
14502 vos_mem_free(wdiUpdateScanParamsInfoType);
14503 return VOS_STATUS_E_NOMEM;
14504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014505 //
14506 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14507 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14509 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14510 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14511 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014512 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014513 pUpdateScanParams->b11dEnabled,
14514 pUpdateScanParams->b11dResolved,
14515 pUpdateScanParams->ucChannelCount,
14516 pUpdateScanParams->usPassiveMinChTime,
14517 pUpdateScanParams->usPassiveMaxChTime,
14518 pUpdateScanParams->usActiveMinChTime,
14519 pUpdateScanParams->usActiveMaxChTime,
14520 sizeof(tSirUpdateScanParams),
14521 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14522
Jeff Johnson295189b2012-06-20 16:38:30 -070014523 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14524 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014525 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14526 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014527 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14528 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014529 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14530 pUpdateScanParams->usActiveMaxChTime;
14531 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14532 pUpdateScanParams->usActiveMinChTime;
14533 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14534 pUpdateScanParams->usPassiveMaxChTime;
14535 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14536 pUpdateScanParams->usPassiveMinChTime;
14537
Jeff Johnson295189b2012-06-20 16:38:30 -070014538 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014539 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14540 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014541
Jeff Johnson295189b2012-06-20 16:38:30 -070014542 for ( i = 0; i <
14543 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14544 i++)
14545 {
14546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14547 "Update Scan Parameters channel: %d",
14548 pUpdateScanParams->aChannels[i]);
14549
14550 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14551 pUpdateScanParams->aChannels[i];
14552 }
14553
Yue Ma7f44bbe2013-04-12 11:47:39 -070014554 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14555 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014556
Jeff Johnson295189b2012-06-20 16:38:30 -070014557 /* Store Params pass it to WDI */
14558 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14559 pWdaParams->pWdaContext = pWDA;
14560 /* Store param pointer as passed in by caller */
14561 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014562
Jeff Johnson295189b2012-06-20 16:38:30 -070014563
14564
14565 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014566 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014567 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014568 if(IS_WDI_STATUS_FAILURE(status))
14569 {
14570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14571 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14573 vos_mem_free(pWdaParams->wdaMsgParam);
14574 vos_mem_free(pWdaParams);
14575 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014576 return CONVERT_WDI2VOS_STATUS(status) ;
14577}
14578#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014579
14580#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14581/*
14582 * FUNCTION: WDA_RoamOffloadScanReqCallback
14583 *
14584 */
14585void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14586{
14587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014588 vos_msg_t vosMsg;
14589 wpt_uint8 reason = 0;
14590
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014592 "<------ %s " ,__func__);
14593 if (NULL == pWdaParams)
14594 {
14595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14596 "%s: pWdaParams received NULL", __func__);
14597 VOS_ASSERT(0) ;
14598 return ;
14599 }
14600 if ( pWdaParams != NULL )
14601 {
14602 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14603 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014604 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14606 }
14607 if ( pWdaParams->wdaMsgParam != NULL)
14608 {
14609 vos_mem_free(pWdaParams->wdaMsgParam);
14610 }
14611
14612 vos_mem_free(pWdaParams) ;
14613 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014614 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14615 vosMsg.bodyptr = NULL;
14616 if (WDI_STATUS_SUCCESS != status)
14617 {
14618 reason = 0;
14619 }
14620 vosMsg.bodyval = reason;
14621 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14622 {
14623 /* free the mem and return */
14624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014625 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014626 }
14627
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014628 return ;
14629}
14630#endif
14631
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014632/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014633 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014634 *
14635 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014636void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014637{
14638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14639
14640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14641 "<------ %s " ,__func__);
14642
14643 if(NULL == pWdaParams)
14644 {
14645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14646 "%s: pWdaParams received NULL", __func__);
14647 VOS_ASSERT(0);
14648 return;
14649 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014650
14651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14652 vos_mem_free(pWdaParams->wdaMsgParam);
14653 vos_mem_free(pWdaParams);
14654
14655 return;
14656}
14657/*
14658 * FUNCTION: WDA_SetPowerParamsReqCallback
14659 * Free memory.
14660 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14661 */
14662void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14663{
14664 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14665
14666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14667 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14668
14669 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014670 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14672 "%s: pWdaParams received NULL", __func__);
14673 VOS_ASSERT(0);
14674 return;
14675 }
14676
14677 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14678 {
14679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14680 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014681 vos_mem_free(pWdaParams);
14682 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014683
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014684 return;
14685}
14686
Jeff Johnson295189b2012-06-20 16:38:30 -070014687#ifdef WLAN_FEATURE_PACKET_FILTERING
14688/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014689 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014690 *
14691 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014692void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014693 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14694 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014695{
14696 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014698 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014699 if(NULL == pWdaParams)
14700 {
14701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014702 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014703 VOS_ASSERT(0) ;
14704 return ;
14705 }
14706
14707 vos_mem_free(pWdaParams->wdaMsgParam) ;
14708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14709 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014710 //print a msg, nothing else to do
14711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014712 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014713 return ;
14714}
Jeff Johnson295189b2012-06-20 16:38:30 -070014715/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014716 * FUNCTION: WDA_8023MulticastListReqCallback
14717 * Free memory.
14718 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14719 */
14720void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14721{
14722 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14723
14724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14725 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14726
14727 if(NULL == pWdaParams)
14728 {
14729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14730 "%s: pWdaParams received NULL", __func__);
14731 VOS_ASSERT(0);
14732 return;
14733 }
14734
14735 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14736 {
14737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14738 vos_mem_free(pWdaParams->wdaMsgParam);
14739 vos_mem_free(pWdaParams);
14740 }
14741
14742 return;
14743}
14744/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014745 * FUNCTION: WDA_Process8023MulticastListReq
14746 * Request to WDI to add 8023 Multicast List
14747 */
14748VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14749 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14750{
Jeff Johnson43971f52012-07-17 12:26:56 -070014751 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014752 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14753 tWDA_ReqParams *pWdaParams ;
14754 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014756 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014757 pwdiFltPktSetMcListReqParamsType =
14758 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14759 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14760 ) ;
14761 if(NULL == pwdiFltPktSetMcListReqParamsType)
14762 {
14763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014765 return VOS_STATUS_E_NOMEM;
14766 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014767 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14768 if(NULL == pWdaParams)
14769 {
14770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014772 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14773 return VOS_STATUS_E_NOMEM;
14774 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014775
Jeff Johnson295189b2012-06-20 16:38:30 -070014776 //
14777 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14778 //
14779 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014780 pRcvFltMcAddrList->ulMulticastAddrCnt;
14781
14782 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14783 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14784 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14785 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14786
Jeff Johnson295189b2012-06-20 16:38:30 -070014787 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14788 {
14789 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14790 &(pRcvFltMcAddrList->multicastAddr[i]),
14791 sizeof(tSirMacAddr));
14792 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014793 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14794 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014795
Jeff Johnson295189b2012-06-20 16:38:30 -070014796 /* Store Params pass it to WDI */
14797 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14798 pWdaParams->pWdaContext = pWDA;
14799 /* Store param pointer as passed in by caller */
14800 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014801 status = WDI_8023MulticastListReq(
14802 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014803 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014804 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014805 if(IS_WDI_STATUS_FAILURE(status))
14806 {
14807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14808 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14810 vos_mem_free(pWdaParams->wdaMsgParam);
14811 vos_mem_free(pWdaParams);
14812 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014813 return CONVERT_WDI2VOS_STATUS(status) ;
14814}
Jeff Johnson295189b2012-06-20 16:38:30 -070014815/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014816 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014817 *
14818 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014819void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014820 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14821 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014822{
14823 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014825 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014826 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014827 if(NULL == pWdaParams)
14828 {
14829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014830 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014831 VOS_ASSERT(0) ;
14832 return ;
14833 }
14834
14835 vos_mem_free(pWdaParams->wdaMsgParam) ;
14836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14837 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014838 //print a msg, nothing else to do
14839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014840 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014841 return ;
14842}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014843
14844/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014845 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14846 * Free memory.
14847 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014848 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014849void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014850 void* pUserData)
14851{
14852 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14853
14854 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14855 "<------ %s, wdiStatus: %d",
14856 __func__, wdiStatus);
14857
14858 if (NULL == pWdaParams)
14859 {
14860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14861 "%s: Invalid pWdaParams pointer", __func__);
14862 VOS_ASSERT(0);
14863 return;
14864 }
14865
14866 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14867 {
14868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14869 vos_mem_free(pWdaParams->wdaMsgParam);
14870 vos_mem_free(pWdaParams);
14871 }
14872
14873 return;
14874}
14875
Jeff Johnson295189b2012-06-20 16:38:30 -070014876/*
14877 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14878 * Request to WDI to set Receive Filters
14879 */
14880VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14881 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14882{
Jeff Johnson43971f52012-07-17 12:26:56 -070014883 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014884 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14885 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14886 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14887 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14888 tWDA_ReqParams *pWdaParams ;
14889 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014891 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014892 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14893 {
14894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014896 VOS_ASSERT(0);
14897 return VOS_STATUS_E_NOMEM;
14898 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014899 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14900 if(NULL == pWdaParams)
14901 {
14902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014904 VOS_ASSERT(0);
14905 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14906 return VOS_STATUS_E_NOMEM;
14907 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014908 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14909 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14910 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14911 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014912 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14913 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14914
14915 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14916 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014917
14918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14919 "FID %d FT %d NParams %d CT %d",
14920 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14921 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14922 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14923 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014924 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14925 {
14926 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14927 &pRcvPktFilterCfg->paramsData[i],
14928 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014930 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014931 pwdiSetRcvPktFilterReqParamsType->
14932 wdiPktFilterCfg.paramsData[i].protocolLayer,
14933 pwdiSetRcvPktFilterReqParamsType->
14934 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014936 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014937 pwdiSetRcvPktFilterReqParamsType->
14938 wdiPktFilterCfg.paramsData[i].dataOffset,
14939 pwdiSetRcvPktFilterReqParamsType->
14940 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014942 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014943 pwdiSetRcvPktFilterReqParamsType->
14944 wdiPktFilterCfg.paramsData[i].compareData[0],
14945 pwdiSetRcvPktFilterReqParamsType->
14946 wdiPktFilterCfg.paramsData[i].compareData[1],
14947 pwdiSetRcvPktFilterReqParamsType->
14948 wdiPktFilterCfg.paramsData[i].compareData[2],
14949 pwdiSetRcvPktFilterReqParamsType->
14950 wdiPktFilterCfg.paramsData[i].compareData[3],
14951 pwdiSetRcvPktFilterReqParamsType->
14952 wdiPktFilterCfg.paramsData[i].compareData[4],
14953 pwdiSetRcvPktFilterReqParamsType->
14954 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014956 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014957 pwdiSetRcvPktFilterReqParamsType->
14958 wdiPktFilterCfg.paramsData[i].dataMask[0],
14959 pwdiSetRcvPktFilterReqParamsType->
14960 wdiPktFilterCfg.paramsData[i].dataMask[1],
14961 pwdiSetRcvPktFilterReqParamsType->
14962 wdiPktFilterCfg.paramsData[i].dataMask[2],
14963 pwdiSetRcvPktFilterReqParamsType->
14964 wdiPktFilterCfg.paramsData[i].dataMask[3],
14965 pwdiSetRcvPktFilterReqParamsType->
14966 wdiPktFilterCfg.paramsData[i].dataMask[4],
14967 pwdiSetRcvPktFilterReqParamsType->
14968 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014969 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014970 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014971 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014972 /* Store Params pass it to WDI */
14973 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14974 pWdaParams->pWdaContext = pWDA;
14975 /* Store param pointer as passed in by caller */
14976 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014977 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014978 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014979 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014980 if(IS_WDI_STATUS_FAILURE(status))
14981 {
14982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14983 "Failure in SetFilter(),free all the memory,status %d ",status);
14984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14985 vos_mem_free(pWdaParams->wdaMsgParam);
14986 vos_mem_free(pWdaParams);
14987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014988 return CONVERT_WDI2VOS_STATUS(status) ;
14989}
Jeff Johnson295189b2012-06-20 16:38:30 -070014990/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014991 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014992 *
14993 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014994void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014995 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14996 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014997{
14998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14999 tWDA_CbContext *pWDA;
15000 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15001 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15002 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15003 tANI_U8 i;
15004 vos_msg_t vosMsg;
15005
15006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015008 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15009
Jeff Johnsone7245742012-09-05 17:12:55 -070015010 if(NULL == pRcvFltPktMatchCntRsp)
15011 {
15012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015013 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015014 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015015 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015016 return ;
15017 }
15018
Jeff Johnson295189b2012-06-20 16:38:30 -070015019 if(NULL == pWdaParams)
15020 {
15021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015022 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015023 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015024 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015025 return ;
15026 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015027 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15028 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015029 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15030 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15031
15032 /* Message Header */
15033 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15034 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15035
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015036 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015037
15038 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15039 {
15040 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15041 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015043 /* VOS message wrapper */
15044 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15045 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15046 vosMsg.bodyval = 0;
15047 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15048 {
15049 /* free the mem and return */
15050 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15051 }
15052
15053 vos_mem_free(pWdaParams->wdaMsgParam) ;
15054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15055 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015056
15057 return;
15058}
15059/*
15060 * FUNCTION: WDA_FilterMatchCountReqCallback
15061 * Free memory and send RSP back to SME.
15062 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15063 */
15064void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15065{
15066 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15067 vos_msg_t vosMsg;
15068
15069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15070 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15071
15072 if(NULL == pWdaParams)
15073 {
15074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15075 "%s: pWdaParams received NULL", __func__);
15076 VOS_ASSERT(0);
15077 return;
15078 }
15079
15080 /* VOS message wrapper */
15081 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15082 vosMsg.bodyptr = NULL;
15083 vosMsg.bodyval = 0;
15084
15085 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15086 {
15087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15088 vos_mem_free(pWdaParams->wdaMsgParam);
15089 vos_mem_free(pWdaParams);
15090 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15091 }
15092
15093 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015094}
Jeff Johnson295189b2012-06-20 16:38:30 -070015095/*
15096 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15097 * Request to WDI to get PC Filter Match Count
15098 */
15099VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15100{
Jeff Johnson43971f52012-07-17 12:26:56 -070015101 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015102 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15103 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15104 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015106 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015107 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15108 {
15109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015111 VOS_ASSERT(0);
15112 return VOS_STATUS_E_NOMEM;
15113 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015114 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15115 if(NULL == pWdaParams)
15116 {
15117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015119 VOS_ASSERT(0);
15120 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15121 return VOS_STATUS_E_NOMEM;
15122 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015123
Yue Ma7f44bbe2013-04-12 11:47:39 -070015124 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15125 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015126
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015127 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15128 pRcvFltPktMatchRsp->bssId,
15129 sizeof(wpt_macAddr));
15130
Jeff Johnson295189b2012-06-20 16:38:30 -070015131 /* Store Params pass it to WDI */
15132 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15133 pWdaParams->pWdaContext = pWDA;
15134 /* Store param pointer as passed in by caller */
15135 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015136 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015137 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015138 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015139 if(IS_WDI_STATUS_FAILURE(status))
15140 {
15141 /* failure returned by WDI API */
15142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15143 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15144 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15145 vos_mem_free(pWdaParams) ;
15146 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15147 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015149 return CONVERT_WDI2VOS_STATUS(status) ;
15150}
Jeff Johnson295189b2012-06-20 16:38:30 -070015151/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015152 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015153 *
15154 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015155void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015156 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15157 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015158{
15159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015161 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015162/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15163 if(NULL == pWdaParams)
15164 {
15165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015166 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015167 VOS_ASSERT(0) ;
15168 return ;
15169 }
15170
15171 vos_mem_free(pWdaParams->wdaMsgParam) ;
15172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15173 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015174 //print a msg, nothing else to do
15175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015176 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015177 return ;
15178}
Jeff Johnson295189b2012-06-20 16:38:30 -070015179/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015180 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15181 * Free memory.
15182 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15183 */
15184void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15185{
15186 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15187
15188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15189 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15190
15191 if(NULL == pWdaParams)
15192 {
15193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15194 "%s: Invalid pWdaParams pointer", __func__);
15195 VOS_ASSERT(0);
15196 return;
15197 }
15198
15199 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15200 {
15201 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15202 vos_mem_free(pWdaParams->wdaMsgParam);
15203 vos_mem_free(pWdaParams);
15204 }
15205
15206 return;
15207}
15208/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015209 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
15210 * Request to WDI to clear Receive Filters
15211 */
15212VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
15213 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
15214{
Jeff Johnson43971f52012-07-17 12:26:56 -070015215 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015216 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
15217 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
15218 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015220 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015221 if(NULL == pwdiRcvFltPktClearReqParamsType)
15222 {
15223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015224 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015225 VOS_ASSERT(0);
15226 return VOS_STATUS_E_NOMEM;
15227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15229 if(NULL == pWdaParams)
15230 {
15231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015233 VOS_ASSERT(0);
15234 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
15235 return VOS_STATUS_E_NOMEM;
15236 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015237 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
15238 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070015239 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
15240 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
15241 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
15242 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015243
Yue Ma7f44bbe2013-04-12 11:47:39 -070015244 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015245 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015246 /* Store Params pass it to WDI */
15247 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
15248 pWdaParams->pWdaContext = pWDA;
15249 /* Store param pointer as passed in by caller */
15250 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015251 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015252 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015253 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015254 if(IS_WDI_STATUS_FAILURE(status))
15255 {
15256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15257 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
15258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080015259 vos_mem_free(pWdaParams->wdaMsgParam);
15260 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015261 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015262 return CONVERT_WDI2VOS_STATUS(status) ;
15263}
15264#endif // WLAN_FEATURE_PACKET_FILTERING
15265
Jeff Johnson295189b2012-06-20 16:38:30 -070015266/*
15267 * FUNCTION: WDA_ProcessSetPowerParamsReq
15268 * Request to WDI to set power params
15269 */
15270VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
15271 tSirSetPowerParamsReq *pPowerParams)
15272{
Jeff Johnson43971f52012-07-17 12:26:56 -070015273 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015274 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
15275 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015276 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015278 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015279 if(NULL == pwdiSetPowerParamsReqInfo)
15280 {
15281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015282 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015283 VOS_ASSERT(0);
15284 return VOS_STATUS_E_NOMEM;
15285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015286 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15287 if(NULL == pWdaParams)
15288 {
15289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015291 VOS_ASSERT(0);
15292 vos_mem_free(pwdiSetPowerParamsReqInfo);
15293 return VOS_STATUS_E_NOMEM;
15294 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015295
Jeff Johnson295189b2012-06-20 16:38:30 -070015296
15297 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15298 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015299 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15300 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015301 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15302 pPowerParams->uListenInterval;
15303 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15304 pPowerParams->uBcastMcastFilter;
15305 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15306 pPowerParams->uEnableBET;
15307 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15308 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015309 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15310 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015311 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15312 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015313
Jeff Johnson295189b2012-06-20 16:38:30 -070015314 /* Store Params pass it to WDI */
15315 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15316 pWdaParams->pWdaContext = pWDA;
15317 /* Store param pointer as passed in by caller */
15318 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015319 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015320 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015321 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015322 if(IS_WDI_STATUS_FAILURE(status))
15323 {
15324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15325 "Failure in Set power params REQ WDI API, free all the memory " );
15326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15327 vos_mem_free(pWdaParams->wdaMsgParam);
15328 pWdaParams->wdaWdiApiMsgParam = NULL;
15329 pWdaParams->wdaMsgParam = NULL;
15330 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015331 return CONVERT_WDI2VOS_STATUS(status) ;
15332}
15333
15334/*
15335 * FUNCTION: WDA_SetTmLevelRspCallback
15336 * Set TM Level response
15337 */
15338void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15339{
15340 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15341
15342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015343 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015344
15345 if(NULL == pWdaParams)
15346 {
15347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015348 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015349 VOS_ASSERT(0) ;
15350 return ;
15351 }
15352
15353 /* Dose not need to send notification to upper layer
15354 * Just free allocated resources */
15355 if( pWdaParams != NULL )
15356 {
15357 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15358 {
15359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15360 }
15361 vos_mem_free(pWdaParams->wdaMsgParam) ;
15362 vos_mem_free(pWdaParams) ;
15363 }
15364}
15365
15366/*
15367 * FUNCTION: WDA_ProcessSetTmLevelReq
15368 * Set TM Level request
15369 */
15370VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15371 tAniSetTmLevelReq *setTmLevelReq)
15372{
15373 WDI_Status status = WDI_STATUS_SUCCESS ;
15374 tWDA_ReqParams *pWdaParams ;
15375 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15376 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15377 sizeof(WDI_SetTmLevelReqType)) ;
15378 if(NULL == wdiSetTmLevelReq)
15379 {
15380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015382 VOS_ASSERT(0);
15383 return VOS_STATUS_E_NOMEM;
15384 }
15385
15386 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15387 if(NULL == pWdaParams)
15388 {
15389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015391 VOS_ASSERT(0);
15392 vos_mem_free(wdiSetTmLevelReq);
15393 return VOS_STATUS_E_NOMEM;
15394 }
15395
15396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015397 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015398
15399 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15400 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15401
15402 pWdaParams->pWdaContext = pWDA;
15403 pWdaParams->wdaMsgParam = setTmLevelReq;
15404 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15405
15406 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15407 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15408
15409 if(IS_WDI_STATUS_FAILURE(status))
15410 {
15411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015412 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015413 vos_mem_free(pWdaParams->wdaMsgParam) ;
15414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15415 vos_mem_free(pWdaParams) ;
15416 }
15417
15418 return CONVERT_WDI2VOS_STATUS(status) ;
15419}
15420
15421VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15422 tpTxControlParams pTxCtrlParam)
15423{
15424 VOS_STATUS wdaStatus;
15425
15426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015427 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015428 if( pTxCtrlParam == NULL )
15429 {
15430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015431 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015432 return VOS_STATUS_E_FAILURE;
15433 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015434 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15435 {
15436 wdaStatus = WDA_SuspendDataTx(pWDA);
15437 }
15438 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15439 {
15440 wdaStatus = WDA_ResumeDataTx(pWDA);
15441 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015442 return wdaStatus;
15443}
15444
15445 /* FUNCTION WDA_featureCapsExchange
15446 * WDA API to invoke capability exchange between host and FW.
15447 */
15448void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15449{
15450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015451 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015452 WDI_featureCapsExchangeReq( NULL, pVosContext);
15453}
15454
Yathish9f22e662012-12-10 14:21:35 -080015455/* FUNCTION WDA_disableCapablityFeature
15456 * WDA API to diable Active mode offload in host.
15457 */
15458void WDA_disableCapablityFeature(tANI_U8 feature_index)
15459{
15460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15461 "%s:enter", __func__ );
15462 WDI_disableCapablityFeature(feature_index);
15463}
15464
Jeff Johnson295189b2012-06-20 16:38:30 -070015465 /* FUNCTION WDA_getHostWlanFeatCaps
15466 * Wrapper for WDI API, that will return if the feature (enum value).passed
15467 * to this API is supported or not in Host
15468 * return value
15469 * 0 - implies feature is NOT Supported
15470 * any non zero value - implies feature is SUPPORTED
15471 */
15472tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15473{
15474 return WDI_getHostWlanFeatCaps(featEnumValue);
15475}
15476
15477 /* FUNCTION WDA_getFwWlanFeatCaps
15478 * Wrapper for WDI API, that will return if the feature (enum value).passed
15479 * to this API is supported or not in FW
15480 * return value
15481 * 0 - implies feature is NOT Supported
15482 * any non zero value - implies feature is SUPPORTED
15483 */
15484tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15485{
15486 return WDI_getFwWlanFeatCaps(featEnumValue);
15487}
15488
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015489
Jeff Johnson295189b2012-06-20 16:38:30 -070015490/*
15491 * FUNCTION: WDA_shutdown
15492 * Shutdown WDA/WDI without handshaking with Riva.
15493 * Synchronous function.
15494 */
15495VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15496{
15497 WDI_Status wdiStatus;
15498 //tANI_U8 eventIdx = 0;
15499 VOS_STATUS status = VOS_STATUS_SUCCESS;
15500 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015501 if (NULL == pWDA)
15502 {
15503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015504 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015505 VOS_ASSERT(0);
15506 return VOS_STATUS_E_FAILURE;
15507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015508 /* FTM mode stay START_STATE */
15509 if( (WDA_READY_STATE != pWDA->wdaState) &&
15510 (WDA_INIT_STATE != pWDA->wdaState) &&
15511 (WDA_START_STATE != pWDA->wdaState) )
15512 {
15513 VOS_ASSERT(0);
15514 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015515
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015516 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15517 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015518 {
15519 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015520 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015521 }
Leo Chang9d76f622013-08-23 16:34:52 -070015522 else
15523 {
15524 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15525 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015526
Jeff Johnson295189b2012-06-20 16:38:30 -070015527 /* call WDI shutdown */
15528 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015529 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15530 {
15531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15532 "error in WDA Stop" );
15533 status = VOS_STATUS_E_FAILURE;
15534 }
15535 /* WDI stop is synchrnous, shutdown is complete when it returns */
15536 pWDA->wdaState = WDA_STOP_STATE;
15537
Jeff Johnson295189b2012-06-20 16:38:30 -070015538 /* shutdown should perform the stop & close actions. */
15539 /* Destroy the event */
15540 status = vos_event_destroy(&pWDA->txFrameEvent);
15541 if(!VOS_IS_STATUS_SUCCESS(status))
15542 {
15543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015544 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 status = VOS_STATUS_E_FAILURE;
15546 }
15547 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15548 if(!VOS_IS_STATUS_SUCCESS(status))
15549 {
15550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015551 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015552 status = VOS_STATUS_E_FAILURE;
15553 }
15554 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15555 if(!VOS_IS_STATUS_SUCCESS(status))
15556 {
15557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015558 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015559 status = VOS_STATUS_E_FAILURE;
15560 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015561 /* free WDA context */
15562 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15563 if ( !VOS_IS_STATUS_SUCCESS(status) )
15564 {
15565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15566 "error in WDA close " );
15567 status = VOS_STATUS_E_FAILURE;
15568 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015569 return status;
15570}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015571
Jeff Johnsone7245742012-09-05 17:12:55 -070015572/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015573 * FUNCTION: WDA_setNeedShutdown
15574 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015575 */
15576
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015577void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015578{
15579 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015580 if(pWDA == NULL)
15581 {
15582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15583 "Could not get the WDA Context pointer" );
15584 return;
15585 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015586 pWDA->needShutdown = TRUE;
15587}
15588/*
15589 * FUNCTION: WDA_needShutdown
15590 * WDA needs a shutdown
15591 */
15592
15593v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15594{
15595 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015596 if(pWDA == NULL)
15597 {
15598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15599 "Could not get the WDA Context pointer" );
15600 return 0;
15601 }
15602 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015603}
15604
Mohit Khanna4a70d262012-09-11 16:30:12 -070015605#ifdef WLAN_FEATURE_11AC
15606/*
15607 * FUNCTION: WDA_SetBeaconFilterReqCallback
15608 *
15609 */
15610void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15611{
15612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015614 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015615 if(NULL == pWdaParams)
15616 {
15617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015618 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015619 VOS_ASSERT(0) ;
15620 return ;
15621 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015622
Mohit Khanna4a70d262012-09-11 16:30:12 -070015623 vos_mem_free(pWdaParams->wdaMsgParam) ;
15624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15625 vos_mem_free(pWdaParams) ;
15626 /*
15627 * No respone required for SetBeaconFilter req so just free the request
15628 * param here
15629 */
15630
15631 return ;
15632}
15633
15634VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15635 tUpdateVHTOpMode *pData)
15636{
15637 WDI_Status status = WDI_STATUS_SUCCESS ;
15638 tWDA_ReqParams *pWdaParams ;
15639 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15640 sizeof(WDI_UpdateVHTOpMode)) ;
15641 if(NULL == wdiTemp)
15642 {
15643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015644 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015645 VOS_ASSERT(0);
15646 return VOS_STATUS_E_NOMEM;
15647 }
15648 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15649 if(NULL == pWdaParams)
15650 {
15651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015652 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015653 VOS_ASSERT(0);
15654 vos_mem_free(wdiTemp);
15655 return VOS_STATUS_E_NOMEM;
15656 }
15657
15658 wdiTemp->opMode = pData->opMode;
15659 wdiTemp->staId = pData->staId;
15660
15661 pWdaParams->pWdaContext = pWDA;
15662 /* Store Req pointer, as this will be used for response */
15663 pWdaParams->wdaMsgParam = (void *)pData;
15664 /* store Params pass it to WDI */
15665 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15666
15667 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15668
15669 if(IS_WDI_STATUS_FAILURE(status))
15670 {
15671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15672 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15674 vos_mem_free(pWdaParams->wdaMsgParam);
15675 vos_mem_free(pWdaParams);
15676 }
15677 return CONVERT_WDI2VOS_STATUS(status) ;
15678}
15679#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015680
15681/*==========================================================================
15682 FUNCTION WDA_TransportChannelDebug
15683
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015684 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015685 Display Transport Channel debugging information
15686 User may request to display DXE channel snapshot
15687 Or if host driver detects any abnormal stcuk may display
15688
15689 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015690 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015691 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053015692 debugFlags : Enable stall detect features
15693 defined by WPAL_DeviceDebugFlags
15694 These features may effect
15695 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015696
15697 RETURN VALUE
15698 NONE
15699
15700===========================================================================*/
15701void WDA_TransportChannelDebug
15702(
schang6295e542013-03-12 15:31:23 -070015703 tpAniSirGlobal pMac,
15704 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053015705 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015706)
15707{
Mihir Shete40a55652014-03-02 14:14:47 +053015708 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015709 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015710}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015711
15712/*==========================================================================
15713 FUNCTION WDA_SetEnableSSR
15714
15715 DESCRIPTION
15716 API to enable/disable SSR on WDI timeout
15717
15718 PARAMETERS
15719 enableSSR : enable/disable SSR
15720
15721 RETURN VALUE
15722 NONE
15723
15724===========================================================================*/
15725void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15726{
15727 WDI_SetEnableSSR(enableSSR);
15728}
Leo Chang9056f462013-08-01 19:21:11 -070015729
15730#ifdef FEATURE_WLAN_LPHB
15731/*
15732 * FUNCTION: WDA_LPHBconfRspCallback
15733 *
15734 */
15735void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15736{
15737 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15738
15739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15740 "<------ %s " ,__func__);
15741 if (NULL == pWdaParams)
15742 {
15743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15744 "%s: pWdaParams received NULL", __func__);
15745 VOS_ASSERT(0) ;
15746 return ;
15747 }
15748
15749 /* Do not need to send notification to upper layer
15750 * Just free allocated resources */
15751 if (pWdaParams != NULL)
15752 {
15753 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15754 {
15755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15756 }
15757 vos_mem_free(pWdaParams->wdaMsgParam) ;
15758 vos_mem_free(pWdaParams) ;
15759 }
15760
15761 return;
15762}
15763
15764/*
15765 * FUNCTION: WDA_ProcessLPHBConfReq
15766 *
15767 */
15768VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15769 tSirLPHBReq *pData)
15770{
15771 WDI_Status wdiStatus;
15772 tWDA_ReqParams *pWdaParams ;
15773
15774 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15775 "------> %s " , __func__);
15776
15777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15778 if (NULL == pWdaParams)
15779 {
15780 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15781 "%s: VOS MEM Alloc Failure", __func__);
15782 VOS_ASSERT(0);
15783 vos_mem_free(pData);
15784 return VOS_STATUS_E_NOMEM;
15785 }
15786
15787 pWdaParams->pWdaContext = pWDA;
15788 pWdaParams->wdaMsgParam = (void *)pData;
15789 pWdaParams->wdaWdiApiMsgParam = NULL;
15790
15791 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15792 if (WDI_STATUS_PENDING == wdiStatus)
15793 {
15794 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15795 "Pending received for %s:%d ", __func__, __LINE__);
15796 }
15797 else if (WDI_STATUS_SUCCESS != wdiStatus)
15798 {
15799 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15800 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15801 vos_mem_free(pWdaParams->wdaMsgParam);
15802 vos_mem_free(pWdaParams);
15803 }
15804
15805 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15806}
15807#endif /* FEATURE_WLAN_LPHB */
15808