blob: b3d79a0db431ff1b9984f034df90ec9c52682c53 [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
c_hpothu92367912014-05-01 15:18:17 +0530211v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
212 tSirBcnMissRateReq *pData);
213
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Leo Chang9056f462013-08-01 19:21:11 -0700220
221#ifdef FEATURE_WLAN_LPHB
222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
223 tSirLPHBReq *pData);
224#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530225
226#ifdef WLAN_FEATURE_LINK_LAYER_STATS
227VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
228 tSirLLStatsSetReq *wdaRequest);
229
230VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
231 tSirLLStatsGetReq *wdaRequest);
232
233VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
234 tSirLLStatsClearReq *wdaRequest);
235#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Jeff Johnson295189b2012-06-20 16:38:30 -0700236/*
237 * FUNCTION: WDA_open
238 * Allocate the WDA context
239 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530240VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700241 tMacOpenParameters *pMacParams )
242{
243 tWDA_CbContext *wdaContext;
244 VOS_STATUS status;
245 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700246 /* Allocate WDA context */
247 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
248 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
249 if(!VOS_IS_STATUS_SUCCESS(status))
250 {
251 return VOS_STATUS_E_NOMEM;
252 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700253 /*__asm int 3;*/
254 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
255
256 /* Initialize data structures */
257 wdaContext->pVosContext = pVosContext;
258 wdaContext->wdaState = WDA_INIT_STATE;
259 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
260
261 /* Initialize WDA-WDI synchronization event */
262 status = vos_event_init(&wdaContext->wdaWdiEvent);
263 if(!VOS_IS_STATUS_SUCCESS(status))
264 {
265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800266 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800267 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 /* Init Frame transfer event */
270 status = vos_event_init(&wdaContext->txFrameEvent);
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 Mgmt Frame 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 status = vos_event_init(&wdaContext->suspendDataTxEvent);
278 if(!VOS_IS_STATUS_SUCCESS(status))
279 {
280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800281 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800282 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700284 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
285 if(!VOS_IS_STATUS_SUCCESS(status))
286 {
287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800288 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800289 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700290 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700292 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530293 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700294 &wdiDevCapability, pMacParams->driverType))
295 {
296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
297 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800298 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700299 }
300 else
301 {
302 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
303 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
304 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700305 /* update max STA in WDA used for BA */
306 wdaContext->wdaMaxSta = pMacParams->maxStation;
307 /* store the frameTransRequired flag in wdaContext, to send this to HAL
308 * in WDA_Start
309 */
310 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
311 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700312 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800313
314error:
315 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
316 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700317}
318
Jeff Johnson295189b2012-06-20 16:38:30 -0700319/*
320 * FUNCTION: WDA_preStart
321 * Trigger DAL-AL to start CFG download
322 */
323VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
324{
325 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
326 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700327 /*
328 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
329 */
330 wdaMsg.type = WNI_CFG_DNLD_REQ ;
331 wdaMsg.bodyptr = NULL;
332 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700333 /* post the message.. */
334 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
335 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
336 {
337 vosStatus = VOS_STATUS_E_BADMSG;
338 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700339 return( vosStatus );
340}
Jeff Johnson295189b2012-06-20 16:38:30 -0700341/*
342 * FUNCTION: WDA_wdiStartCallback
343 * Once WDI_Start is finished, WDI start callback will be called by WDI
344 * to indicate completion of WDI_Start.
345 */
346void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
347 void *pVosContext)
348{
349 tWDA_CbContext *wdaContext;
350 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700351 if (NULL == pVosContext)
352 {
353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700354 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700355 return;
356 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700357 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
358 if (NULL == wdaContext)
359 {
360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700361 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700362 return;
363 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700364 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
365 {
366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700367 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700368 }
369 else
370 {
371 wdaContext->wdaState = WDA_START_STATE;
372 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700373 /* extract and save version information from the Start Response */
374 wdaContext->wcnssWlanCompiledVersion.major =
375 wdiRspParams->wlanCompiledVersion.major;
376 wdaContext->wcnssWlanCompiledVersion.minor =
377 wdiRspParams->wlanCompiledVersion.minor;
378 wdaContext->wcnssWlanCompiledVersion.version =
379 wdiRspParams->wlanCompiledVersion.version;
380 wdaContext->wcnssWlanCompiledVersion.revision =
381 wdiRspParams->wlanCompiledVersion.revision;
382 wdaContext->wcnssWlanReportedVersion.major =
383 wdiRspParams->wlanReportedVersion.major;
384 wdaContext->wcnssWlanReportedVersion.minor =
385 wdiRspParams->wlanReportedVersion.minor;
386 wdaContext->wcnssWlanReportedVersion.version =
387 wdiRspParams->wlanReportedVersion.version;
388 wdaContext->wcnssWlanReportedVersion.revision =
389 wdiRspParams->wlanReportedVersion.revision;
390 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
391 wdiRspParams->wcnssSoftwareVersion,
392 sizeof(wdaContext->wcnssSoftwareVersionString));
393 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
394 wdiRspParams->wcnssHardwareVersion,
395 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 /* Notify WDA_start that WDI_Start has completed */
397 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700398 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 {
400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700401 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700403 return;
404}
405
Jeff Johnson295189b2012-06-20 16:38:30 -0700406/*
407 * FUNCTION: WDA_start
408 * Prepare TLV configuration and call WDI_Start.
409 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700410VOS_STATUS WDA_start(v_PVOID_t pVosContext)
411{
412 tWDA_CbContext *wdaContext;
413 VOS_STATUS status;
414 WDI_Status wdiStatus;
415 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 if (NULL == pVosContext)
417 {
418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700419 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700420 return VOS_STATUS_E_FAILURE;
421 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
423 if (NULL == wdaContext)
424 {
425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700426 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700427 return VOS_STATUS_E_FAILURE;
428 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 /* Non-FTM mode, WDA status for START must be INIT
430 * FTM mode, WDA Status for START can be INIT or STOP */
431 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
432 (WDA_STOP_STATE != wdaContext->wdaState) )
433 {
434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
435 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700436 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700437 return VOS_STATUS_E_FAILURE;
438 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 /* initialize the wdiStartParam. Note that we can create this on
440 the stack since we won't exit until WDI_Start() completes or
441 times out */
442 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 /* prepare the config TLV for the WDI */
445 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
446 if ( !VOS_IS_STATUS_SUCCESS(status) )
447 {
448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700449 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700450 return VOS_STATUS_E_FAILURE;
451 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 /* note from here onwards if an error occurs we must
453 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
455 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
456 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 /* initialize the WDA-WDI synchronization event */
458 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 /* call WDI start */
460 wdiStatus = WDI_Start(&wdiStartParam,
461 (WDI_StartRspCb)WDA_wdiStartCallback,
462 (v_VOID_t *)pVosContext);
463 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
464 {
465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700466 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 vos_mem_free(wdiStartParam.pConfigBuffer);
468 return VOS_STATUS_E_FAILURE;
469 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 /* wait for WDI start to invoke our callback */
471 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
472 WDA_WDI_START_TIMEOUT );
473 if ( !VOS_IS_STATUS_SUCCESS(status) )
474 {
475 if ( VOS_STATUS_E_TIMEOUT == status )
476 {
477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700478 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700479 }
480 else
481 {
482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
483 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700484 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 }
486 vos_mem_free(wdiStartParam.pConfigBuffer);
487 return VOS_STATUS_E_FAILURE;
488 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700490 /* we no longer need the config TLV */
491 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700492 /* if we are not in the START state then WDI_Start() failed */
493 if (WDA_START_STATE != wdaContext->wdaState)
494 {
495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700496 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700497 return VOS_STATUS_E_FAILURE;
498 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700499 /* FTM mode does not need to monitor BA activity */
500 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
501 {
502 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800503 if(VOS_STATUS_SUCCESS == status)
504 {
505 wdaContext->wdaTimersCreated = VOS_TRUE;
506 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700507 }
Leo Chang9d76f622013-08-23 16:34:52 -0700508 else
509 {
510 vos_event_init(&wdaContext->ftmStopDoneEvent);
511 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 return status;
513}
514
Jeff Johnson295189b2012-06-20 16:38:30 -0700515/*
516 * FUNCTION: WDA_prepareConfigTLV
517 * Function to prepare CFG for DAL(WDA)
518 */
519VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
520 WDI_StartReqParamsType *wdiStartParams )
521{
522 /* get pMac to acess CFG data base */
523 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
524 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
525 tHalCfg *tlvStruct = NULL ;
526 tANI_U8 *tlvStructStart = NULL ;
527 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
528 v_PVOID_t *configParam;
529 tANI_U32 configParamSize;
530 tANI_U32 *configDataValue;
531 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700532 tANI_U8 i;
533
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 if ((NULL == pMac)||(NULL == wdaContext))
535 {
536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700537 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 VOS_ASSERT(0);
539 return VOS_STATUS_E_FAILURE;
540 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
542 WNI_CFG_STA_ID_LEN +
543 WNI_CFG_EDCA_WME_ACBK_LEN +
544 WNI_CFG_EDCA_WME_ACBE_LEN +
545 WNI_CFG_EDCA_WME_ACVI_LEN +
546 WNI_CFG_EDCA_WME_ACVO_LEN +
547 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* malloc memory for all configs in one shot */
549 configParam = vos_mem_malloc(configParamSize);
550
551 if(NULL == configParam )
552 {
553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700554 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700555 VOS_ASSERT(0) ;
556 return VOS_STATUS_E_NOMEM;
557 }
558 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700559 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 tlvStruct = (tHalCfg *)configParam;
561 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 /* TODO: Remove Later */
563 /* QWLAN_HAL_CFG_STA_ID */
564 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
565 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
566 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
567 eSIR_SUCCESS)
568 {
569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
570 "Failed to get value for WNI_CFG_STA_ID");
571 goto handle_failure;
572 }
573 tlvStruct->length = strLength ;
574 /* calculate the pad bytes to have the CFG in aligned format */
575 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
576 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
578 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700579 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
580 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
581 tlvStruct->length = sizeof(tANI_U32);
582 configDataValue = (tANI_U32 *)(tlvStruct + 1);
583 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
584 != eSIR_SUCCESS)
585 {
586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
587 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
588 goto handle_failure;
589 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700590 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
591 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700592 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
593 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
594 tlvStruct->length = sizeof(tANI_U32);
595 configDataValue = (tANI_U32 *)(tlvStruct + 1);
596 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
597 eSIR_SUCCESS)
598 {
599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
600 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
601 goto handle_failure;
602 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
604 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
606 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
610 != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length)) ;
618
619 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
620 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
621 tlvStruct->length = sizeof(tANI_U32);
622 configDataValue = (tANI_U32 *)(tlvStruct + 1);
623 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
624 configDataValue ) != eSIR_SUCCESS)
625 {
626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
627 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
628 goto handle_failure;
629 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700630 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
631 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700632 /* QWLAN_HAL_CFG_CAL_PERIOD */
633 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
634 tlvStruct->length = sizeof(tANI_U32);
635 configDataValue = (tANI_U32 *)(tlvStruct + 1);
636 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
637 != eSIR_SUCCESS)
638 {
639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
640 "Failed to get value for WNI_CFG_CAL_PERIOD");
641 goto handle_failure;
642 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700643 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
644 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 /* QWLAN_HAL_CFG_CAL_CONTROL */
646 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
647 tlvStruct->length = sizeof(tANI_U32);
648 configDataValue = (tANI_U32 *)(tlvStruct + 1);
649 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
650 != eSIR_SUCCESS)
651 {
652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
653 "Failed to get value for WNI_CFG_CAL_CONTROL");
654 goto handle_failure;
655 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
657 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 /* QWLAN_HAL_CFG_PROXIMITY */
659 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
660 tlvStruct->length = sizeof(tANI_U32);
661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
662 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
663 != eSIR_SUCCESS)
664 {
665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
666 "Failed to get value for WNI_CFG_PROXIMITY");
667 goto handle_failure;
668 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
670 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
672 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
673 tlvStruct->length = sizeof(tANI_U32);
674 configDataValue = (tANI_U32 *)(tlvStruct + 1);
675 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
676 != eSIR_SUCCESS)
677 {
678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
679 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
680 goto handle_failure;
681 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
683 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
685 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
686 tlvStruct->length = sizeof(tANI_U32);
687 configDataValue = (tANI_U32 *)(tlvStruct + 1);
688 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
689 eSIR_SUCCESS)
690 {
691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
692 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
693 goto handle_failure;
694 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
696 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
698 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
699 tlvStruct->length = sizeof(tANI_U32);
700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
701 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
702 configDataValue ) != eSIR_SUCCESS)
703 {
704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
705 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
706 goto handle_failure;
707 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700708 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
709 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
711 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
712 tlvStruct->length = sizeof(tANI_U32);
713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
714 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
715 eSIR_SUCCESS)
716 {
717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
718 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
719 goto handle_failure;
720 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700721 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
722 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
724 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
725 tlvStruct->length = sizeof(tANI_U32);
726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
727 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
728 eSIR_SUCCESS)
729 {
730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
731 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
732 goto handle_failure;
733 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
735 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
737 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
738 tlvStruct->length = sizeof(tANI_U32);
739 configDataValue = (tANI_U32 *)(tlvStruct + 1);
740 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
741 eSIR_SUCCESS)
742 {
743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
744 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
745 goto handle_failure;
746 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
748 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
750 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
751 tlvStruct->length = sizeof(tANI_U32);
752 configDataValue = (tANI_U32 *)(tlvStruct + 1);
753 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
754 configDataValue ) != eSIR_SUCCESS)
755 {
756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
757 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
758 goto handle_failure;
759 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700760 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
761 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
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_ZERO");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
775
776 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
777 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
778 tlvStruct->length = sizeof(tANI_U32);
779 configDataValue = (tANI_U32 *)(tlvStruct + 1);
780 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
781 configDataValue ) != eSIR_SUCCESS)
782 {
783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
784 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
785 goto handle_failure;
786 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700787 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
788 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
790 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
794 configDataValue ) != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
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_FIXED_RATE */
804 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_FIXED_RATE");
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_POLICY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
822 != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length));
830
831 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
832 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
836 configDataValue ) != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
845 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
846 tlvStruct->length = sizeof(tANI_U32);
847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
848 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
849 configDataValue ) != eSIR_SUCCESS)
850 {
851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
852 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
853 goto handle_failure;
854 }
855 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
856 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
858 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
862 configDataValue ) != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
871 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
875 configDataValue ) != eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
879 goto handle_failure;
880 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
884 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length);
896
Jeff Johnson295189b2012-06-20 16:38:30 -0700897 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
898 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
899 tlvStruct->length = sizeof(tANI_U32);
900 configDataValue = (tANI_U32 *)(tlvStruct + 1);
901 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
902 configDataValue ) != eSIR_SUCCESS)
903 {
904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
905 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
906 goto handle_failure;
907 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700908 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
909 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700910 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
911 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
912 tlvStruct->length = sizeof(tANI_U32);
913 configDataValue = (tANI_U32 *)(tlvStruct + 1);
914 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
915 configDataValue ) != eSIR_SUCCESS)
916 {
917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
918 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
919 goto handle_failure;
920 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700921 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
922 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
924 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
928 eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length);
936
937 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
938 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
939 tlvStruct->length = sizeof(tANI_U32);
940 configDataValue = (tANI_U32 *)(tlvStruct + 1);
941 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
942 configDataValue ) != eSIR_SUCCESS)
943 {
944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
945 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
946 goto handle_failure;
947 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
949 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700950 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
951 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
952 tlvStruct->length = sizeof(tANI_U32);
953 configDataValue = (tANI_U32 *)(tlvStruct + 1);
954 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
955 configDataValue ) != eSIR_SUCCESS)
956 {
957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
958 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
959 goto handle_failure;
960 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700961 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
962 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700963 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
964 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
965 tlvStruct->length = sizeof(tANI_U32);
966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
967 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
968 configDataValue ) != eSIR_SUCCESS)
969 {
970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
971 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
972 goto handle_failure;
973 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700974 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
975 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
977 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
981 configDataValue ) != eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length);
989
990 /* QWLAN_HAL_CFG_STATS_PERIOD */
991 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
992 tlvStruct->length = sizeof(tANI_U32);
993 configDataValue = (tANI_U32 *)(tlvStruct + 1);
994 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
995 eSIR_SUCCESS)
996 {
997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
998 "Failed to get value for WNI_CFG_STATS_PERIOD");
999 goto handle_failure;
1000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1002 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001003 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1004 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1005 tlvStruct->length = sizeof(tANI_U32);
1006 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1007 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1008 eSIR_SUCCESS)
1009 {
1010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1011 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1012 goto handle_failure;
1013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001014 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1015 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001016 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1017 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1018 tlvStruct->length = sizeof(tANI_U32);
1019 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1020 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1021 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001022 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1023 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001024 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1025 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1026 tlvStruct->length = sizeof(tANI_U32);
1027 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1028 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1029 != eSIR_SUCCESS)
1030 {
1031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1032 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1033 goto handle_failure;
1034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001035 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1036 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001037 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1038 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1039 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1040 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1041 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1042 &strLength) != eSIR_SUCCESS)
1043 {
1044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1045 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1046 goto handle_failure;
1047 }
1048 tlvStruct->length = strLength;
1049 /* calculate the pad bytes to have the CFG in aligned format */
1050 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1051 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1053 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1055 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1056 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1058 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1059 &strLength) != eSIR_SUCCESS)
1060 {
1061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1062 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1063 goto handle_failure;
1064 }
1065 tlvStruct->length = strLength;
1066 /* calculate the pad bytes to have the CFG in aligned format */
1067 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1068 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1070 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1072 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1073 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1075 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1076 &strLength) != eSIR_SUCCESS)
1077 {
1078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1079 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1080 goto handle_failure;
1081 }
1082 tlvStruct->length = strLength;
1083 /* calculate the pad bytes to have the CFG in aligned format */
1084 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1085 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001086 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1087 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1089 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1090 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1091 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1092 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1093 &strLength) != eSIR_SUCCESS)
1094 {
1095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1096 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1097 goto handle_failure;
1098 }
1099 tlvStruct->length = strLength;
1100 /* calculate the pad bytes to have the CFG in aligned format */
1101 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1102 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001103 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1104 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1106 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1107 tlvStruct->length = sizeof(tANI_U32);
1108 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1109 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1110 != eSIR_SUCCESS)
1111 {
1112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1113 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1114 goto handle_failure;
1115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001116 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1117 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001118 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1119 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1120 tlvStruct->length = sizeof(tANI_U32);
1121 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1122 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1123 != eSIR_SUCCESS)
1124 {
1125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1126 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1127 goto handle_failure;
1128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001129 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1130 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1132 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1133 tlvStruct->length = sizeof(tANI_U32);
1134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1135 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1136 != eSIR_SUCCESS)
1137 {
1138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1139 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1140 goto handle_failure;
1141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001142 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1143 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1145 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1146 tlvStruct->length = sizeof(tANI_U32);
1147 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1148 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1149 != eSIR_SUCCESS)
1150 {
1151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1152 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1153 goto handle_failure;
1154 }
1155 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1156 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001157 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1158 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1159 tlvStruct->length = sizeof(tANI_U32);
1160 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1161 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1162 != eSIR_SUCCESS)
1163 {
1164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1165 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1166 goto handle_failure;
1167 }
1168 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1169 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1171 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1172 tlvStruct->length = sizeof(tANI_U32);
1173 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1174 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1175 != eSIR_SUCCESS)
1176 {
1177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1178 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1179 goto handle_failure;
1180 }
1181 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1182 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001183 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1184 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1185 tlvStruct->length = sizeof(tANI_U32);
1186 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1187 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1188 != eSIR_SUCCESS)
1189 {
1190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1191 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1192 goto handle_failure;
1193 }
1194 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1195 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001196 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1197 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1198 tlvStruct->length = sizeof(tANI_U32);
1199 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1200 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1201 != eSIR_SUCCESS)
1202 {
1203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1204 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1205 goto handle_failure;
1206 }
1207 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1208 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001209 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1210 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1211 tlvStruct->length = sizeof(tANI_U32);
1212 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1213 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1214 != eSIR_SUCCESS)
1215 {
1216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1217 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1218 goto handle_failure;
1219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001220 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1221 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001222 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1223 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1224 tlvStruct->length = sizeof(tANI_U32);
1225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1226 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1227 != eSIR_SUCCESS)
1228 {
1229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1230 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1231 goto handle_failure;
1232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1234 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1236 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1237 tlvStruct->length = sizeof(tANI_U32);
1238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1239 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1240 != eSIR_SUCCESS)
1241 {
1242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1243 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1244 goto handle_failure;
1245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1247 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1249 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1250 * into FW, so the parameters are added here.
1251 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1253 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1254 tlvStruct->length = sizeof(tANI_U32);
1255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1256 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1260 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1261 tlvStruct->length = sizeof(tANI_U32);
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1264 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1265 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001266 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1267 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1268 tlvStruct->length = sizeof(tANI_U32);
1269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1270 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1271 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1272 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001273 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1274 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1275 tlvStruct->length = sizeof(tANI_U32);
1276 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1277 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1278 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1279 + sizeof(tHalCfg) + tlvStruct->length) ;
1280
1281 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1282 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1283 tlvStruct->length = sizeof(tANI_U32);
1284 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1285 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1286 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1287 + sizeof(tHalCfg) + tlvStruct->length) ;
1288
1289 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1290 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1291 tlvStruct->length = sizeof(tANI_U32);
1292 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1293 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1294 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1295 + sizeof(tHalCfg) + tlvStruct->length) ;
1296
1297 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1298 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1299 tlvStruct->length = sizeof(tANI_U32);
1300 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1301 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1302 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1303 + sizeof(tHalCfg) + tlvStruct->length) ;
1304
1305 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1306 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1307 tlvStruct->length = sizeof(tANI_U32);
1308 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1309 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1310 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1311 + sizeof(tHalCfg) + tlvStruct->length) ;
1312
1313 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1314 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1315 tlvStruct->length = sizeof(tANI_U32);
1316 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1317 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1318 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1319 + sizeof(tHalCfg) + tlvStruct->length) ;
1320
1321 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1322 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1323 tlvStruct->length = sizeof(tANI_U32);
1324 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1325 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1326 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1327 + sizeof(tHalCfg) + tlvStruct->length) ;
1328
1329 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1330 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1331 tlvStruct->length = sizeof(tANI_U32);
1332 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1333 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1334 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1335 + sizeof(tHalCfg) + tlvStruct->length) ;
1336
1337 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1338 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1339 tlvStruct->length = sizeof(tANI_U32);
1340 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1341 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1342 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1343 + sizeof(tHalCfg) + tlvStruct->length) ;
1344
1345 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1346 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1347 tlvStruct->length = sizeof(tANI_U32);
1348 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1349 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1350 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1351 + sizeof(tHalCfg) + tlvStruct->length) ;
1352
1353 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1354 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1355 tlvStruct->length = sizeof(tANI_U32);
1356 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1357 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1358 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1359 + sizeof(tHalCfg) + tlvStruct->length) ;
1360
1361 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1362 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1363 tlvStruct->length = sizeof(tANI_U32);
1364 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1365 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1367 + sizeof(tHalCfg) + tlvStruct->length) ;
1368
1369 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1370 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1374 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1375 + sizeof(tHalCfg) + tlvStruct->length) ;
1376
Wilson Tsaof8b37942013-09-06 10:49:00 -07001377 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1378 {
1379 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1380 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1381 tlvStruct->length = sizeof(tANI_U32);
1382 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1383 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1384 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1385 + sizeof(tHalCfg) + tlvStruct->length) ;
1386
1387 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1388 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1389 tlvStruct->length = sizeof(tANI_U32);
1390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1391 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1392 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1393 + sizeof(tHalCfg) + tlvStruct->length) ;
1394
1395 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1396 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1400 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1401 + sizeof(tHalCfg) + tlvStruct->length) ;
1402
1403 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1404 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1405 tlvStruct->length = sizeof(tANI_U32);
1406 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1407 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1408 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1409 + sizeof(tHalCfg) + tlvStruct->length) ;
1410 }
1411
1412 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1413 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1414 tlvStruct->length = sizeof(tANI_U32);
1415 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1416 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1417 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1418 + sizeof(tHalCfg) + tlvStruct->length) ;
1419
1420 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1421 {
1422 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1423 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1424 tlvStruct->length = sizeof(tANI_U32);
1425 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1426 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1427 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1428 + sizeof(tHalCfg) + tlvStruct->length) ;
1429 }
1430
1431 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1432 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1433 tlvStruct->length = sizeof(tANI_U32);
1434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1435 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1436 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1437 + sizeof(tHalCfg) + tlvStruct->length) ;
1438
Jeff Johnson32d95a32012-09-10 13:15:23 -07001439 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001440 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1441 tlvStruct->length = sizeof(tANI_U32);
1442 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1443 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1444 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1445 wcnssCompiledApiVersion.minor,
1446 wcnssCompiledApiVersion.version,
1447 wcnssCompiledApiVersion.revision);
1448 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1449 + sizeof(tHalCfg) + tlvStruct->length) ;
1450
Jeff Johnsond13512a2012-07-17 11:42:19 -07001451 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1452 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_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_AP_KEEP_ALIVE_TIMEOUT");
1460 goto handle_failure;
1461 }
1462
1463 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1464 + sizeof(tHalCfg) + tlvStruct->length) ;
1465 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1466 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1470 configDataValue ) != eSIR_SUCCESS)
1471 {
1472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1473 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1474 goto handle_failure;
1475 }
1476
1477 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1478 + sizeof(tHalCfg) + tlvStruct->length) ;
1479
1480 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1481 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1482 tlvStruct->length = sizeof(tANI_U32);
1483 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1484 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1485 != eSIR_SUCCESS)
1486 {
1487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1488 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1489 goto handle_failure;
1490 }
1491
1492 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1493 + sizeof(tHalCfg) + tlvStruct->length) ;
1494
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001495 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1496 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1497 tlvStruct->length = sizeof(tANI_U32);
1498 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1499 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1500 != eSIR_SUCCESS)
1501 {
1502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1503 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1504 goto handle_failure;
1505 }
1506
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001509#ifdef WLAN_SOFTAP_VSTA_FEATURE
1510 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1514 != eSIR_SUCCESS)
1515 {
1516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1517 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1518 goto handle_failure;
1519 }
1520
1521 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1522 + sizeof(tHalCfg) + tlvStruct->length) ;
1523#endif
1524
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001525 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1526 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1527 tlvStruct->length = sizeof(tANI_U32);
1528 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1529
1530 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1531 != eSIR_SUCCESS)
1532 {
1533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1534 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1535 goto handle_failure;
1536 }
1537
1538 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1539 + sizeof(tHalCfg) + tlvStruct->length) ;
1540
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301541/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1542 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1543 tlvStruct->length = sizeof(tANI_U32);
1544 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1545 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1546 configDataValue ) != eSIR_SUCCESS)
1547 {
1548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1549 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1550 goto handle_failure;
1551 }
1552
1553 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1554 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301555#ifdef FEATURE_WLAN_TDLS
1556 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1557 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1558 tlvStruct->length = sizeof(tANI_U32);
1559 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1560 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
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_QOS_WMM_UAPSD_MASK");
1565 goto handle_failure;
1566 }
1567 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1568 + sizeof(tHalCfg) + tlvStruct->length) ;
1569
1570 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1571 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1572 tlvStruct->length = sizeof(tANI_U32);
1573 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1574 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1575 configDataValue ) != eSIR_SUCCESS)
1576 {
1577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1578 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1579 goto handle_failure;
1580 }
1581 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1582 + sizeof(tHalCfg) + tlvStruct->length) ;
1583 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1584 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1585 tlvStruct->length = sizeof(tANI_U32);
1586 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1587 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1588 configDataValue ) != eSIR_SUCCESS)
1589 {
1590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1591 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1592 goto handle_failure;
1593 }
1594 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1595 + sizeof(tHalCfg) + tlvStruct->length) ;
1596 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1597 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1598 tlvStruct->length = sizeof(tANI_U32);
1599 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1600 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1601 configDataValue ) != eSIR_SUCCESS)
1602 {
1603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1604 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1605 goto handle_failure;
1606 }
1607 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1608 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301609 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1610 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1611 tlvStruct->length = sizeof(tANI_U32);
1612 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1613 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1614 configDataValue ) != eSIR_SUCCESS)
1615 {
1616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1617 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1618 goto handle_failure;
1619 }
1620 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1621 + sizeof(tHalCfg) + tlvStruct->length) ;
1622
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301623#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301624
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001625 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1626 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1630 configDataValue ) != eSIR_SUCCESS)
1631 {
1632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1633 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1634 goto handle_failure;
1635 }
1636
1637 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1638 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001639
1640 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1641 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1642 tlvStruct->length = sizeof(tANI_U32);
1643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1644 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1645 != eSIR_SUCCESS)
1646 {
1647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1648 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1649 goto handle_failure;
1650 }
1651 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1652 + sizeof(tHalCfg) + tlvStruct->length));
1653
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301654 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1655 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1656 tlvStruct->length = sizeof(tANI_U32);
1657 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1658 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1659 configDataValue ) != eSIR_SUCCESS)
1660 {
1661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1662 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1663 goto handle_failure;
1664 }
1665
1666 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1667 + sizeof(tHalCfg) + tlvStruct->length) ;
1668
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301669 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1670 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1671 tlvStruct->length = sizeof(tANI_U32);
1672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1673 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1674 configDataValue ) != eSIR_SUCCESS)
1675 {
1676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1677 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1678 goto handle_failure;
1679 }
1680 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1681 + sizeof(tHalCfg) + tlvStruct->length) ;
1682
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301683 /* QWLAN_HAL_CFG_ATH_DISABLE */
1684 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1685 tlvStruct->length = sizeof(tANI_U32);
1686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1687 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1688 configDataValue ) != eSIR_SUCCESS)
1689 {
1690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1691 "Failed to get value for WNI_CFG_ATH_DISABLE");
1692 goto handle_failure;
1693 }
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696
c_hpothu6d7dc922013-12-02 12:36:41 +05301697 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1698 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1699 tlvStruct->length = sizeof(tANI_U32);
1700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1701 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_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_WLAN_LEN");
1706 goto handle_failure;
1707 }
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710
1711 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1712 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_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_ACTIVE_BT_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_WLAN_ACTIVE_WLAN_LEN */
1726 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1727 tlvStruct->length = sizeof(tANI_U32);
1728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1729 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_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_WLAN_LEN");
1734 goto handle_failure;
1735 }
1736 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1737 + sizeof(tHalCfg) + tlvStruct->length) ;
1738
1739 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1740 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1741 tlvStruct->length = sizeof(tANI_U32);
1742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1743 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1744 configDataValue ) != eSIR_SUCCESS)
1745 {
1746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1747 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1748 goto handle_failure;
1749 }
1750 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1751 + sizeof(tHalCfg) + tlvStruct->length) ;
1752
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301753 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1754 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1755 tlvStruct->length = sizeof(tANI_U32);
1756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1757 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
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_PROBE_INTERVAL");
1762 goto handle_failure;
1763 }
1764 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1765 + sizeof(tHalCfg) + tlvStruct->length) ;
1766
1767 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1768 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1769 tlvStruct->length = sizeof(tANI_U32);
1770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1771 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_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_TRIGGER_THRESHOLD");
1776 goto handle_failure;
1777 }
1778 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1779 + sizeof(tHalCfg) + tlvStruct->length) ;
1780
1781 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1782 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1790 goto handle_failure;
1791 }
1792 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1793 + sizeof(tHalCfg) + tlvStruct->length) ;
1794
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001795 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1796 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1797 tlvStruct->length = sizeof(tANI_U32);
1798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1799 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1800 configDataValue ) != eSIR_SUCCESS)
1801 {
1802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1803 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1804 goto handle_failure;
1805 }
1806 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1807 + sizeof(tHalCfg) + tlvStruct->length) ;
1808
c_hpothu5bd1ae42014-03-07 20:28:22 +05301809 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1810 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1811 tlvStruct->length = sizeof(tANI_U32);
1812 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1813
1814 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1815 configDataValue ) != eSIR_SUCCESS)
1816 {
1817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1818 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1819 goto handle_failure;
1820 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301821 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1822 + sizeof(tHalCfg) + tlvStruct->length) ;
1823
1824 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1825 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1826 tlvStruct->length = sizeof(tANI_U32);
1827 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1828
1829 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1830 configDataValue ) != eSIR_SUCCESS)
1831 {
1832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1833 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1834 goto handle_failure;
1835 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301836 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1837 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301838
c_hpothu2d0f1c42014-04-01 18:38:51 +05301839 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1840 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1841 tlvStruct->length = sizeof(tANI_U32);
1842 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1843
1844 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1845 configDataValue ) != eSIR_SUCCESS)
1846 {
1847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1848 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1849 goto handle_failure;
1850 }
1851 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1852 + sizeof(tHalCfg) + tlvStruct->length) ;
1853
1854 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1855 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1856 tlvStruct->length = sizeof(tANI_U32);
1857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1858
1859 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1860 configDataValue ) != eSIR_SUCCESS)
1861 {
1862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1863 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1864 goto handle_failure;
1865 }
1866 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1867 + sizeof(tHalCfg) + tlvStruct->length) ;
1868
1869 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1870 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1871 tlvStruct->length = sizeof(tANI_U32);
1872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1873
1874 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1875 configDataValue ) != eSIR_SUCCESS)
1876 {
1877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1878 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1879 goto handle_failure;
1880 }
1881 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1882 + sizeof(tHalCfg) + tlvStruct->length) ;
1883
1884 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1885 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1886 tlvStruct->length = sizeof(tANI_U32);
1887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1888
1889 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1890 configDataValue ) != eSIR_SUCCESS)
1891 {
1892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1893 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1894 goto handle_failure;
1895 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301896 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1897 + sizeof(tHalCfg) + tlvStruct->length) ;
1898
Jeff Johnson295189b2012-06-20 16:38:30 -07001899 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001900#ifdef WLAN_DEBUG
1901 {
1902 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001903 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1904 "****** Dumping CFG TLV ***** ");
1905 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1906 {
1907 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1908 "%02x %02x %02x %02x %02x %02x %02x %02x",
1909 tlvStructStart[i],
1910 tlvStructStart[i+1],
1911 tlvStructStart[i+2],
1912 tlvStructStart[i+3],
1913 tlvStructStart[i+4],
1914 tlvStructStart[i+5],
1915 tlvStructStart[i+6],
1916 tlvStructStart[i+7]);
1917 }
1918 /* Dump the bytes in the last line*/
1919 for (; i < wdiStartParams->usConfigBufferLen; i++)
1920 {
1921 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1922 "%02x ",tlvStructStart[i]);
1923 }
1924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1925 "**************************** ");
1926 }
1927#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001928 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001929handle_failure:
1930 vos_mem_free(configParam);
1931 return VOS_STATUS_E_FAILURE;
1932}
Jeff Johnson295189b2012-06-20 16:38:30 -07001933/*
1934 * FUNCTION: WDA_wdiCompleteCB
1935 * call the voss call back function
1936 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001937void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001938{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001939 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1940 tWDA_CbContext *wdaContext;
1941
1942 if(NULL == pWdaParams)
1943 {
1944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001945 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001946 VOS_ASSERT(0) ;
1947 return ;
1948 }
1949
1950 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1951
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 if (NULL == wdaContext)
1953 {
1954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001955 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 return ;
1957 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001958
Jeff Johnson295189b2012-06-20 16:38:30 -07001959 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001960 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001961 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001963 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001964 vos_mem_free(pWdaParams);
1965
Jeff Johnson295189b2012-06-20 16:38:30 -07001966 if(WDI_STATUS_SUCCESS != status)
1967 {
1968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1969 "WDI stop callback returned failure" );
1970 VOS_ASSERT(0) ;
1971 }
1972 else
1973 {
1974 wdaContext->wdaState = WDA_STOP_STATE;
1975 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001976
Leo Chang9d76f622013-08-23 16:34:52 -07001977 /* FTM Driver stop procedure should be synced.
1978 * Stop and Close will happen on same context */
1979 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1980 {
1981 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1982 {
1983 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1984 "%s: FTM Stop Event Set Fail", __func__);
1985 VOS_ASSERT(0);
1986 }
1987 }
1988
Jeff Johnson295189b2012-06-20 16:38:30 -07001989 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001990 vos_WDAComplete_cback(wdaContext->pVosContext);
1991
Jeff Johnson295189b2012-06-20 16:38:30 -07001992 return ;
1993}
Jeff Johnson295189b2012-06-20 16:38:30 -07001994/*
1995 * FUNCTION: WDA_stop
1996 * call WDI_stop
1997 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001998VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1999{
2000 WDI_Status wdiStatus;
2001 VOS_STATUS status = VOS_STATUS_SUCCESS;
2002 WDI_StopReqParamsType *wdiStopReq;
2003 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002004 tWDA_ReqParams *pWdaParams ;
2005
Jeff Johnson295189b2012-06-20 16:38:30 -07002006 if (NULL == pWDA)
2007 {
2008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002009 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002010 VOS_ASSERT(0);
2011 return VOS_STATUS_E_FAILURE;
2012 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002013 if (pWDA->wdiFailed == true)
2014 {
2015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002016 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002017 return VOS_STATUS_E_ALREADY;
2018 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002019
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 /* FTM mode stay START_STATE */
2021 if( (WDA_READY_STATE != pWDA->wdaState) &&
2022 (WDA_INIT_STATE != pWDA->wdaState) &&
2023 (WDA_START_STATE != pWDA->wdaState) )
2024 {
2025 VOS_ASSERT(0);
2026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 wdiStopReq = (WDI_StopReqParamsType *)
2028 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2029 if(NULL == wdiStopReq)
2030 {
2031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002033 VOS_ASSERT(0);
2034 return VOS_STATUS_E_NOMEM;
2035 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002036
Jeff Johnson295189b2012-06-20 16:38:30 -07002037 wdiStopReq->wdiStopReason = reason;
2038 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002039
2040 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2041 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002042 {
2043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002045 VOS_ASSERT(0);
2046 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002047 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002048 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002049
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002050 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2051 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002052 {
2053 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002054 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002055 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002056
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002057 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2058 pWdaParams->wdaMsgParam = NULL;
2059 pWdaParams->pWdaContext = pWDA;
2060
Jeff Johnson295189b2012-06-20 16:38:30 -07002061 /* call WDI stop */
2062 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002063 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2064
Jeff Johnson295189b2012-06-20 16:38:30 -07002065 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2066 {
2067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2068 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2070 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002071 status = VOS_STATUS_E_FAILURE;
2072 }
Leo Chang9d76f622013-08-23 16:34:52 -07002073
2074 /* FTM Driver stop procedure should be synced.
2075 * Stop and Close will happen on same context */
2076 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2077 {
2078 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2079 WDI_RESPONSE_TIMEOUT);
2080 if (status != VOS_STATUS_SUCCESS)
2081 {
2082 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2083 "%s: FTM Stop Timepoout", __func__);
2084 VOS_ASSERT(0);
2085 vos_event_reset(&pWDA->ftmStopDoneEvent);
2086 }
2087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002088 return status;
2089}
Jeff Johnson295189b2012-06-20 16:38:30 -07002090/*
2091 * FUNCTION: WDA_close
2092 * call WDI_close and free the WDA context
2093 */
2094VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2095{
Jeff Johnson43971f52012-07-17 12:26:56 -07002096 VOS_STATUS status = VOS_STATUS_SUCCESS;
2097 WDI_Status wstatus;
2098 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002100 if (NULL == wdaContext)
2101 {
2102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002103 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002104 return VOS_STATUS_E_FAILURE;
2105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2107 (WDA_STOP_STATE != wdaContext->wdaState))
2108 {
2109 VOS_ASSERT(0);
2110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002111 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002112 wstatus = WDI_Close();
2113 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002114 {
2115 status = VOS_STATUS_E_FAILURE;
2116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002117 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002118 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002119 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2120 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002121 {
2122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002123 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002124 status = VOS_STATUS_E_FAILURE;
2125 }
2126
Jeff Johnson43971f52012-07-17 12:26:56 -07002127 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002128 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 {
2130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002131 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002132 status = VOS_STATUS_E_FAILURE;
2133 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002134 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002135 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002136 {
2137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002138 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002139 status = VOS_STATUS_E_FAILURE;
2140 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002141 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002142 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002143 {
2144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002145 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002146 status = VOS_STATUS_E_FAILURE;
2147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002148 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002149 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002150 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002151 {
2152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2153 "error in WDA close " );
2154 status = VOS_STATUS_E_FAILURE;
2155 }
2156 return status;
2157}
Jeff Johnson295189b2012-06-20 16:38:30 -07002158/*
2159 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2160 * returns 1 if the compiled version is greater than or equal to the input version
2161 */
2162
2163uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2164{
2165 VOS_STATUS status = VOS_STATUS_SUCCESS;
2166 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2167 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2170 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2171 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2172 (compiledVersion.revision >= revision)))
2173 return 1;
2174 else
2175 return 0;
2176}
Jeff Johnson295189b2012-06-20 16:38:30 -07002177/*
2178 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2179 * returns 1 if the compiled version is greater than or equal to the input version
2180 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002181uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2182{
2183 VOS_STATUS status = VOS_STATUS_SUCCESS;
2184 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2185 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2188 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2189 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2190 (reportedVersion.revision >= revision)))
2191 return 1;
2192 else
2193 return 0;
2194}
Jeff Johnson295189b2012-06-20 16:38:30 -07002195/*
2196 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2197 * Returns the version of the WCNSS WLAN API with which the HOST
2198 * device driver was compiled
2199 */
2200VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2201 tSirVersionType *pVersion)
2202{
2203 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 if ((NULL == pvosGCtx) || (NULL == pVersion))
2205 {
2206 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002207 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 VOS_ASSERT(0);
2209 return VOS_STATUS_E_FAILURE;
2210 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2212 if (NULL == pWDA )
2213 {
2214 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002215 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 VOS_ASSERT(0);
2217 return VOS_STATUS_E_FAILURE;
2218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 *pVersion = pWDA->wcnssWlanCompiledVersion;
2220 return VOS_STATUS_SUCCESS;
2221}
Jeff Johnson295189b2012-06-20 16:38:30 -07002222/*
2223 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2224 * Returns the version of the WCNSS WLAN API with which the WCNSS
2225 * device driver was compiled
2226 */
2227VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2228 tSirVersionType *pVersion)
2229{
2230 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 if ((NULL == pvosGCtx) || (NULL == pVersion))
2232 {
2233 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002234 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 VOS_ASSERT(0);
2236 return VOS_STATUS_E_FAILURE;
2237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2239 if (NULL == pWDA )
2240 {
2241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002242 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002243 VOS_ASSERT(0);
2244 return VOS_STATUS_E_FAILURE;
2245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 *pVersion = pWDA->wcnssWlanReportedVersion;
2247 return VOS_STATUS_SUCCESS;
2248}
Jeff Johnson295189b2012-06-20 16:38:30 -07002249/*
2250 * FUNCTION: WDA_GetWcnssSoftwareVersion
2251 * Returns the WCNSS Software version string
2252 */
2253VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2254 tANI_U8 *pVersion,
2255 tANI_U32 versionBufferSize)
2256{
2257 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002258 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002259 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002260 if ((NULL == pvosGCtx) || (NULL == pVersion))
2261 {
2262 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002263 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 VOS_ASSERT(0);
2265 return VOS_STATUS_E_FAILURE;
2266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002267 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2268 if (NULL == pWDA )
2269 {
2270 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002271 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002272 VOS_ASSERT(0);
2273 return VOS_STATUS_E_FAILURE;
2274 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002275 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2276 return VOS_STATUS_SUCCESS;
2277}
Jeff Johnson295189b2012-06-20 16:38:30 -07002278/*
2279 * FUNCTION: WDA_GetWcnssHardwareVersion
2280 * Returns the WCNSS Hardware version string
2281 */
2282VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2283 tANI_U8 *pVersion,
2284 tANI_U32 versionBufferSize)
2285{
2286 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002287 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002288 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 if ((NULL == pvosGCtx) || (NULL == pVersion))
2290 {
2291 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002292 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 VOS_ASSERT(0);
2294 return VOS_STATUS_E_FAILURE;
2295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002296 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2297 if (NULL == pWDA )
2298 {
2299 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002300 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 VOS_ASSERT(0);
2302 return VOS_STATUS_E_FAILURE;
2303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2305 return VOS_STATUS_SUCCESS;
2306}
Jeff Johnson295189b2012-06-20 16:38:30 -07002307/*
2308 * FUNCTION: WDA_WniCfgDnld
2309 * Trigger CFG Download
2310 */
2311VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2312{
2313 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002315 v_VOID_t *pFileImage = NULL;
2316 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 v_VOID_t *pCfgBinary = NULL;
2318 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002319 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002320
Jeff Johnson295189b2012-06-20 16:38:30 -07002321 if (NULL == pMac )
2322 {
2323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002324 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 VOS_ASSERT(0);
2326 return VOS_STATUS_E_FAILURE;
2327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 /* get the number of bytes in the CFG Binary... */
2329 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2330 &cbFileImageSize );
2331 if ( VOS_STATUS_E_NOMEM != vosStatus )
2332 {
2333 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2334 "Error obtaining binary size" );
2335 goto fail;
2336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002337 // malloc a buffer to read in the Configuration binary file.
2338 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002339 if ( NULL == pFileImage )
2340 {
2341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2342 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2343 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 vosStatus = VOS_STATUS_E_NOMEM;
2345 goto fail;
2346 }
2347
2348 /* Get the entire CFG file image... */
2349 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2350 &cbFileImageSize );
2351 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2352 {
2353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2354 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2355 cbFileImageSize );
2356 goto fail;
2357 }
2358
2359 /*
2360 * Validate the binary image. This function will return a pointer
2361 * and length where the CFG binary is located within the binary image file.
2362 */
2363 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2364 &pCfgBinary, &cbCfgBinarySize );
2365 if ( VOS_FALSE == bStatus )
2366 {
2367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2368 "Error: Cannot find STA CFG in binary image file" );
2369 vosStatus = VOS_STATUS_E_FAILURE;
2370 goto fail;
2371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 /*
2373 * TODO: call the config download function
2374 * for now calling the existing cfg download API
2375 */
2376 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002377 vosStatus = VOS_STATUS_SUCCESS;
2378
2379 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002380
2381fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002382 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 return vosStatus;
2384}
Jeff Johnson295189b2012-06-20 16:38:30 -07002385/* -----------------------------------------------------------------
2386 * WDI interface
2387 * -----------------------------------------------------------------
2388 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002389/*
2390 * FUNCTION: WDA_suspendDataTxCallback
2391 * call back function called from TL after suspend Transmission
2392 */
2393VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2394 v_U8_t* ucSTAId,
2395 VOS_STATUS vosStatus)
2396{
2397 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002399 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002400 if (NULL == pWDA )
2401 {
2402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002403 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 VOS_ASSERT(0);
2405 return VOS_STATUS_E_FAILURE;
2406 }
2407 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2408 {
2409 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2410 }
2411 else
2412 {
2413 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 /* Trigger the event to bring the WDA TL suspend function to come
2416 * out of wait*/
2417 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2418 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2419 {
2420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002421 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 /* If TL suspended had timedout before this callback was called, resume back
2424 * TL.*/
2425 if (pWDA->txSuspendTimedOut)
2426 {
2427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002428 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 WDA_ResumeDataTx(pWDA);
2430 pWDA->txSuspendTimedOut = FALSE;
2431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002432 return VOS_STATUS_SUCCESS;
2433}
Jeff Johnson295189b2012-06-20 16:38:30 -07002434/*
2435 * FUNCTION: WDA_suspendDataTx
2436 * Update TL to suspend the data Transmission
2437 */
2438VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2439{
2440 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2441 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002442
2443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002444 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002445 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 if (pWDA->txSuspendTimedOut)
2447 {
2448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002449 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 return status;
2451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 /* Reset the event to be not signalled */
2453 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2454 if(!VOS_IS_STATUS_SUCCESS(status))
2455 {
2456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002457 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 return VOS_STATUS_E_FAILURE;
2459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002461 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002462 WDA_SuspendDataTxCallback);
2463 if(status != VOS_STATUS_SUCCESS)
2464 {
2465 return status;
2466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 /* Wait for the event to be set by the TL, to get the response of
2468 * suspending the TX queues, this event should be set by the Callback
2469 * function called by TL*/
2470 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2471 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2472 if(!VOS_IS_STATUS_SUCCESS(status))
2473 {
2474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2475 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002476 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 /* Set this flag to true when TL suspend times out, so that when TL
2478 * suspend eventually happens and calls the callback, TL can be resumed
2479 * right away by looking at this flag when true.*/
2480 pWDA->txSuspendTimedOut = TRUE;
2481 }
2482 else
2483 {
2484 pWDA->txSuspendTimedOut = FALSE;
2485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2487 {
2488 status = VOS_STATUS_SUCCESS;
2489 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 return status;
2491}
Jeff Johnson295189b2012-06-20 16:38:30 -07002492/*
2493 * FUNCTION: WDA_resumeDataTx
2494 * Update TL to resume the data Transmission
2495 */
2496VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2497{
2498 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002499
2500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002501 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002502
2503 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002504 return status;
2505}
Jeff Johnson295189b2012-06-20 16:38:30 -07002506/*
2507 * FUNCTION: WDA_InitScanReqCallback
2508 * Trigger Init SCAN callback
2509 */
2510void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2511{
2512 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2513 tWDA_CbContext *pWDA;
2514 tInitScanParams *pWDA_ScanParam ;
2515 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002517 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 if(NULL == pWdaParams)
2519 {
2520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002521 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 VOS_ASSERT(0) ;
2523 return ;
2524 }
2525 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2526 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002527 if(NULL == pWDA_ScanParam)
2528 {
2529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002530 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002531 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2533 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 return ;
2535 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002536 if(WDI_STATUS_SUCCESS != wdiStatus)
2537 {
2538 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 if(VOS_STATUS_SUCCESS != status)
2540 {
2541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002542 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 }
2544 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 /* free WDI command buffer */
2546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002548
Jeff Johnson295189b2012-06-20 16:38:30 -07002549
2550 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002551 /* without converting the Status to Failure or Success Just
2552 pass the same status to lim */
2553 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002554 /* send SCAN RSP message back to PE */
2555 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002556 return ;
2557}
2558
2559/*
2560 * FUNCTION: WDA_ProcessInitScanReq
2561 * Trigger Init SCAN in DAL
2562 */
2563VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2564 tInitScanParams *initScanParams)
2565{
2566 WDI_Status status = WDI_STATUS_SUCCESS ;
2567 WDI_InitScanReqParamsType *wdiInitScanParam =
2568 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2569 sizeof(WDI_InitScanReqParamsType)) ;
2570 tWDA_ReqParams *pWdaParams;
2571 tANI_U8 i = 0;
2572
2573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002574 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 if(NULL == wdiInitScanParam)
2576 {
2577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002578 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 VOS_ASSERT(0);
2580 return VOS_STATUS_E_NOMEM;
2581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2583 if(NULL == pWdaParams)
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 VOS_ASSERT(0);
2588 vos_mem_free(wdiInitScanParam);
2589 return VOS_STATUS_E_NOMEM;
2590 }
2591
2592 /* Copy init Scan params to WDI structure */
2593 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2594 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2595 sizeof(tSirMacAddr)) ;
2596 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2597 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2598 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2600 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2602 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2604 {
2605 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2606 initScanParams->scanEntry.bssIdx[i] ;
2607 }
2608
2609 /* if Frame length, copy macMgmtHdr or WDI structure */
2610 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2611 {
2612 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2613 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2614 }
2615 wdiInitScanParam->wdiReqStatusCB = NULL ;
2616
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 /* Store Init Req pointer, as this will be used for response */
2618 pWdaParams->pWdaContext = pWDA;
2619 pWdaParams->wdaMsgParam = initScanParams;
2620 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 /* first try to suspend TX */
2622 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002623 if(WDI_STATUS_SUCCESS != status)
2624 {
2625 goto handleWdiFailure;
2626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 /* call DAL API to pass init scan request to DAL */
2628 status = WDI_InitScanReq(wdiInitScanParam,
2629 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002630 if(IS_WDI_STATUS_FAILURE(status))
2631 {
2632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2633 "error in WDA Init Scan, Resume Tx " );
2634 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 VOS_ASSERT(0) ;
2636
2637 goto handleWdiFailure;
2638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002640handleWdiFailure:
2641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2642 "Failure in WDI Api, free all the memory " );
2643 /* free WDI command buffer */
2644 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2645 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 /* send Failure to PE */
2647 initScanParams->status = eSIR_FAILURE ;
2648 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002649 return CONVERT_WDI2VOS_STATUS(status) ;
2650}
2651
Jeff Johnson295189b2012-06-20 16:38:30 -07002652/*
2653 * FUNCTION: WDA_StartScanReqCallback
2654 * send Start SCAN RSP back to PE
2655 */
2656void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2657 void* pUserData)
2658{
2659 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2660 tWDA_CbContext *pWDA;
2661 tStartScanParams *pWDA_ScanParam;
2662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002663 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 if(NULL == pWdaParams)
2665 {
2666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002667 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 VOS_ASSERT(0) ;
2669 return ;
2670 }
2671 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2672 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 if(NULL == pWDA_ScanParam)
2674 {
2675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002676 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002678 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 return ;
2680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2682 {
2683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002684 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002686 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 return ;
2688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2690 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002691
Jeff Johnson295189b2012-06-20 16:38:30 -07002692
2693 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002694 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002695 /* send SCAN RSP message back to PE */
2696 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 return ;
2698}
2699
Jeff Johnson295189b2012-06-20 16:38:30 -07002700/*
2701 * FUNCTION: WDA_ProcessStartScanReq
2702 * Trigger start SCAN in WDI
2703 */
2704VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2705 tStartScanParams *startScanParams)
2706{
2707 WDI_Status status = WDI_STATUS_SUCCESS;
2708 WDI_StartScanReqParamsType *wdiStartScanParams =
2709 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2710 sizeof(WDI_StartScanReqParamsType)) ;
2711 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002713 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 if(NULL == wdiStartScanParams)
2715 {
2716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 VOS_ASSERT(0);
2719 return VOS_STATUS_E_NOMEM;
2720 }
2721 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2722 if(NULL == pWdaParams)
2723 {
2724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002726 VOS_ASSERT(0);
2727 vos_mem_free(wdiStartScanParams);
2728 return VOS_STATUS_E_NOMEM;
2729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 /* Copy init Scan params to WDI structure */
2731 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2732 wdiStartScanParams->wdiReqStatusCB = NULL ;
2733
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 /* Store Init Req pointer, as this will be used for response */
2735 /* store Params pass it to WDI */
2736 pWdaParams->pWdaContext = pWDA;
2737 pWdaParams->wdaMsgParam = startScanParams;
2738 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 /* call DAL API to pass init scan request to DAL */
2740 status = WDI_StartScanReq(wdiStartScanParams,
2741 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 /* failure returned by WDI API */
2743 if(IS_WDI_STATUS_FAILURE(status))
2744 {
2745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2746 "Failure in Start Scan WDI API, free all the memory "
2747 "It should be due to previous abort scan." );
2748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2749 vos_mem_free(pWdaParams) ;
2750 startScanParams->status = eSIR_FAILURE ;
2751 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2752 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 return CONVERT_WDI2VOS_STATUS(status) ;
2754}
Jeff Johnson295189b2012-06-20 16:38:30 -07002755/*
2756 * FUNCTION: WDA_EndScanReqCallback
2757 * END SCAN callback
2758 */
2759void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2760{
2761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2762 tWDA_CbContext *pWDA;
2763 tEndScanParams *endScanParam;
2764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002765 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002766 if(NULL == pWdaParams)
2767 {
2768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002769 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002770 VOS_ASSERT(0) ;
2771 return ;
2772 }
2773 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2774 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 if(NULL == endScanParam)
2776 {
2777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002778 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2781 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 return ;
2783 }
2784
2785 /* Free WDI command buffer */
2786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2787 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002789 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 /* send response back to PE */
2791 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2792 return ;
2793}
2794
Jeff Johnson295189b2012-06-20 16:38:30 -07002795/*
2796 * FUNCTION: WDA_ProcessEndScanReq
2797 * Trigger END SCAN in WDI
2798 */
2799VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2800 tEndScanParams *endScanParams)
2801{
2802 WDI_Status status = WDI_STATUS_SUCCESS;
2803 WDI_EndScanReqParamsType *wdiEndScanParams =
2804 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2805 sizeof(WDI_EndScanReqParamsType)) ;
2806 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002808 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002809 if(NULL == wdiEndScanParams)
2810 {
2811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002812 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 VOS_ASSERT(0);
2814 return VOS_STATUS_E_NOMEM;
2815 }
2816 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2817 if(NULL == pWdaParams)
2818 {
2819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002820 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 VOS_ASSERT(0);
2822 vos_mem_free(wdiEndScanParams);
2823 return VOS_STATUS_E_NOMEM;
2824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 /* Copy init Scan params to WDI structure */
2826 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2827 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002828 /* Store Init Req pointer, as this will be used for response */
2829 /* store Params pass it to WDI */
2830 pWdaParams->pWdaContext = pWDA;
2831 pWdaParams->wdaMsgParam = endScanParams;
2832 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 /* call DAL API to pass init scan request to DAL */
2834 status = WDI_EndScanReq(wdiEndScanParams,
2835 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 if(IS_WDI_STATUS_FAILURE(status))
2837 {
2838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2839 "Failure in End Scan WDI API, free all the memory "
2840 "It should be due to previous abort scan." );
2841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2842 vos_mem_free(pWdaParams) ;
2843 endScanParams->status = eSIR_FAILURE ;
2844 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 return CONVERT_WDI2VOS_STATUS(status) ;
2847}
Jeff Johnson295189b2012-06-20 16:38:30 -07002848/*
2849 * FUNCTION: WDA_FinishScanReqCallback
2850 * Trigger Finish SCAN callback
2851 */
2852void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2853{
2854 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2855 tWDA_CbContext *pWDA;
2856 tFinishScanParams *finishScanParam;
2857 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002859 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 if(NULL == pWdaParams)
2861 {
2862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002863 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 VOS_ASSERT(0) ;
2865 return ;
2866 }
2867
2868 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2869 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 if(NULL == finishScanParam)
2871 {
2872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002873 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2876 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 return ;
2878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2880 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002881 /*
2882 * Now Resume TX, if we reached here means, TX is already suspended, we
2883 * have to resume it unconditionaly
2884 */
2885 status = WDA_ResumeDataTx(pWDA) ;
2886
2887 if(VOS_STATUS_SUCCESS != status)
2888 {
2889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002890 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002891 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002892 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2894 return ;
2895}
Jeff Johnson295189b2012-06-20 16:38:30 -07002896/*
2897 * FUNCTION: WDA_ProcessFinshScanReq
2898 * Trigger Finish SCAN in WDI
2899 */
2900VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2901 tFinishScanParams *finishScanParams)
2902{
2903 WDI_Status status = WDI_STATUS_SUCCESS;
2904 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2905 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2906 sizeof(WDI_FinishScanReqParamsType)) ;
2907 tWDA_ReqParams *pWdaParams ;
2908 tANI_U8 i = 0;
2909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002910 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 if(NULL == wdiFinishScanParams)
2912 {
2913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002915 VOS_ASSERT(0);
2916 return VOS_STATUS_E_NOMEM;
2917 }
2918 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2919 if(NULL == pWdaParams)
2920 {
2921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 VOS_ASSERT(0);
2924 vos_mem_free(wdiFinishScanParams);
2925 return VOS_STATUS_E_NOMEM;
2926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 /* Copy init Scan params to WDI structure */
2928 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2929 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2930 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2932 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2933 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2934 finishScanParams->frameLength ;
2935 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2936 finishScanParams->currentOperChannel ;
2937 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2938 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2939 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002940 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2941 {
2942 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2943 finishScanParams->scanEntry.bssIdx[i] ;
2944 }
2945
2946
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 /* if Frame length, copy macMgmtHdr ro WDI structure */
2948 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2949 {
2950 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2951 &finishScanParams->macMgmtHdr,
2952 sizeof(WDI_MacMgmtHdr)) ;
2953 }
2954 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 /* Store Init Req pointer, as this will be used for response */
2956 /* store Params pass it to WDI */
2957 pWdaParams->pWdaContext = pWDA;
2958 pWdaParams->wdaMsgParam = finishScanParams;
2959 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 /* call DAL API to pass init scan request to DAL */
2961 status = WDI_FinishScanReq(wdiFinishScanParams,
2962 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002963
Jeff Johnson295189b2012-06-20 16:38:30 -07002964
2965 /*
2966 * WDI API returns failure..
2967 */
2968 if(IS_WDI_STATUS_FAILURE( status))
2969 {
2970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2971 "Failure in Finish Scan WDI API, free all the memory " );
2972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2973 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 finishScanParams->status = eSIR_FAILURE ;
2975 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002977 return CONVERT_WDI2VOS_STATUS(status) ;
2978}
Jeff Johnson295189b2012-06-20 16:38:30 -07002979/*---------------------------------------------------------------------
2980 * ASSOC API's
2981 *---------------------------------------------------------------------
2982 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002983/*
2984 * FUNCTION: WDA_JoinReqCallback
2985 * Trigger Init SCAN callback
2986 */
2987void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2988{
2989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2990 tWDA_CbContext *pWDA;
2991 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002993 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 if(NULL == pWdaParams)
2995 {
2996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002997 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 VOS_ASSERT(0) ;
2999 return ;
3000 }
3001 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3002 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3004 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003005 /* reset macBSSID */
3006 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003007 /* reset macSTASelf */
3008 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003009 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 return ;
3012}
Jeff Johnson295189b2012-06-20 16:38:30 -07003013/*
3014 * FUNCTION: WDA_ProcessJoinReq
3015 * Trigger Join REQ in WDI
3016 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003017VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3018 tSwitchChannelParams* joinReqParam)
3019{
3020 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 WDI_JoinReqParamsType *wdiJoinReqParam =
3022 (WDI_JoinReqParamsType *)vos_mem_malloc(
3023 sizeof(WDI_JoinReqParamsType)) ;
3024 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003026 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 if(NULL == wdiJoinReqParam)
3028 {
3029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003032 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 return VOS_STATUS_E_NOMEM;
3034 }
3035 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3036 if(NULL == pWdaParams)
3037 {
3038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 VOS_ASSERT(0);
3041 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003042 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 return VOS_STATUS_E_NOMEM;
3044 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003045
3046 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3047 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3048 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3049 {
3050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3051 "%s: received join request when BSSID or self-STA is NULL "
3052 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003053 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003054 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3055 VOS_ASSERT(0);
3056 vos_mem_free(wdiJoinReqParam);
3057 vos_mem_free(pWdaParams);
3058 joinReqParam->status = eSIR_FAILURE ;
3059 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3060 return VOS_STATUS_E_INVAL;
3061 }
3062
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 /* copy the BSSID for pWDA */
3064 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3065 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3067 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003068 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3069 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003070#ifdef WLAN_FEATURE_VOWIFI
3071 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3072 joinReqParam->maxTxPower ;
3073#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3075 joinReqParam->localPowerConstraint ;
3076#endif
3077 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3078 joinReqParam->secondaryChannelOffset ;
3079 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3080
3081 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 /* Store Init Req pointer, as this will be used for response */
3083 /* store Params pass it to WDI */
3084 pWdaParams->pWdaContext = pWDA;
3085 pWdaParams->wdaMsgParam = joinReqParam;
3086 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 status = WDI_JoinReq(wdiJoinReqParam,
3088 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 if(IS_WDI_STATUS_FAILURE(status))
3090 {
3091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3092 "Failure in Join WDI API, free all the memory " );
3093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3094 vos_mem_free(pWdaParams) ;
3095 joinReqParam->status = eSIR_FAILURE ;
3096 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003098 return CONVERT_WDI2VOS_STATUS(status) ;
3099}
Jeff Johnson295189b2012-06-20 16:38:30 -07003100/*
3101 * FUNCTION: WDA_SwitchChannelReqCallback
3102 * send Switch channel RSP back to PE
3103 */
3104void WDA_SwitchChannelReqCallback(
3105 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3106{
3107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3108 tWDA_CbContext *pWDA;
3109 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003111 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 if(NULL == pWdaParams)
3113 {
3114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003115 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 VOS_ASSERT(0) ;
3117 return ;
3118 }
3119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3120 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3121
3122#ifdef WLAN_FEATURE_VOWIFI
3123 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3124#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3126 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003128 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 return ;
3131}
Jeff Johnson295189b2012-06-20 16:38:30 -07003132/*
3133 * FUNCTION: WDA_ProcessChannelSwitchReq
3134 * Request to WDI to switch channel REQ params.
3135 */
3136VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3137 tSwitchChannelParams *pSwitchChanParams)
3138{
3139 WDI_Status status = WDI_STATUS_SUCCESS ;
3140 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3141 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3142 sizeof(WDI_SwitchChReqParamsType)) ;
3143 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 if(NULL == wdiSwitchChanParam)
3147 {
3148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003149 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 VOS_ASSERT(0);
3151 return VOS_STATUS_E_NOMEM;
3152 }
3153 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3154 if(NULL == pWdaParams)
3155 {
3156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 VOS_ASSERT(0);
3159 vos_mem_free(wdiSwitchChanParam);
3160 return VOS_STATUS_E_NOMEM;
3161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3163#ifndef WLAN_FEATURE_VOWIFI
3164 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3165 pSwitchChanParams->localPowerConstraint;
3166#endif
3167 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3168 pSwitchChanParams->secondaryChannelOffset;
3169 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003170 /* Store req pointer, as this will be used for response */
3171 /* store Params pass it to WDI */
3172 pWdaParams->pWdaContext = pWDA;
3173 pWdaParams->wdaMsgParam = pSwitchChanParams;
3174 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175#ifdef WLAN_FEATURE_VOWIFI
3176 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3177 = pSwitchChanParams->maxTxPower;
3178 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3179 pSwitchChanParams ->selfStaMacAddr,
3180 sizeof(tSirMacAddr));
3181#endif
3182 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3183 pSwitchChanParams->bssId,
3184 sizeof(tSirMacAddr));
3185
3186 status = WDI_SwitchChReq(wdiSwitchChanParam,
3187 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003188 if(IS_WDI_STATUS_FAILURE(status))
3189 {
3190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3191 "Failure in process channel switch Req WDI API, free all the memory " );
3192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3193 vos_mem_free(pWdaParams) ;
3194 pSwitchChanParams->status = eSIR_FAILURE ;
3195 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 return CONVERT_WDI2VOS_STATUS(status) ;
3198}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003199
3200/*
3201 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3202 * send Switch channel RSP back to PE
3203 */
3204void WDA_SwitchChannelReqCallback_V1(
3205 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3206 void* pUserData)
3207{
3208 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3209 tWDA_CbContext *pWDA;
3210 tSwitchChannelParams *pSwitchChanParams;
3211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3212 "<------ %s " ,__func__);
3213
3214 if (NULL == pWdaParams)
3215 {
3216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3217 "%s: pWdaParams received NULL", __func__);
3218 VOS_ASSERT(0);
3219 return ;
3220 }
3221 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3222 pSwitchChanParams =
3223 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3224 pSwitchChanParams->channelSwitchSrc =
3225 wdiSwitchChanRsp->channelSwitchSrc;
3226#ifdef WLAN_FEATURE_VOWIFI
3227 pSwitchChanParams->txMgmtPower =
3228 wdiSwitchChanRsp->ucTxMgmtPower;
3229#endif
3230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3231 vos_mem_free(pWdaParams);
3232 pSwitchChanParams->status =
3233 wdiSwitchChanRsp->wdiStatus ;
3234 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3235 (void *)pSwitchChanParams , 0);
3236 return;
3237}
3238
3239/*
3240 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3241 * Request to WDI to switch channel REQ params.
3242 */
3243VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3244 tSwitchChannelParams *pSwitchChanParams)
3245{
3246 WDI_Status status = WDI_STATUS_SUCCESS ;
3247 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3248 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3249 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3250 tWDA_ReqParams *pWdaParams ;
3251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3252 "------> %s " ,__func__);
3253 if (NULL == wdiSwitchChanParam)
3254 {
3255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3256 "%s: VOS MEM Alloc Failure", __func__);
3257 VOS_ASSERT(0);
3258 return VOS_STATUS_E_NOMEM;
3259 }
3260 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3261 if (NULL == pWdaParams)
3262 {
3263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3264 "%s: VOS MEM Alloc Failure", __func__);
3265 VOS_ASSERT(0);
3266 vos_mem_free(wdiSwitchChanParam);
3267 return VOS_STATUS_E_NOMEM;
3268 }
3269 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3270 pSwitchChanParams->channelSwitchSrc;
3271
3272 wdiSwitchChanParam->wdiChInfo.ucChannel =
3273 pSwitchChanParams->channelNumber;
3274#ifndef WLAN_FEATURE_VOWIFI
3275 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3276 pSwitchChanParams->localPowerConstraint;
3277#endif
3278 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3279 pSwitchChanParams->secondaryChannelOffset;
3280 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3281 /* Store req pointer, as this will be used for response */
3282 /* store Params pass it to WDI */
3283 pWdaParams->pWdaContext = pWDA;
3284 pWdaParams->wdaMsgParam = pSwitchChanParams;
3285 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3286#ifdef WLAN_FEATURE_VOWIFI
3287 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3288 pSwitchChanParams->maxTxPower;
3289 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3290 pSwitchChanParams ->selfStaMacAddr,
3291 sizeof(tSirMacAddr));
3292#endif
3293 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3294 pSwitchChanParams->bssId,
3295 sizeof(tSirMacAddr));
3296
3297 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3298 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3299 pWdaParams);
3300 if (IS_WDI_STATUS_FAILURE(status))
3301 {
3302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3303 "Failure in process channel switch Req WDI "
3304 "API, free all the memory " );
3305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3306 vos_mem_free(pWdaParams) ;
3307 pSwitchChanParams->status = eSIR_FAILURE ;
3308 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3309 (void *)pSwitchChanParams, 0) ;
3310 }
3311 return CONVERT_WDI2VOS_STATUS(status) ;
3312}
3313
Jeff Johnson295189b2012-06-20 16:38:30 -07003314/*
3315 * FUNCTION: WDA_ConfigBssReqCallback
3316 * config BSS Req Callback, called by WDI
3317 */
3318void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3319 ,void* pUserData)
3320{
3321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3322 tWDA_CbContext *pWDA;
3323 tAddBssParams *configBssReqParam;
3324 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003326 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 if(NULL == pWdaParams)
3328 {
3329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003330 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 VOS_ASSERT(0) ;
3332 return ;
3333 }
3334 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3335 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3336 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003337 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003338 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3340 {
3341 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3342 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3344 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3345 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3346
3347 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3348 {
3349 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3350 {
3351 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3352 staConfigBssParam->staType = STA_ENTRY_BSSID;
3353 }
3354 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3355 (staConfigBssParam->staType == STA_ENTRY_SELF))
3356 {
3357 /* This is the 1st add BSS Req for the BTAMP STA */
3358 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3359 staConfigBssParam->staType = STA_ENTRY_BSSID;
3360 }
3361 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3362 (staConfigBssParam->staType == STA_ENTRY_PEER))
3363 {
3364 /* This is the 2nd ADD BSS Request that is sent
3365 * on the BTAMP STA side. The Sta type is
3366 * set to STA_ENTRY_PEER here.*/
3367 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3368 }
3369 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3370 (staConfigBssParam->staType == STA_ENTRY_SELF))
3371 {
3372 /* statype is already set by PE.
3373 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3374 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3375 staConfigBssParam->staType = STA_ENTRY_BSSID;
3376 }
3377 else
3378 {
3379 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3380 staConfigBssParam->staType = STA_ENTRY_PEER;
3381 }
3382 }
3383 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3384 {
3385 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3386 staConfigBssParam->staType = STA_ENTRY_SELF;
3387 }
3388 else
3389 {
3390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3391 "Invalid operation mode specified");
3392 VOS_ASSERT(0);
3393 }
3394
3395 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003396 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3400 sizeof(tSirMacAddr));
3401 staConfigBssParam->txChannelWidthSet =
3402 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3404 staConfigBssParam->htCapable)
3405 {
3406 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3407 wdiConfigBssRsp->ucBSSIdx;
3408 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3409 WDA_VALID_STA_INDEX ;
3410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3412 wdiConfigBssRsp->ucBSSIdx,
3413 wdiConfigBssRsp->ucSTAIdx))
3414 {
3415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 VOS_ASSERT(0) ;
3418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3420 {
3421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003422 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003423 VOS_ASSERT(0) ;
3424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003425#ifdef WLAN_FEATURE_VOWIFI
3426 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3427#endif
3428 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3430 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003432 return ;
3433}
Jeff Johnson295189b2012-06-20 16:38:30 -07003434/*
3435 * FUNCTION: WDA_UpdateEdcaParamsForAC
3436 * Update WDI EDCA params with PE edca params
3437 */
3438void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3439 WDI_EdcaParamRecord *wdiEdcaParam,
3440 tSirMacEdcaParamRecord *macEdcaParam)
3441{
3442 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3443 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3444 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3445 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3446 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3447 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3448}
Jeff Johnson295189b2012-06-20 16:38:30 -07003449/*
3450 * FUNCTION: WDA_ProcessConfigBssReq
3451 * Configure BSS before starting Assoc with AP
3452 */
3453VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3454 tAddBssParams* configBssReqParam)
3455{
3456 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303457 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 tWDA_ReqParams *pWdaParams ;
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__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303461 if (NULL == configBssReqParam)
3462 {
3463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3464 "%s: configBssReqParam is NULL", __func__);
3465 return VOS_STATUS_E_INVAL;
3466 }
3467
3468 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3469 sizeof(WDI_ConfigBSSReqParamsType)) ;
3470
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 if(NULL == wdiConfigBssReqParam)
3472 {
3473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 VOS_ASSERT(0);
3476 return VOS_STATUS_E_NOMEM;
3477 }
3478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3479 if(NULL == pWdaParams)
3480 {
3481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003483 VOS_ASSERT(0);
3484 vos_mem_free(wdiConfigBssReqParam);
3485 return VOS_STATUS_E_NOMEM;
3486 }
Kiran4a17ebe2013-01-31 10:43:43 -08003487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3488 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3491 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003492 /* Store Init Req pointer, as this will be used for response */
3493 /* store Params pass it to WDI */
3494 pWdaParams->pWdaContext = pWDA;
3495 pWdaParams->wdaMsgParam = configBssReqParam;
3496 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3498 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 if(IS_WDI_STATUS_FAILURE(status))
3500 {
3501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3502 "Failure in Config BSS WDI API, free all the memory " );
3503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3504 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 return CONVERT_WDI2VOS_STATUS(status) ;
3509}
Jeff Johnson295189b2012-06-20 16:38:30 -07003510#ifdef ENABLE_HAL_COMBINED_MESSAGES
3511/*
3512 * FUNCTION: WDA_PostAssocReqCallback
3513 * Post ASSOC req callback, send RSP back to PE
3514 */
3515void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3516 void* pUserData)
3517{
3518 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3519 tPostAssocParams *postAssocReqParam =
3520 (tPostAssocParams *)pWDA->wdaMsgParam ;
3521 /*STA context within the BSS Params*/
3522 tAddStaParams *staPostAssocParam =
3523 &postAssocReqParam->addBssParams.staContext ;
3524 /*STA Params for self STA*/
3525 tAddStaParams *selfStaPostAssocParam =
3526 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003528 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003530 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3532 {
3533 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3534 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3535 sizeof(tSirMacAddr)) ;
3536 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3537 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3538 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3540 }
3541 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3542 pWDA->wdaWdiApiMsgParam = NULL;
3543 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 return ;
3546}
Jeff Johnson295189b2012-06-20 16:38:30 -07003547/*
3548 * FUNCTION: WDA_ProcessPostAssocReq
3549 * Trigger POST ASSOC processing in WDI
3550 */
3551VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3552 tPostAssocParams *postAssocReqParam)
3553{
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 WDI_Status status = WDI_STATUS_SUCCESS ;
3555
3556 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3557 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3558 sizeof(WDI_PostAssocReqParamsType)) ;
3559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003561
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 if(NULL == wdiPostAssocReqParam)
3563 {
3564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003565 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 VOS_ASSERT(0);
3567 return VOS_STATUS_E_NOMEM;
3568 }
3569
3570 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3571 {
3572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003573 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 VOS_ASSERT(0);
3575 return VOS_STATUS_E_FAILURE;
3576 }
3577
Jeff Johnson295189b2012-06-20 16:38:30 -07003578 /* update BSS params into WDI structure */
3579 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3580 &postAssocReqParam->addBssParams) ;
3581 /* update STA params into WDI structure */
3582 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3583 &postAssocReqParam->addStaParams) ;
3584
3585 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3586 postAssocReqParam->addBssParams.highPerformance;
3587 WDA_UpdateEdcaParamsForAC(pWDA,
3588 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3589 &postAssocReqParam->addBssParams.acbe);
3590 WDA_UpdateEdcaParamsForAC(pWDA,
3591 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3592 &postAssocReqParam->addBssParams.acbk);
3593 WDA_UpdateEdcaParamsForAC(pWDA,
3594 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3595 &postAssocReqParam->addBssParams.acvi);
3596 WDA_UpdateEdcaParamsForAC(pWDA,
3597 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3598 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 /* Store Init Req pointer, as this will be used for response */
3600 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 /* store Params pass it to WDI */
3602 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3604 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 if(IS_WDI_STATUS_FAILURE(status))
3606 {
3607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3608 "Failure in Post Assoc WDI API, free all the memory " );
3609 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3610 pWDA->wdaWdiApiMsgParam = NULL;
3611 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003612 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003613 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 return CONVERT_WDI2VOS_STATUS(status) ;
3616}
3617#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003618/*
3619 * FUNCTION: WDA_AddStaReqCallback
3620 * ADD STA req callback, send RSP back to PE
3621 */
3622void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3623 void* pUserData)
3624{
3625 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3626 tWDA_CbContext *pWDA;
3627 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003629 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 if(NULL == pWdaParams)
3631 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003633 VOS_ASSERT(0) ;
3634 return ;
3635 }
3636 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3637 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003638 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003639 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3641 {
3642 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3643 /*TODO: UMAC structure doesn't have these fields*/
3644 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3645 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3646 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3647 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3648 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3649 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003650#ifdef FEATURE_WLAN_TDLS
3651 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3652 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3653#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003655#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 {
3657 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3658 wdiConfigStaRsp->ucBssIdx;
3659 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3660 WDA_VALID_STA_INDEX ;
3661 }
3662 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3663 {
3664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003665 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003666 VOS_ASSERT(0) ;
3667 return ;
3668 }
3669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3671 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 return ;
3674}
Jeff Johnson295189b2012-06-20 16:38:30 -07003675/*
3676 * FUNCTION: WDA_ConfigStaReq
3677 * Trigger Config STA processing in WDI
3678 */
3679VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3680 tAddStaParams *addStaReqParam)
3681{
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3684 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3685 sizeof(WDI_ConfigSTAReqParamsType)) ;
3686 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003688 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003689 if(NULL == wdiConfigStaReqParam)
3690 {
3691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 VOS_ASSERT(0);
3694 return VOS_STATUS_E_NOMEM;
3695 }
3696 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3697 if(NULL == pWdaParams)
3698 {
3699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003701 VOS_ASSERT(0);
3702 vos_mem_free(wdiConfigStaReqParam);
3703 return VOS_STATUS_E_NOMEM;
3704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003706 /* update STA params into WDI structure */
3707 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3708 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003709 /* Store Init Req pointer, as this will be used for response */
3710 /* store Params pass it to WDI */
3711 pWdaParams->pWdaContext = pWDA;
3712 pWdaParams->wdaMsgParam = addStaReqParam;
3713 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3715 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003716 if(IS_WDI_STATUS_FAILURE(status))
3717 {
3718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3719 "Failure in Config STA WDI API, free all the memory " );
3720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3721 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003722 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003723 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3724 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 return CONVERT_WDI2VOS_STATUS(status) ;
3726}
Jeff Johnson295189b2012-06-20 16:38:30 -07003727/*
3728 * FUNCTION: WDA_DelBSSReqCallback
3729 * Dens DEL BSS RSP back to PE
3730 */
3731void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3732 void* pUserData)
3733{
3734 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3735 tWDA_CbContext *pWDA;
3736 tDeleteBssParams *delBssReqParam;
3737 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003739 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 if(NULL == pWdaParams)
3741 {
3742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003743 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003744 VOS_ASSERT(0) ;
3745 return ;
3746 }
3747 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3748 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003749 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3751 {
3752 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3753 sizeof(tSirMacAddr)) ;
3754 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003755 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3756 {
3757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003758 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003759 VOS_ASSERT(0) ;
3760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3762 {
3763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003764 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003765 VOS_ASSERT(0) ;
3766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003767 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3768 {
3769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003770 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 VOS_ASSERT(0) ;
3772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3774 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003775 /* reset the the system role*/
3776 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3777
3778 /* Reset the BA related information */
3779 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3780 {
3781 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3782 {
3783 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3784 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3785 /* Reset framesTxed counters here */
3786 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3787 {
3788 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3789 }
3790 }
3791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003792 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 return ;
3794}
3795
Jeff Johnson295189b2012-06-20 16:38:30 -07003796/*
3797 * FUNCTION: WDA_ProcessDelBssReq
3798 * Init DEL BSS req with WDI
3799 */
3800VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3801 tDeleteBssParams *delBssParam)
3802{
3803 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003804 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3805 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3806 sizeof(WDI_DelBSSReqParamsType)) ;
3807 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003809 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003810 if(NULL == wdiDelBssReqParam)
3811 {
3812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 VOS_ASSERT(0);
3815 return VOS_STATUS_E_NOMEM;
3816 }
3817 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3818 if(NULL == pWdaParams)
3819 {
3820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003822 VOS_ASSERT(0);
3823 vos_mem_free(wdiDelBssReqParam);
3824 return VOS_STATUS_E_NOMEM;
3825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003826 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3827 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3828
3829 /* Store Init Req pointer, as this will be used for response */
3830 /* store Params pass it to WDI */
3831 pWdaParams->pWdaContext = pWDA;
3832 pWdaParams->wdaMsgParam = delBssParam;
3833 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003834 status = WDI_DelBSSReq(wdiDelBssReqParam,
3835 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003836 if(IS_WDI_STATUS_FAILURE(status))
3837 {
3838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3839 "Failure in Del BSS WDI API, free all the memory " );
3840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3841 vos_mem_free(pWdaParams) ;
3842 delBssParam->status = eSIR_FAILURE ;
3843 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003845 return CONVERT_WDI2VOS_STATUS(status) ;
3846}
Jeff Johnson295189b2012-06-20 16:38:30 -07003847/*
3848 * FUNCTION: WDA_DelSTAReqCallback
3849 * Dens DEL STA RSP back to PE
3850 */
3851void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3852 void* pUserData)
3853{
3854 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3855 tWDA_CbContext *pWDA;
3856 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003858 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003859 if(NULL == pWdaParams)
3860 {
3861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003862 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003863 VOS_ASSERT(0) ;
3864 return ;
3865 }
3866 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3867 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003868 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003869 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3870 {
3871 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3872 {
3873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003874 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 VOS_ASSERT(0) ;
3876 }
3877 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3878 }
3879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3880 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003881 /*Reset the BA information corresponding to this STAIdx */
3882 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3883 WDA_INVALID_STA_INDEX;
3884 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3885
3886 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003887 return ;
3888}
Jeff Johnson295189b2012-06-20 16:38:30 -07003889/*
3890 * FUNCTION: WDA_ProcessDelStaReq
3891 * Init DEL STA req with WDI
3892 */
3893VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3894 tDeleteStaParams *delStaParam)
3895{
3896 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003897 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3898 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3899 sizeof(WDI_DelSTAReqParamsType)) ;
3900 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003902 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003903 if(NULL == wdiDelStaReqParam)
3904 {
3905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 VOS_ASSERT(0);
3908 return VOS_STATUS_E_NOMEM;
3909 }
3910 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3911 if(NULL == pWdaParams)
3912 {
3913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 VOS_ASSERT(0);
3916 vos_mem_free(wdiDelStaReqParam);
3917 return VOS_STATUS_E_NOMEM;
3918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3920 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003921 /* Store Init Req pointer, as this will be used for response */
3922 /* store Params pass it to WDI */
3923 pWdaParams->pWdaContext = pWDA;
3924 pWdaParams->wdaMsgParam = delStaParam;
3925 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003926 status = WDI_DelSTAReq(wdiDelStaReqParam,
3927 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 if(IS_WDI_STATUS_FAILURE(status))
3929 {
3930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3931 "Failure in Del STA WDI API, free all the memory status = %d",
3932 status );
3933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3934 vos_mem_free(pWdaParams) ;
3935 delStaParam->status = eSIR_FAILURE ;
3936 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003938 return CONVERT_WDI2VOS_STATUS(status) ;
3939}
Jeff Johnson295189b2012-06-20 16:38:30 -07003940void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3941{
3942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3943 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303944 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003946 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 if(NULL == pWdaParams)
3948 {
3949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003950 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 VOS_ASSERT(0) ;
3952 return ;
3953 }
3954 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3955 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3957 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3959 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3960 pwdiAddSTASelfRsp->macSelfSta,
3961 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303962 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
3963 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
3964 if (pAddStaSelfRsp->status == eSIR_FAILURE)
3965 {
3966 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
3967 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
3968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003969 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 return ;
3971}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303972
Jeff Johnson295189b2012-06-20 16:38:30 -07003973/*
3974 * FUNCTION: WDA_ProcessAddStaSelfReq
3975 *
3976 */
3977VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3978{
3979 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003980 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3982 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3983 sizeof(WDI_AddSTASelfReqParamsType)) ;
3984 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003986 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303987 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 if( NULL == wdiAddStaSelfReq )
3989 {
3990 VOS_ASSERT( 0 );
3991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003992 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303993 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
3994 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 return( VOS_STATUS_E_NOMEM );
3996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 if( NULL == pWdaParams )
3999 {
4000 VOS_ASSERT( 0 );
4001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004002 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304003 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4004 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004005 vos_mem_free(wdiAddStaSelfReq) ;
4006 return( VOS_STATUS_E_NOMEM );
4007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004010 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 /* Store Init Req pointer, as this will be used for response */
4012 /* store Params pass it to WDI */
4013 pWdaParams->pWdaContext = pWDA;
4014 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4015 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004016 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004017
Jeff Johnson43971f52012-07-17 12:26:56 -07004018 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 {
4020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4021 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004022 wstatus );
4023 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4025 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304026 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4027 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 pAddStaSelfReq->status = eSIR_FAILURE ;
4029 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4030 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004031 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032}
Jeff Johnson295189b2012-06-20 16:38:30 -07004033/*
4034 * FUNCTION: WDA_DelSTASelfRespCallback
4035 *
4036 */
4037void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4038 wdiDelStaSelfRspParams , void* pUserData)
4039{
4040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4041 tWDA_CbContext *pWDA;
4042 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004044 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 if (NULL == pWdaParams)
4046 {
4047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004048 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 VOS_ASSERT(0);
4050 return;
4051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4053 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004055 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004056
4057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4058 vos_mem_free(pWdaParams) ;
4059
4060 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 return ;
4062}
Jeff Johnson295189b2012-06-20 16:38:30 -07004063/*
4064 * FUNCTION: WDA_DelSTASelfReqCallback
4065 *
4066 */
4067void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4068 void* pUserData)
4069{
4070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4071 tWDA_CbContext *pWDA;
4072 tDelStaSelfParams *delStaSelfParams;
4073
4074 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304075 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004076 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004077
4078 if (NULL == pWdaParams)
4079 {
4080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004081 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 VOS_ASSERT(0);
4083 return;
4084 }
4085
4086 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4087 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4088
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004089 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004090
4091 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4092 {
4093 VOS_ASSERT(0);
4094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4095 vos_mem_free(pWdaParams) ;
4096 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4097 }
4098
4099 return ;
4100}
4101
4102/*
4103 * FUNCTION: WDA_DelSTASelfReq
4104 * Trigger Config STA processing in WDI
4105 */
4106VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4107 tDelStaSelfParams* pDelStaSelfReqParam)
4108{
4109 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004110 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004111 tWDA_ReqParams *pWdaParams = NULL;
4112 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4113 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4114 sizeof(WDI_DelSTASelfReqParamsType)) ;
4115
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004117 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 if( NULL == wdiDelStaSelfReq )
4119 {
4120 VOS_ASSERT( 0 );
4121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004122 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 return( VOS_STATUS_E_NOMEM );
4124 }
4125
4126 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4127 if( NULL == pWdaParams )
4128 {
4129 VOS_ASSERT( 0 );
4130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004131 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 vos_mem_free(wdiDelStaSelfReq) ;
4133 return( VOS_STATUS_E_NOMEM );
4134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 pWdaParams->pWdaContext = pWDA;
4136 /* Store param pointer as passed in by caller */
4137 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4138 /* store Params pass it to WDI */
4139 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4141 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4142
4143 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4144 wdiDelStaSelfReq->pUserData = pWdaParams;
4145
Jeff Johnson43971f52012-07-17 12:26:56 -07004146 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4148
Jeff Johnson43971f52012-07-17 12:26:56 -07004149 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 {
4151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4152 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4153 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004154 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4156 vos_mem_free(pWdaParams) ;
4157 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4158 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4159 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004160 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004161}
4162
Jeff Johnson295189b2012-06-20 16:38:30 -07004163/*
4164 * FUNCTION: WDA_SendMsg
4165 * Send Message back to PE
4166 */
4167void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4168 void *pBodyptr, tANI_U32 bodyVal)
4169{
4170 tSirMsgQ msg = {0} ;
4171 tANI_U32 status = VOS_STATUS_SUCCESS ;
4172 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004173 msg.type = msgType;
4174 msg.bodyval = bodyVal;
4175 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004177 if (VOS_STATUS_SUCCESS != status)
4178 {
4179 if(NULL != pBodyptr)
4180 {
4181 vos_mem_free(pBodyptr);
4182 }
4183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004184 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 VOS_ASSERT(0) ;
4186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 return ;
4188}
Jeff Johnson295189b2012-06-20 16:38:30 -07004189/*
4190 * FUNCTION: WDA_UpdateBSSParams
4191 * Translated WDA/PE BSS info into WDI BSS info..
4192 */
4193void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4194 WDI_ConfigBSSReqInfoType *wdiBssParams,
4195 tAddBssParams *wdaBssParams)
4196{
4197 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 /* copy bssReq Params to WDI structure */
4199 vos_mem_copy(wdiBssParams->macBSSID,
4200 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4201 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4202 sizeof(tSirMacAddr)) ;
4203 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4204 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4205 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206 wdiBssParams->ucShortSlotTimeSupported =
4207 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4209 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4210 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4211 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4212 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4213
4214 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4215 wdiBssParams->ucTXOPProtectionFullSupport =
4216 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4218 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4221 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4222 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4223 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4224
Chet Lanctot186b5732013-03-18 10:26:30 -07004225 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4226
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 /* copy SSID into WDI structure */
4228 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4229 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4230 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004231 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4232 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004233 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004234#ifdef WLAN_FEATURE_VOWIFI
4235 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4236#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004237 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004239#ifdef WLAN_FEATURE_VOWIFI_11R
4240 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 if(wdiBssParams->bExtSetStaKeyParamValid)
4242 {
4243 /* copy set STA key params to WDI structure */
4244 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4245 wdaBssParams->extSetStaKeyParam.staIdx;
4246 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4247 wdaBssParams->extSetStaKeyParam.encType;
4248 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4249 wdaBssParams->extSetStaKeyParam.wepType;
4250 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4251 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004252 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4253 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004254 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4256 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4257 {
4258 WDA_GetWepKeysFromCfg( pWDA,
4259 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4260 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4261 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4262 }
4263 else
4264 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004265 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4266 keyIndex++)
4267 {
4268 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4269 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4270 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4271 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4272 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4273 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4275 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4276 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4277 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4278 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4279 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4280 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4281 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4284 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 }
4286 }
4287 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4288 }
4289 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4290 {
4291 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4292 sizeof(wdaBssParams->extSetStaKeyParam) );
4293 }
4294#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004295#ifdef WLAN_FEATURE_11AC
4296 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4297 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4298#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004299
4300 return ;
4301}
Jeff Johnson295189b2012-06-20 16:38:30 -07004302/*
4303 * FUNCTION: WDA_UpdateSTAParams
4304 * Translated WDA/PE BSS info into WDI BSS info..
4305 */
4306void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4307 WDI_ConfigStaReqInfoType *wdiStaParams,
4308 tAddStaParams *wdaStaParams)
4309{
4310 tANI_U8 i = 0;
4311 /* Update STA params */
4312 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4313 sizeof(tSirMacAddr)) ;
4314 wdiStaParams->usAssocId = wdaStaParams->assocId;
4315 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004316 wdiStaParams->staIdx = wdaStaParams->staIdx;
4317
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 wdiStaParams->ucShortPreambleSupported =
4319 wdaStaParams->shortPreambleSupported;
4320 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4321 sizeof(tSirMacAddr)) ;
4322 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4323
4324 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4325
4326 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4327 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4328 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4329 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4330 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4331 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4332 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4333
4334 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4335 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 wdiStaParams->wdiSupportedRates.opRateMode =
4337 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4339 {
4340 wdiStaParams->wdiSupportedRates.llbRates[i] =
4341 wdaStaParams->supportedRates.llbRates[i];
4342 }
4343 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4344 {
4345 wdiStaParams->wdiSupportedRates.llaRates[i] =
4346 wdaStaParams->supportedRates.llaRates[i];
4347 }
4348 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4349 {
4350 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4351 wdaStaParams->supportedRates.aniLegacyRates[i];
4352 }
4353 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4354 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004355#ifdef WLAN_FEATURE_11AC
4356 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4357 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4358 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4359 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4360#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4362 {
4363 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4364 wdaStaParams->supportedRates.supportedMCSSet[i];
4365 }
4366 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4367 wdaStaParams->supportedRates.rxHighestDataRate;
4368
4369 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4370
4371 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4372
4373 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4374 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4375 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4376
4377 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4378 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4379 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4380 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004382#ifdef WLAN_FEATURE_11AC
4383 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4384 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004385 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004386#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004387 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4388 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 return ;
4390}
Jeff Johnson295189b2012-06-20 16:38:30 -07004391/*
4392 * -------------------------------------------------------------------------
4393 * CFG update to WDI
4394 * -------------------------------------------------------------------------
4395 */
4396
4397 /*
4398 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4399 * Convert the WNI CFG ID to HAL CFG ID
4400 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004401static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004402{
4403 switch(wniCfgId)
4404 {
4405 case WNI_CFG_STA_ID:
4406 return QWLAN_HAL_CFG_STA_ID;
4407 case WNI_CFG_CURRENT_TX_ANTENNA:
4408 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4409 case WNI_CFG_CURRENT_RX_ANTENNA:
4410 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4411 case WNI_CFG_LOW_GAIN_OVERRIDE:
4412 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4413 case WNI_CFG_POWER_STATE_PER_CHAIN:
4414 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4415 case WNI_CFG_CAL_PERIOD:
4416 return QWLAN_HAL_CFG_CAL_PERIOD;
4417 case WNI_CFG_CAL_CONTROL:
4418 return QWLAN_HAL_CFG_CAL_CONTROL;
4419 case WNI_CFG_PROXIMITY:
4420 return QWLAN_HAL_CFG_PROXIMITY;
4421 case WNI_CFG_NETWORK_DENSITY:
4422 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4423 case WNI_CFG_MAX_MEDIUM_TIME:
4424 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4425 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4426 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4427 case WNI_CFG_RTS_THRESHOLD:
4428 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4429 case WNI_CFG_SHORT_RETRY_LIMIT:
4430 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4431 case WNI_CFG_LONG_RETRY_LIMIT:
4432 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4433 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4434 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4435 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4436 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4437 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4438 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4439 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4440 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4441 case WNI_CFG_FIXED_RATE:
4442 return QWLAN_HAL_CFG_FIXED_RATE;
4443 case WNI_CFG_RETRYRATE_POLICY:
4444 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4445 case WNI_CFG_RETRYRATE_SECONDARY:
4446 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4447 case WNI_CFG_RETRYRATE_TERTIARY:
4448 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4449 case WNI_CFG_FORCE_POLICY_PROTECTION:
4450 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4451 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4452 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4453 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4454 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4455 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4456 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4457 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4458 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4459 case WNI_CFG_MAX_BA_SESSIONS:
4460 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4461 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4462 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4463 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4464 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4465 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4466 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4467 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4468 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4469 case WNI_CFG_STATS_PERIOD:
4470 return QWLAN_HAL_CFG_STATS_PERIOD;
4471 case WNI_CFG_CFP_MAX_DURATION:
4472 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4473#if 0 /*This is not part of CFG*/
4474 case WNI_CFG_FRAME_TRANS_ENABLED:
4475 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4476#endif
4477 case WNI_CFG_DTIM_PERIOD:
4478 return QWLAN_HAL_CFG_DTIM_PERIOD;
4479 case WNI_CFG_EDCA_WME_ACBK:
4480 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4481 case WNI_CFG_EDCA_WME_ACBE:
4482 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4483 case WNI_CFG_EDCA_WME_ACVI:
4484 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4485 case WNI_CFG_EDCA_WME_ACVO:
4486 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4487#if 0
4488 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4489 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4490 case WNI_CFG_TELE_BCN_TRANS_LI:
4491 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4492 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4493 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4494 case WNI_CFG_TELE_BCN_MAX_LI:
4495 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4496 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4497 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4498#endif
4499 case WNI_CFG_ENABLE_CLOSE_LOOP:
4500 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004501 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4502 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 default:
4504 {
4505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004506 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 wniCfgId);
4508 return VOS_STATUS_E_INVAL;
4509 }
4510 }
4511}
Jeff Johnson295189b2012-06-20 16:38:30 -07004512/*
4513 * FUNCTION: WDA_UpdateCfgCallback
4514 *
4515 */
4516void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4517{
4518 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4519 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4520 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004522 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 /*
4524 * currently there is no response message is expected between PE and
4525 * WDA, Failure return from WDI is a ASSERT condition
4526 */
4527 if(WDI_STATUS_SUCCESS != wdiStatus)
4528 {
4529 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004530 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4532 }
4533
4534 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4535 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4536 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 return ;
4538}
Jeff Johnson295189b2012-06-20 16:38:30 -07004539/*
4540 * FUNCTION: WDA_UpdateCfg
4541 *
4542 */
4543VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4544{
4545
4546 WDI_Status status = WDI_STATUS_SUCCESS ;
4547 tANI_U32 val =0;
4548 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4549 tHalCfg *configData;
4550 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4551 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004553 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 if (NULL == pMac )
4555 {
4556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004557 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 return VOS_STATUS_E_FAILURE;
4559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004560 if(WDA_START_STATE != pWDA->wdaState)
4561 {
4562 return VOS_STATUS_E_FAILURE;
4563 }
4564
4565 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4566 {
4567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004568 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 VOS_ASSERT(0);
4570 return VOS_STATUS_E_FAILURE;
4571 }
4572
4573 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4574 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 if(NULL == wdiCfgReqParam)
4576 {
4577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004579 VOS_ASSERT(0);
4580 return VOS_STATUS_E_NOMEM;
4581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004582 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4583 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 if(NULL == wdiCfgReqParam->pConfigBuffer)
4585 {
4586 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004587 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 vos_mem_free(wdiCfgReqParam);
4589 VOS_ASSERT(0);
4590 return VOS_STATUS_E_NOMEM;
4591 }
4592
4593 /*convert the WNI CFG Id to HAL CFG Id*/
4594 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4595 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4596
4597 /*TODO: revisit this for handling string parameters */
4598 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4599 &val) != eSIR_SUCCESS)
4600 {
4601 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004602 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4604 vos_mem_free(wdiCfgReqParam);
4605 return eSIR_FAILURE;
4606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004607 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4608 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4609 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4610 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4611 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4612
4613 /* store Params pass it to WDI */
4614 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004615#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4616 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4617 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 if(IS_WDI_STATUS_FAILURE(status))
4619 {
4620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4621 "Failure in Update CFG WDI API, free all the memory " );
4622 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4623 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4624 pWDA->wdaWdiCfgApiMsgParam = NULL;
4625 /* Failure is not expected */
4626 VOS_ASSERT(0) ;
4627 }
4628#else
4629 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4630 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4631 pWDA->wdaWdiCfgApiMsgParam = NULL;
4632#endif
4633 return CONVERT_WDI2VOS_STATUS(status) ;
4634}
4635
Jeff Johnson295189b2012-06-20 16:38:30 -07004636VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4637 v_U8_t *pDefaultKeyId,
4638 v_U8_t *pNumKeys,
4639 WDI_KeysType *pWdiKeys )
4640{
4641 v_U32_t i, j, defKeyId = 0;
4642 v_U32_t val = SIR_MAC_KEY_LENGTH;
4643 VOS_STATUS status = WDI_STATUS_SUCCESS;
4644 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004645 if (NULL == pMac )
4646 {
4647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004648 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 return VOS_STATUS_E_FAILURE;
4650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004651 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4652 &defKeyId ))
4653 {
4654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4655 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4656 }
4657
4658 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 /* Need to extract ALL of the configured WEP Keys */
4660 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4661 {
4662 val = SIR_MAC_KEY_LENGTH;
4663 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4664 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4665 pWdiKeys[j].key,
4666 &val ))
4667 {
4668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004669 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 }
4671 else
4672 {
4673 pWdiKeys[j].keyId = (tANI_U8) i;
4674 /*
4675 * Actually, a DC (Don't Care) because
4676 * this is determined (and set) by PE/MLME
4677 */
4678 pWdiKeys[j].unicast = 0;
4679 /*
4680 * Another DC (Don't Care)
4681 */
4682 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4683 /* Another DC (Don't Care). Unused for WEP */
4684 pWdiKeys[j].paeRole = 0;
4685 /* Determined from wlan_cfgGetStr() above.*/
4686 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 j++;
4688 *pNumKeys = (tANI_U8) j;
4689 }
4690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 return status;
4692}
Jeff Johnson295189b2012-06-20 16:38:30 -07004693/*
4694 * FUNCTION: WDA_SetBssKeyReqCallback
4695 * send SET BSS key RSP back to PE
4696 */
4697void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4698{
4699 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4700 tWDA_CbContext *pWDA;
4701 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004703 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 if(NULL == pWdaParams)
4705 {
4706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004707 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 VOS_ASSERT(0) ;
4709 return ;
4710 }
4711 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4712 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4714 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004715 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 return ;
4718}
Jeff Johnson295189b2012-06-20 16:38:30 -07004719/*
4720 * FUNCTION: WDA_ProcessSetBssKeyReq
4721 * Request to WDI for programming the BSS key( key for
4722 * broadcast/multicast frames Encryption)
4723 */
4724VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4725 tSetBssKeyParams *setBssKeyParams )
4726{
4727 WDI_Status status = WDI_STATUS_SUCCESS ;
4728 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4729 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4730 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4731 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004732 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004734 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 if(NULL == wdiSetBssKeyParam)
4736 {
4737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 VOS_ASSERT(0);
4740 return VOS_STATUS_E_NOMEM;
4741 }
4742 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4743 if(NULL == pWdaParams)
4744 {
4745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 VOS_ASSERT(0);
4748 vos_mem_free(wdiSetBssKeyParam);
4749 return VOS_STATUS_E_NOMEM;
4750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004752 /* copy set BSS params to WDI structure */
4753 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4754 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4755 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004756 if(setBssKeyParams->encType != eSIR_ED_NONE)
4757 {
4758 if( setBssKeyParams->numKeys == 0 &&
4759 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4760 setBssKeyParams->encType == eSIR_ED_WEP104))
4761 {
4762 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4764 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4765 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4766 }
4767 else
4768 {
4769 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4770 {
4771 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4772 setBssKeyParams->key[keyIndex].keyId;
4773 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4774 setBssKeyParams->key[keyIndex].unicast;
4775 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4776 setBssKeyParams->key[keyIndex].keyDirection;
4777 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4778 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4779 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4780 setBssKeyParams->key[keyIndex].paeRole;
4781 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4782 setBssKeyParams->key[keyIndex].keyLength;
4783 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4784 setBssKeyParams->key[keyIndex].key,
4785 SIR_MAC_MAX_KEY_LENGTH);
4786 }
4787 }
4788 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004789 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4790 setBssKeyParams->singleTidRc;
4791 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 /* Store set key pointer, as this will be used for response */
4793 /* store Params pass it to WDI */
4794 pWdaParams->pWdaContext = pWDA;
4795 pWdaParams->wdaMsgParam = setBssKeyParams;
4796 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4798 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4799
4800 if(IS_WDI_STATUS_FAILURE(status))
4801 {
4802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4803 "Failure in Set BSS Key Req WDI API, free all the memory " );
4804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4805 vos_mem_free(pWdaParams) ;
4806 setBssKeyParams->status = eSIR_FAILURE ;
4807 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 return CONVERT_WDI2VOS_STATUS(status) ;
4810}
Jeff Johnson295189b2012-06-20 16:38:30 -07004811/*
4812 * FUNCTION: WDA_RemoveBssKeyReqCallback
4813 * send SET BSS key RSP back to PE
4814 */
4815void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4816{
4817 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4818 tWDA_CbContext *pWDA;
4819 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004821 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 if(NULL == pWdaParams)
4823 {
4824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004825 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 VOS_ASSERT(0) ;
4827 return ;
4828 }
4829 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4830 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4832 vos_mem_free(pWdaParams) ;
4833
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004834 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004835 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004836 return ;
4837}
Jeff Johnson295189b2012-06-20 16:38:30 -07004838/*
4839 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4840 * Request to WDI to remove the BSS key( key for broadcast/multicast
4841 * frames Encryption)
4842 */
4843VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4844 tRemoveBssKeyParams *removeBssKeyParams )
4845{
4846 WDI_Status status = WDI_STATUS_SUCCESS ;
4847 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4848 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4849 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4850 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004852 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if(NULL == wdiRemoveBssKeyParam)
4854 {
4855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004856 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 VOS_ASSERT(0);
4858 return VOS_STATUS_E_NOMEM;
4859 }
4860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4861 if(NULL == pWdaParams)
4862 {
4863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 VOS_ASSERT(0);
4866 vos_mem_free(wdiRemoveBssKeyParam);
4867 return VOS_STATUS_E_NOMEM;
4868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 /* copy Remove BSS key params to WDI structure*/
4870 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4871 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4872 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4873 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4874 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 /* Store remove key pointer, as this will be used for response */
4876 /* store Params pass it to WDI */
4877 pWdaParams->pWdaContext = pWDA;
4878 pWdaParams->wdaMsgParam = removeBssKeyParams;
4879 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4881 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 if(IS_WDI_STATUS_FAILURE(status))
4883 {
4884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4885 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4887 vos_mem_free(pWdaParams) ;
4888 removeBssKeyParams->status = eSIR_FAILURE ;
4889 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4890 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 return CONVERT_WDI2VOS_STATUS(status) ;
4892}
Jeff Johnson295189b2012-06-20 16:38:30 -07004893/*
4894 * FUNCTION: WDA_SetBssKeyReqCallback
4895 * send SET BSS key RSP back to PE
4896 */
4897void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4898{
4899 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4900 tWDA_CbContext *pWDA;
4901 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004903 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 if(NULL == pWdaParams)
4905 {
4906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004907 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 VOS_ASSERT(0) ;
4909 return ;
4910 }
4911 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4912 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4914 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004915 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 return ;
4918}
Jeff Johnson295189b2012-06-20 16:38:30 -07004919/*
4920 * FUNCTION: WDA_ProcessSetStaKeyReq
4921 * Request to WDI for programming the STA key( key for Unicast frames
4922 * Encryption)
4923 */
4924VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4925 tSetStaKeyParams *setStaKeyParams )
4926{
4927 WDI_Status status = WDI_STATUS_SUCCESS ;
4928 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4929 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4930 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4931 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004934 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 if(NULL == wdiSetStaKeyParam)
4936 {
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 VOS_ASSERT(0);
4940 return VOS_STATUS_E_NOMEM;
4941 }
4942 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4943 if(NULL == pWdaParams)
4944 {
4945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004947 VOS_ASSERT(0);
4948 vos_mem_free(wdiSetStaKeyParam);
4949 return VOS_STATUS_E_NOMEM;
4950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 /* copy set STA key params to WDI structure */
4954 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4955 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4956 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4957 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 if(setStaKeyParams->encType != eSIR_ED_NONE)
4959 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004960 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4962 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4963 {
4964 WDA_GetWepKeysFromCfg( pWDA,
4965 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4966 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4967 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4968 }
4969 else
4970 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4972 keyIndex++)
4973 {
4974 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4975 setStaKeyParams->key[keyIndex].keyId;
4976 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4977 setStaKeyParams->key[keyIndex].unicast;
4978 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4979 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4981 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4982 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4983 setStaKeyParams->key[keyIndex].paeRole;
4984 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4985 setStaKeyParams->key[keyIndex].keyLength;
4986 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4987 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4988 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4989 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4990 {
4991 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4992 }
4993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4995 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 }
4997 }
4998 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4999 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005000 /* Store set key pointer, as this will be used for response */
5001 /* store Params pass it to WDI */
5002 pWdaParams->pWdaContext = pWDA;
5003 pWdaParams->wdaMsgParam = setStaKeyParams;
5004 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5006 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 if(IS_WDI_STATUS_FAILURE(status))
5008 {
5009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5010 "Failure in set STA Key Req WDI API, free all the memory " );
5011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5012 vos_mem_free(pWdaParams) ;
5013 setStaKeyParams->status = eSIR_FAILURE ;
5014 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 return CONVERT_WDI2VOS_STATUS(status) ;
5017}
Jeff Johnson295189b2012-06-20 16:38:30 -07005018/*
5019 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5020 * send SET Bcast STA key RSP back to PE
5021 */
5022void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5023{
5024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5025 tWDA_CbContext *pWDA;
5026 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005028 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005029 if(NULL == pWdaParams)
5030 {
5031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005032 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 VOS_ASSERT(0) ;
5034 return ;
5035 }
5036 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5037 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5039 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005040 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005041 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005042 return ;
5043}
5044
Jeff Johnson295189b2012-06-20 16:38:30 -07005045/*
5046 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5047 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5048 * Encryption)
5049 */
5050VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5051 tSetStaKeyParams *setStaKeyParams )
5052{
5053 WDI_Status status = WDI_STATUS_SUCCESS ;
5054 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5055 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5056 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5057 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005060 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 if(NULL == wdiSetStaKeyParam)
5062 {
5063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005065 VOS_ASSERT(0);
5066 return VOS_STATUS_E_NOMEM;
5067 }
5068 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5069 if(NULL == pWdaParams)
5070 {
5071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005072 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 VOS_ASSERT(0);
5074 vos_mem_free(wdiSetStaKeyParam);
5075 return VOS_STATUS_E_NOMEM;
5076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 /* copy set STA key params to WDI structure */
5080 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5081 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5082 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5083 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005084 if(setStaKeyParams->encType != eSIR_ED_NONE)
5085 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005086 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5087 keyIndex++)
5088 {
5089 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5090 setStaKeyParams->key[keyIndex].keyId;
5091 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5092 setStaKeyParams->key[keyIndex].unicast;
5093 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5094 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5096 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5097 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5098 setStaKeyParams->key[keyIndex].paeRole;
5099 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5100 setStaKeyParams->key[keyIndex].keyLength;
5101 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5102 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005104 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5105 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 }
5107 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005108 /* Store set key pointer, as this will be used for response */
5109 /* store Params pass it to WDI */
5110 pWdaParams->pWdaContext = pWDA;
5111 pWdaParams->wdaMsgParam = setStaKeyParams;
5112 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5114 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 if(IS_WDI_STATUS_FAILURE(status))
5116 {
5117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5118 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5120 vos_mem_free(pWdaParams) ;
5121 setStaKeyParams->status = eSIR_FAILURE ;
5122 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 return CONVERT_WDI2VOS_STATUS(status) ;
5125}
Jeff Johnson295189b2012-06-20 16:38:30 -07005126/*
5127 * FUNCTION: WDA_RemoveStaKeyReqCallback
5128 * send SET BSS key RSP back to PE
5129 */
5130void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5131{
5132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5133 tWDA_CbContext *pWDA;
5134 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005136 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 if(NULL == pWdaParams)
5138 {
5139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005140 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 VOS_ASSERT(0) ;
5142 return ;
5143 }
5144 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5145 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5147 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005148 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 return ;
5151}
5152
Jeff Johnson295189b2012-06-20 16:38:30 -07005153/*
5154 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5155 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5156 */
5157VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5158 tRemoveStaKeyParams *removeStaKeyParams )
5159{
5160 WDI_Status status = WDI_STATUS_SUCCESS ;
5161 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5162 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5163 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5164 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005166 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 if(NULL == wdiRemoveStaKeyParam)
5168 {
5169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005171 VOS_ASSERT(0);
5172 return VOS_STATUS_E_NOMEM;
5173 }
5174 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5175 if(NULL == pWdaParams)
5176 {
5177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005179 VOS_ASSERT(0);
5180 vos_mem_free(wdiRemoveStaKeyParam);
5181 return VOS_STATUS_E_NOMEM;
5182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 /* copy remove STA key params to WDI structure*/
5184 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5185 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5186 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5187 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5188 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005189 /* Store remove key pointer, as this will be used for response */
5190 /* store Params pass it to WDI */
5191 pWdaParams->pWdaContext = pWDA;
5192 pWdaParams->wdaMsgParam = removeStaKeyParams;
5193 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005194 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5195 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 if(IS_WDI_STATUS_FAILURE(status))
5197 {
5198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5199 "Failure in remove STA Key Req WDI API, free all the memory " );
5200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5201 vos_mem_free(pWdaParams) ;
5202 removeStaKeyParams->status = eSIR_FAILURE ;
5203 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005205 return CONVERT_WDI2VOS_STATUS(status) ;
5206}
Jeff Johnson295189b2012-06-20 16:38:30 -07005207/*
5208 * FUNCTION: WDA_IsHandleSetLinkStateReq
5209 * Update the WDA state and return the status to handle this message or not
5210 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005211WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5212 tWDA_CbContext *pWDA,
5213 tLinkStateParams *linkStateParams)
5214{
5215 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005216 switch(linkStateParams->state)
5217 {
5218 case eSIR_LINK_PREASSOC_STATE:
5219 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5220 /*
5221 * set the WDA state to PRE ASSOC
5222 * copy the BSSID into pWDA to use it in join request and return,
5223 * No need to handle these messages.
5224 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005225 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5226 {
5227 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005229 }
5230 else
5231 {
5232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005233 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005234 VOS_ASSERT(0);
5235 }
5236
5237 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5238 {
5239 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005241 }
5242 else
5243 {
5244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005245 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005246 VOS_ASSERT(0);
5247 }
5248
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5250 *channel and after ) so reset the WDA state to ready when the second
5251 * time UMAC issue the link state with PREASSOC
5252 */
5253 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5254 {
5255 /* RESET WDA state back to WDA_READY_STATE */
5256 pWDA->wdaState = WDA_READY_STATE;
5257 }
5258 else
5259 {
5260 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5261 }
5262 //populate linkState info in WDACbCtxt
5263 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005265 default:
5266 if(pWDA->wdaState != WDA_READY_STATE)
5267 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005268 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5269 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5270 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5271 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5272 *the ASSERT in WDA_Stop during module unload.*/
5273 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5274 {
5275 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005276 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005277 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005278 else
5279 {
5280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005281 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005282 status = WDA_IGNORE_SET_LINK_STATE;
5283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005284 }
5285 break;
5286 }
5287
5288 return status;
5289}
Jeff Johnson295189b2012-06-20 16:38:30 -07005290/*
5291 * FUNCTION: WDA_SetLinkStateCallback
5292 * call back function for set link state from WDI
5293 */
5294void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5295{
5296 tWDA_CbContext *pWDA;
5297 tLinkStateParams *linkStateParams;
5298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005300 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005301 if(NULL == pWdaParams)
5302 {
5303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005304 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 VOS_ASSERT(0) ;
5306 return ;
5307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 /*
5311 * In STA mode start the BA activity check timer after association
5312 * and in AP mode start BA activity check timer after BSS start */
5313 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5314 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005315 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5316 ((status == WDI_STATUS_SUCCESS) &&
5317 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 {
5319 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005321 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 /*
5323 * No respone required for WDA_SET_LINK_STATE so free the request
5324 * param here
5325 */
5326 if( pWdaParams != NULL )
5327 {
5328 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5329 {
5330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5331 }
5332 vos_mem_free(pWdaParams);
5333 }
5334 return ;
5335}
Jeff Johnson295189b2012-06-20 16:38:30 -07005336/*
5337 * FUNCTION: WDA_ProcessSetLinkState
5338 * Request to WDI to set the link status.
5339 */
5340VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5341 tLinkStateParams *linkStateParams)
5342{
5343 WDI_Status status = WDI_STATUS_SUCCESS ;
5344 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5345 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5346 sizeof(WDI_SetLinkReqParamsType)) ;
5347 tWDA_ReqParams *pWdaParams ;
5348 tpAniSirGlobal pMac;
5349 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5350
5351 if(NULL == pMac)
5352 {
5353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005354 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005356 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005357 return VOS_STATUS_E_FAILURE;
5358 }
5359
5360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005361 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 if(NULL == wdiSetLinkStateParam)
5363 {
5364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005366 VOS_ASSERT(0);
5367 return VOS_STATUS_E_NOMEM;
5368 }
5369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5370 if(NULL == pWdaParams)
5371 {
5372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 VOS_ASSERT(0);
5375 vos_mem_free(wdiSetLinkStateParam);
5376 return VOS_STATUS_E_NOMEM;
5377 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005378 if(WDA_IGNORE_SET_LINK_STATE ==
5379 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5380 {
5381 status = WDI_STATUS_E_FAILURE;
5382 }
5383 else
5384 {
5385 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5386 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5388 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5390 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 pWdaParams->pWdaContext = pWDA;
5392 /* Store remove key pointer, as this will be used for response */
5393 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 /* store Params pass it to WDI */
5395 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5396 /* Stop Timer only other than GO role and concurrent session */
5397 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005398 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5400 {
5401 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5404 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 if(IS_WDI_STATUS_FAILURE(status))
5406 {
5407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5408 "Failure in set link state Req WDI API, free all the memory " );
5409 }
5410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 if(IS_WDI_STATUS_FAILURE(status))
5412 {
5413 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005414 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 vos_mem_free(pWdaParams);
5416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 return CONVERT_WDI2VOS_STATUS(status) ;
5418}
Jeff Johnson295189b2012-06-20 16:38:30 -07005419/*
5420 * FUNCTION: WDA_GetStatsReqParamsCallback
5421 * send the response to PE with Stats received from WDI
5422 */
5423void WDA_GetStatsReqParamsCallback(
5424 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5425 void* pUserData)
5426{
5427 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5428 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5429
5430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005431 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 pGetPEStatsRspParams =
5433 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5434 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5435
5436 if(NULL == pGetPEStatsRspParams)
5437 {
5438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 VOS_ASSERT(0);
5441 return;
5442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5444 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5445 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5446 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005447
5448 //Fill the Session Id Properly in PE
5449 pGetPEStatsRspParams->sessionId = 0;
5450 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005451 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005452 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5453 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 vos_mem_copy( pGetPEStatsRspParams + 1,
5455 wdiGetStatsRsp + 1,
5456 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005457 /* send response to UMAC*/
5458 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5459
5460 return;
5461}
5462
Jeff Johnson295189b2012-06-20 16:38:30 -07005463/*
5464 * FUNCTION: WDA_ProcessGetStatsReq
5465 * Request to WDI to get the statistics
5466 */
5467VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5468 tAniGetPEStatsReq *pGetStatsParams)
5469{
5470 WDI_Status status = WDI_STATUS_SUCCESS ;
5471 WDI_GetStatsReqParamsType wdiGetStatsParam;
5472 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005474 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5476 pGetStatsParams->staId;
5477 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5478 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005479 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 status = WDI_GetStatsReq(&wdiGetStatsParam,
5481 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 if(IS_WDI_STATUS_FAILURE(status))
5483 {
5484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5485 "Failure in Get Stats Req WDI API, free all the memory " );
5486 pGetPEStatsRspParams =
5487 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5488 if(NULL == pGetPEStatsRspParams)
5489 {
5490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005491 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005493 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 return VOS_STATUS_E_NOMEM;
5495 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005496 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5497 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5498 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5499 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5500 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5501 (void *)pGetPEStatsRspParams, 0) ;
5502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 /* Free the request message */
5504 vos_mem_free(pGetStatsParams);
5505 return CONVERT_WDI2VOS_STATUS(status);
5506}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005507
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005508#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005509/*
5510 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5511 * send the response to PE with roam Rssi received from WDI
5512 */
5513void WDA_GetRoamRssiReqParamsCallback(
5514 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5515 void* pUserData)
5516{
5517 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5518 tWDA_CbContext *pWDA = NULL;
5519 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5520 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5522 "<------ %s " ,__func__);
5523 if(NULL == pWdaParams)
5524 {
5525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5526 "%s: pWdaParams received NULL", __func__);
5527 VOS_ASSERT(0) ;
5528 return ;
5529 }
5530 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5531 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5532
5533 if(NULL == pGetRoamRssiReqParams)
5534 {
5535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5536 "%s: pGetRoamRssiReqParams received NULL", __func__);
5537 VOS_ASSERT(0);
5538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5539 vos_mem_free(pWdaParams);
5540 return ;
5541 }
5542 pGetRoamRssiRspParams =
5543 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5544
5545 if(NULL == pGetRoamRssiRspParams)
5546 {
5547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5548 "%s: VOS MEM Alloc Failure", __func__);
5549 VOS_ASSERT(0);
5550 return;
5551 }
5552 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5553 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005554 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005555 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5556 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5557
5558 /* Assign get roam rssi req (backup) in to the response */
5559 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5560
5561 /* free WDI command buffer */
5562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5563 vos_mem_free(pWdaParams) ;
5564
5565 /* send response to UMAC*/
5566 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5567
5568 return;
5569}
5570
5571
5572
5573/*
5574 * FUNCTION: WDA_ProcessGetRoamRssiReq
5575 * Request to WDI to get the statistics
5576 */
5577VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5578 tAniGetRssiReq *pGetRoamRssiParams)
5579{
5580 WDI_Status status = WDI_STATUS_SUCCESS ;
5581 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5582 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5583 tWDA_ReqParams *pWdaParams = NULL;
5584
5585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5586 "------> %s " ,__func__);
5587 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5588 pGetRoamRssiParams->staId;
5589 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5590
5591 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5592 if(NULL == pWdaParams)
5593 {
5594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5595 "%s: VOS MEM Alloc Failure", __func__);
5596 VOS_ASSERT(0);
5597 return VOS_STATUS_E_NOMEM;
5598 }
5599
5600 /* Store Init Req pointer, as this will be used for response */
5601 pWdaParams->pWdaContext = pWDA;
5602
5603 /* Take Get roam Rssi req backup as it stores the callback to be called after
5604 receiving the response */
5605 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5606 pWdaParams->wdaWdiApiMsgParam = NULL;
5607
5608 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5609 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5610 if(IS_WDI_STATUS_FAILURE(status))
5611 {
5612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5613 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5614 pGetRoamRssiRspParams =
5615 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5616 if(NULL == pGetRoamRssiRspParams)
5617 {
5618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5619 "%s: VOS MEM Alloc Failure", __func__);
5620 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305621 vos_mem_free(pGetRoamRssiParams);
5622 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005623 return VOS_STATUS_E_NOMEM;
5624 }
5625 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5626 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5627 pGetRoamRssiRspParams->rssi = 0;
5628 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5629 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5630 (void *)pGetRoamRssiRspParams, 0) ;
5631 }
5632 return CONVERT_WDI2VOS_STATUS(status);
5633}
5634#endif
5635
5636
Jeff Johnson295189b2012-06-20 16:38:30 -07005637/*
5638 * FUNCTION: WDA_UpdateEDCAParamCallback
5639 * call back function for Update EDCA params from WDI
5640 */
5641void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5642{
5643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5644 tEdcaParams *pEdcaParams;
5645
5646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005647 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 if(NULL == pWdaParams)
5649 {
5650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005651 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 VOS_ASSERT(0) ;
5653 return ;
5654 }
5655 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5657 vos_mem_free(pWdaParams);
5658 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 return ;
5660}
Jeff Johnson295189b2012-06-20 16:38:30 -07005661/*
5662 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5663 * Request to WDI to Update the EDCA params.
5664 */
5665VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5666 tEdcaParams *pEdcaParams)
5667{
5668 WDI_Status status = WDI_STATUS_SUCCESS ;
5669 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5670 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5671 sizeof(WDI_UpdateEDCAParamsType)) ;
5672 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005674 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 if(NULL == wdiEdcaParam)
5676 {
5677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005678 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005679 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005680 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005681 return VOS_STATUS_E_NOMEM;
5682 }
5683 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5684 if(NULL == pWdaParams)
5685 {
5686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 VOS_ASSERT(0);
5689 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005690 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 return VOS_STATUS_E_NOMEM;
5692 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005693 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005694 /*
5695 Since firmware is not using highperformance flag, we have removed
5696 this flag from wdiEDCAInfo structure to match sizeof the structure
5697 between host and firmware.In future if we are planning to use
5698 highperformance flag then Please define this flag in wdiEDCAInfo
5699 structure, update it here and send it to firmware. i.e.
5700 Following is the original line which we removed as part of the fix
5701 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5702 pEdcaParams->highPerformance;
5703 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5705 &pEdcaParams->acbe);
5706 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5707 &pEdcaParams->acbk);
5708 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5709 &pEdcaParams->acvi);
5710 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5711 &pEdcaParams->acvo);
5712 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 pWdaParams->pWdaContext = pWDA;
5714 /* Store remove key pointer, as this will be used for response */
5715 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 /* store Params pass it to WDI */
5717 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5719 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 if(IS_WDI_STATUS_FAILURE(status))
5721 {
5722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5723 "Failure in Update EDCA Params WDI API, free all the memory " );
5724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5725 vos_mem_free(pWdaParams);
5726 vos_mem_free(pEdcaParams);
5727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 return CONVERT_WDI2VOS_STATUS(status) ;
5729}
Jeff Johnson295189b2012-06-20 16:38:30 -07005730/*
5731 * FUNCTION: WDA_AddBAReqCallback
5732 * send ADD BA RSP back to PE
5733 */
5734void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5735 void* pUserData)
5736{
5737 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5738 tWDA_CbContext *pWDA;
5739 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005741 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 if(NULL == pWdaParams)
5743 {
5744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005745 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 VOS_ASSERT(0) ;
5747 return ;
5748 }
5749 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5750 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5752 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005753 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005754 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 return ;
5756}
5757
Jeff Johnson295189b2012-06-20 16:38:30 -07005758/*
5759 * FUNCTION: WDA_ProcessAddBAReq
5760 * Request to WDI to Update the ADDBA REQ params.
5761 */
5762VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5763 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5764{
Jeff Johnson43971f52012-07-17 12:26:56 -07005765 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5767 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5768 sizeof(WDI_AddBAReqParamsType)) ;
5769 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005771 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 if(NULL == wdiAddBAReqParam)
5773 {
5774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005776 VOS_ASSERT(0);
5777 return VOS_STATUS_E_NOMEM;
5778 }
5779 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5780 if(NULL == pWdaParams)
5781 {
5782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005783 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005784 VOS_ASSERT(0);
5785 vos_mem_free(wdiAddBAReqParam);
5786 return VOS_STATUS_E_NOMEM;
5787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005788 do
5789 {
5790 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 wdiAddBaInfo->ucSTAIdx = staIdx ;
5792 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5793 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005794 } while(0) ;
5795 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005796 pWdaParams->pWdaContext = pWDA;
5797 /* store Params pass it to WDI */
5798 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5799 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005800 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5801 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005802
Jeff Johnson43971f52012-07-17 12:26:56 -07005803 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005804 {
5805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005806 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5807 status = CONVERT_WDI2VOS_STATUS(wstatus);
5808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005809 vos_mem_free(pWdaParams);
5810 pAddBAReqParams->status = eSIR_FAILURE;
5811 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5812 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005813 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005814}
Jeff Johnson295189b2012-06-20 16:38:30 -07005815/*
5816 * FUNCTION: WDA_AddBASessionReqCallback
5817 * send ADD BA SESSION RSP back to PE/(or TL)
5818 */
5819void WDA_AddBASessionReqCallback(
5820 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5821{
5822 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5823 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5824 tWDA_CbContext *pWDA;
5825 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005827 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005828 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 VOS_ASSERT(0) ;
5833 return ;
5834 }
5835 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5836 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005837 if( NULL == pAddBAReqParams )
5838 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005840 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005841 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5843 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 return ;
5845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5847 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005848 /*
5849 * if WDA in update TL state, update TL with BA session parama and send
5850 * another request to HAL(/WDI) (ADD_BA_REQ)
5851 */
5852
5853 if((VOS_STATUS_SUCCESS ==
5854 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5855 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5856 {
5857 /* Update TL with BA info received from HAL/WDI */
5858 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5859 wdiAddBaSession->usBaSessionID,
5860 wdiAddBaSession->ucSTAIdx,
5861 wdiAddBaSession->ucBaTID,
5862 wdiAddBaSession->ucBaBufferSize,
5863 wdiAddBaSession->ucWinSize,
5864 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005865 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5866 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5867 }
5868 else
5869 {
5870 pAddBAReqParams->status =
5871 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5872
5873 /* Setting Flag to indicate that Set BA is success */
5874 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5875 {
5876 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5877 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5878 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 /*Reset the WDA state to READY */
5883 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005884 return ;
5885}
5886
Jeff Johnson295189b2012-06-20 16:38:30 -07005887/*
5888 * FUNCTION: WDA_ProcessAddBASessionReq
5889 * Request to WDI to Update the ADDBA REQ params.
5890 */
5891VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5892 tAddBAParams *pAddBAReqParams)
5893{
5894 WDI_Status status = WDI_STATUS_SUCCESS ;
5895 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5896 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5897 sizeof(WDI_AddBASessionReqParamsType)) ;
5898 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005899 WLANTL_STAStateType tlSTAState = 0;
5900
Jeff Johnson295189b2012-06-20 16:38:30 -07005901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005902 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 if(NULL == wdiAddBASessionReqParam)
5904 {
5905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 VOS_ASSERT(0);
5908 return VOS_STATUS_E_NOMEM;
5909 }
5910 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5911 if(NULL == pWdaParams)
5912 {
5913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005915 VOS_ASSERT(0);
5916 vos_mem_free(wdiAddBASessionReqParam);
5917 return VOS_STATUS_E_NOMEM;
5918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 /*
5920 * Populate ADD BA parameters and pass these paarmeters to WDI.
5921 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5922 * the state to track if these is BA recipient case or BA initiator
5923 * case.
5924 */
5925 do
5926 {
5927 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5928 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5929 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5930 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5931 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5932 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5933 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005935 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5936 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5937 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5938 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5939 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 /* check the BA direction and update state accordingly */
5941 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5942 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5943 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5944
5945 }while(0) ;
5946 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 pWdaParams->pWdaContext = pWDA;
5948 /* Store ADD BA pointer, as this will be used for response */
5949 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5950 /* store Params pass it to WDI */
5951 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005952
5953 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5954 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5955 */
5956 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5957 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5958 {
5959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005960 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005961 status = WDI_STATUS_E_NOT_ALLOWED;
5962 pAddBAReqParams->status =
5963 CONVERT_WDI2SIR_STATUS(status) ;
5964 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5965 /*Reset the WDA state to READY */
5966 pWDA->wdaState = WDA_READY_STATE;
5967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5968 vos_mem_free(pWdaParams);
5969
5970 return CONVERT_WDI2VOS_STATUS(status) ;
5971 }
5972
Jeff Johnson295189b2012-06-20 16:38:30 -07005973 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5974 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005975 if(IS_WDI_STATUS_FAILURE(status))
5976 {
5977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005978 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005980 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005981 pAddBAReqParams->status =
5982 CONVERT_WDI2SIR_STATUS(status) ;
5983 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005984 /*Reset the WDA state to READY */
5985 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 vos_mem_free(pWdaParams);
5988 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005990}
Jeff Johnson295189b2012-06-20 16:38:30 -07005991/*
5992 * FUNCTION: WDA_DelBANotifyTL
5993 * send DEL BA IND to TL
5994 */
5995void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5996 tDelBAParams *pDelBAReqParams)
5997{
5998 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5999 //tSirMsgQ msg;
6000 vos_msg_t vosMsg;
6001 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 if(NULL == pDelBAInd)
6003 {
6004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 VOS_ASSERT(0) ;
6007 return;
6008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6010 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6011 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6012 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006013
Jeff Johnson295189b2012-06-20 16:38:30 -07006014
6015 vosMsg.type = WDA_DELETEBA_IND;
6016 vosMsg.bodyptr = pDelBAInd;
6017 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6018 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6019 {
6020 vosStatus = VOS_STATUS_E_BADMSG;
6021 }
6022}
Jeff Johnson295189b2012-06-20 16:38:30 -07006023/*
6024 * FUNCTION: WDA_DelBAReqCallback
6025 * send DEL BA RSP back to PE
6026 */
6027void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6028{
6029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6030 tWDA_CbContext *pWDA;
6031 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006033 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 if(NULL == pWdaParams)
6035 {
6036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006037 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 VOS_ASSERT(0) ;
6039 return ;
6040 }
6041 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6042 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 /* Notify TL about DEL BA in case of recipinet */
6044 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6045 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6046 {
6047 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6048 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006049 /*
6050 * No respone required for WDA_DELBA_IND so just free the request
6051 * param here
6052 */
6053 vos_mem_free(pDelBAReqParams);
6054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6055 vos_mem_free(pWdaParams);
6056 return ;
6057}
6058
Jeff Johnson295189b2012-06-20 16:38:30 -07006059/*
6060 * FUNCTION: WDA_ProcessDelBAReq
6061 * Request to WDI to Update the DELBA REQ params.
6062 */
6063VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6064 tDelBAParams *pDelBAReqParams)
6065{
6066 WDI_Status status = WDI_STATUS_SUCCESS ;
6067 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6068 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6069 sizeof(WDI_DelBAReqParamsType)) ;
6070 tWDA_ReqParams *pWdaParams ;
6071 tANI_U16 staIdx = 0;
6072 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006074 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 if(NULL == wdiDelBAReqParam)
6076 {
6077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 VOS_ASSERT(0);
6080 return VOS_STATUS_E_NOMEM;
6081 }
6082 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6083 if(NULL == pWdaParams)
6084 {
6085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006086 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 VOS_ASSERT(0);
6088 vos_mem_free(wdiDelBAReqParam);
6089 return VOS_STATUS_E_NOMEM;
6090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6092 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6093 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6094 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 pWdaParams->pWdaContext = pWDA;
6096 /* Store DEL BA pointer, as this will be used for response */
6097 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 /* store Params pass it to WDI */
6099 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6101 * maintained in WDA, so that WDA can retry for another BA session
6102 */
6103 staIdx = pDelBAReqParams->staIdx;
6104 tid = pDelBAReqParams->baTID;
6105 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006106 status = WDI_DelBAReq(wdiDelBAReqParam,
6107 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006108 if(IS_WDI_STATUS_FAILURE(status))
6109 {
6110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6111 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6113 vos_mem_free(pWdaParams->wdaMsgParam);
6114 vos_mem_free(pWdaParams);
6115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006116 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006117}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006118
6119/*
6120 * FUNCTION: WDA_UpdateChReqCallback
6121 *
6122 */
6123void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6124{
Siddharth Bhala006c122014-05-03 12:13:27 +05306125 tWDA_ReqParams *pWdaParams;
6126 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6127 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6128 WDI_UpdateChannelReqinfoType *pChanInfoType;
6129 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006130
6131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6132 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306133 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006134 {
6135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306136 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006137 VOS_ASSERT(0);
6138 return;
6139 }
6140
Siddharth Bhala006c122014-05-03 12:13:27 +05306141 pWdaParams = (tWDA_ReqParams *)pUserData;
6142 pwdiUpdateChReqParam =
6143 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6144 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6145 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6146 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006147 /*
6148 * currently there is no response message is expected between PE and
6149 * WDA, Failure return from WDI is a ASSERT condition
6150 */
6151 vos_mem_free(pChanInfoType);
6152 vos_mem_free(pChanList);
6153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6154 vos_mem_free(pWdaParams);
6155
6156 return;
6157}
6158
6159/*
6160 * FUNCTION: WDA_ProcessUpdateChannelList
6161 * Request to WDI to Update the ChannelList params.
6162 */
6163VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6164 tSirUpdateChanList *pChanList)
6165{
6166 WDI_Status status = WDI_STATUS_SUCCESS;
6167 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6168 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6169 WDI_UpdateChannelReqinfoType *pChanInfoType;
6170 tWDA_ReqParams *pWdaParams;
6171 wpt_uint8 i;
6172
6173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6174 "------> %s " ,__func__);
6175 if(NULL == pChanList)
6176 {
6177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6178 "%s: NULL pChanList", __func__);
6179 VOS_ASSERT(0);
6180 return VOS_STATUS_E_INVAL;
6181 }
6182
6183 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6184 {
6185 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6186 "Update channel list capability Not Supported");
6187 vos_mem_free(pChanList);
6188 return VOS_STATUS_E_INVAL;
6189 }
6190
6191 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6192 sizeof(WDI_UpdateChReqParamsType));
6193 if(NULL == pwdiUpdateChReqParam)
6194 {
6195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6196 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6197 __func__);
6198 VOS_ASSERT(0);
6199 vos_mem_free(pChanList);
6200 return VOS_STATUS_E_NOMEM;
6201 }
6202 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6203 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6204 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6205 pChanList->numChan);
6206 if(NULL == pChanInfoType)
6207 {
6208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6209 "%s: VOS MEM Alloc Failure", __func__);
6210 VOS_ASSERT(0);
6211 vos_mem_free(pChanList);
6212 vos_mem_free(pwdiUpdateChReqParam);
6213 return VOS_STATUS_E_NOMEM;
6214 }
6215 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6216 * pChanList->numChan);
6217 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6218
6219 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6220 if(NULL == pWdaParams)
6221 {
6222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6223 "%s: VOS MEM Alloc Failure", __func__);
6224 VOS_ASSERT(0);
6225 vos_mem_free(pChanList);
6226 vos_mem_free(pChanInfoType);
6227 vos_mem_free(pwdiUpdateChReqParam);
6228 return VOS_STATUS_E_NOMEM;
6229 }
6230 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6231
6232 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6233 {
6234 pChanInfoType->mhz =
6235 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6236
6237 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6238 pChanInfoType->band_center_freq2 = 0;
6239
6240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6241 "chan[%d] = %u", i, pChanInfoType->mhz);
6242 if (pChanList->chanParam[i].dfsSet)
6243 {
6244 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6246 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6247 pChanList->chanParam[i].dfsSet);
6248 }
6249
6250 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6251 {
6252 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6253 }
6254 else
6255 {
6256 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6257 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6258 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6259 }
6260
6261 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6262 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6263
6264 pChanInfoType++;
6265 }
6266
6267 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6268 pWdaParams->pWdaContext = pWDA;
6269 pWdaParams->wdaMsgParam = (void *)pChanList;
6270 /* store Params pass it to WDI */
6271 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6272 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6273 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6274 if(IS_WDI_STATUS_FAILURE(status))
6275 {
6276 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6277 "Failure in Update Channel REQ Params WDI API, free all the memory");
6278 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6279 vos_mem_free(pwdiUpdateChReqParam);
6280 vos_mem_free(pWdaParams->wdaMsgParam);
6281 vos_mem_free(pWdaParams);
6282 }
6283 return CONVERT_WDI2VOS_STATUS(status);
6284}
6285
Jeff Johnson295189b2012-06-20 16:38:30 -07006286/*
6287 * FUNCTION: WDA_AddTSReqCallback
6288 * send ADD TS RSP back to PE
6289 */
6290void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6291{
6292 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6293 tWDA_CbContext *pWDA;
6294 tAddTsParams *pAddTsReqParams;
6295
6296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006297 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 if(NULL == pWdaParams)
6299 {
6300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006301 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 VOS_ASSERT(0) ;
6303 return ;
6304 }
6305 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6306 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6308 vos_mem_free(pWdaParams);
6309
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006310 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 return ;
6313}
6314
Jeff Johnson295189b2012-06-20 16:38:30 -07006315/*
6316 * FUNCTION: WDA_ProcessAddTSReq
6317 * Request to WDI to Update the ADD TS REQ params.
6318 */
6319VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6320 tAddTsParams *pAddTsReqParams)
6321{
6322 WDI_Status status = WDI_STATUS_SUCCESS ;
6323 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6324 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6325 sizeof(WDI_AddTSReqParamsType)) ;
6326 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006328 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 if(NULL == wdiAddTSReqParam)
6330 {
6331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 VOS_ASSERT(0);
6334 return VOS_STATUS_E_NOMEM;
6335 }
6336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6337 if(NULL == pWdaParams)
6338 {
6339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006341 VOS_ASSERT(0);
6342 vos_mem_free(wdiAddTSReqParam);
6343 return VOS_STATUS_E_NOMEM;
6344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006345 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6346 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 //TS IE
6348 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6349 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6350 pAddTsReqParams->tspec.length;
6351
6352 //TS IE : TS INFO : TRAFFIC
6353 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6354 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6355 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6356 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6357 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6358 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6359 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6360 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6361 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6362 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6363 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6364 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6365 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6366 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6367 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6368 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6369
6370 //TS IE : TS INFO : SCHEDULE
6371 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6372 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6373 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6374 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006375 //TS IE
6376 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6377 pAddTsReqParams->tspec.nomMsduSz;
6378 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6379 pAddTsReqParams->tspec.maxMsduSz;
6380 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6381 pAddTsReqParams->tspec.minSvcInterval;
6382 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6383 pAddTsReqParams->tspec.maxSvcInterval;
6384 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6385 pAddTsReqParams->tspec.inactInterval;
6386 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6387 pAddTsReqParams->tspec.suspendInterval;
6388 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6389 pAddTsReqParams->tspec.svcStartTime;
6390 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6391 pAddTsReqParams->tspec.minDataRate;
6392 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6393 pAddTsReqParams->tspec.meanDataRate;
6394 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6395 pAddTsReqParams->tspec.peakDataRate;
6396 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6397 pAddTsReqParams->tspec.maxBurstSz;
6398 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6399 pAddTsReqParams->tspec.delayBound;
6400 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6401 pAddTsReqParams->tspec.minPhyRate;
6402 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6403 pAddTsReqParams->tspec.surplusBw;
6404 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6405 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 /* TODO: tAddTsParams doesn't have the following fields */
6407#if 0
6408 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6409 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6410 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6411 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6412#endif
6413 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6414
6415 pWdaParams->pWdaContext = pWDA;
6416 /* Store ADD TS pointer, as this will be used for response */
6417 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 /* store Params pass it to WDI */
6419 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 status = WDI_AddTSReq(wdiAddTSReqParam,
6421 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 if(IS_WDI_STATUS_FAILURE(status))
6423 {
6424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6425 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6427 vos_mem_free(pWdaParams);
6428 pAddTsReqParams->status = eSIR_FAILURE ;
6429 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006431 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006432}
6433
Jeff Johnson295189b2012-06-20 16:38:30 -07006434/*
6435 * FUNCTION: WDA_DelTSReqCallback
6436 * send DEL TS RSP back to PE
6437 */
6438void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6439{
6440 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006442 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6444 vos_mem_free(pWdaParams->wdaMsgParam) ;
6445 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 /*
6447 * No respone required for WDA_DEL_TS_REQ so just free the request
6448 * param here
6449 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006450 return ;
6451}
6452
Jeff Johnson295189b2012-06-20 16:38:30 -07006453/*
6454 * FUNCTION: WDA_ProcessDelTSReq
6455 * Request to WDI to Update the DELTS REQ params.
6456 */
6457VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6458 tDelTsParams *pDelTSReqParams)
6459{
6460 WDI_Status status = WDI_STATUS_SUCCESS ;
6461 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6462 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6463 sizeof(WDI_DelTSReqParamsType)) ;
6464 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006466 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006467 if(NULL == wdiDelTSReqParam)
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 return VOS_STATUS_E_NOMEM;
6473 }
6474 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6475 if(NULL == pWdaParams)
6476 {
6477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006478 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 VOS_ASSERT(0);
6480 vos_mem_free(wdiDelTSReqParam);
6481 return VOS_STATUS_E_NOMEM;
6482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6484 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6485 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6486 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6487 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 pWdaParams->pWdaContext = pWDA;
6489 /* Store DEL TS pointer, as this will be used for response */
6490 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006491 /* store Params pass it to WDI */
6492 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006493 status = WDI_DelTSReq(wdiDelTSReqParam,
6494 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006495 if(IS_WDI_STATUS_FAILURE(status))
6496 {
6497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6498 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6500 vos_mem_free(pWdaParams->wdaMsgParam);
6501 vos_mem_free(pWdaParams);
6502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006503 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006504}
Jeff Johnson295189b2012-06-20 16:38:30 -07006505/*
6506 * FUNCTION: WDA_UpdateBeaconParamsCallback
6507 * Free the memory. No need to send any response to PE in this case
6508 */
6509void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6510{
6511 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006513 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 if(NULL == pWdaParams)
6515 {
6516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006517 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 VOS_ASSERT(0) ;
6519 return ;
6520 }
6521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6522 vos_mem_free(pWdaParams->wdaMsgParam) ;
6523 vos_mem_free(pWdaParams);
6524 /*
6525 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6526 * param here
6527 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006528 return ;
6529}
Jeff Johnson295189b2012-06-20 16:38:30 -07006530/*
6531 * FUNCTION: WDA_ProcessUpdateBeaconParams
6532 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6533 */
6534VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6535 tUpdateBeaconParams *pUpdateBeaconParams)
6536{
6537 WDI_Status status = WDI_STATUS_SUCCESS ;
6538 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6539 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6540 sizeof(WDI_UpdateBeaconParamsType)) ;
6541 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006543 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006544 if(NULL == wdiUpdateBeaconParams)
6545 {
6546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006548 VOS_ASSERT(0);
6549 return VOS_STATUS_E_NOMEM;
6550 }
6551 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6552 if(NULL == pWdaParams)
6553 {
6554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006555 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 VOS_ASSERT(0);
6557 vos_mem_free(wdiUpdateBeaconParams);
6558 return VOS_STATUS_E_NOMEM;
6559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6561 pUpdateBeaconParams->bssIdx;
6562 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6563 pUpdateBeaconParams->fShortPreamble;
6564 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6565 pUpdateBeaconParams->fShortSlotTime;
6566 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6567 pUpdateBeaconParams->beaconInterval;
6568 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6569 pUpdateBeaconParams->llaCoexist;
6570 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6571 pUpdateBeaconParams->llbCoexist;
6572 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6573 pUpdateBeaconParams->llgCoexist;
6574 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6575 pUpdateBeaconParams->ht20MhzCoexist;
6576 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6577 pUpdateBeaconParams->llnNonGFCoexist;
6578 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6579 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6580 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6581 pUpdateBeaconParams->fRIFSMode;
6582 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6583 pUpdateBeaconParams->paramChangeBitmap;
6584 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6585
6586 pWdaParams->pWdaContext = pWDA;
6587 /* Store UpdateBeacon Req pointer, as this will be used for response */
6588 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 /* store Params pass it to WDI */
6590 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6592 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6593 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 if(IS_WDI_STATUS_FAILURE(status))
6595 {
6596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6597 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6599 vos_mem_free(pWdaParams->wdaMsgParam);
6600 vos_mem_free(pWdaParams);
6601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006603}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006604#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006605/*
6606 * FUNCTION: WDA_TSMStatsReqCallback
6607 * send TSM Stats RSP back to PE
6608 */
6609void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6610{
6611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6612 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006613 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6614 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006615
6616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006617 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 if(NULL == pWdaParams)
6619 {
6620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006621 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006622 VOS_ASSERT(0) ;
6623 return ;
6624 }
6625 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006626 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6627
6628 if(NULL == pGetTsmStatsReqParams)
6629 {
6630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6631 "%s: pGetTsmStatsReqParams received NULL", __func__);
6632 VOS_ASSERT(0);
6633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6634 vos_mem_free(pWdaParams);
6635 return;
6636 }
6637
6638 pTsmRspParams =
6639 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006640 if( NULL == pTsmRspParams )
6641 {
6642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006643 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006644 VOS_ASSERT( 0 );
6645 return ;
6646 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006647 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6648 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6649 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6650
Jeff Johnson295189b2012-06-20 16:38:30 -07006651 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6652 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6653 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6654 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6655 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6656 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6657 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6658 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6659 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6660 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006661
6662 /* Assign get tsm stats req req (backup) in to the response */
6663 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6664
6665 /* free WDI command buffer */
6666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6667 vos_mem_free(pWdaParams);
6668
Jeff Johnson295189b2012-06-20 16:38:30 -07006669 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 return ;
6671}
6672
6673
Jeff Johnson295189b2012-06-20 16:38:30 -07006674/*
6675 * FUNCTION: WDA_ProcessTsmStatsReq
6676 * Request to WDI to get the TSM Stats params.
6677 */
6678VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006679 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006680{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006681 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006683 tWDA_ReqParams *pWdaParams = NULL;
6684 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6685
Jeff Johnson295189b2012-06-20 16:38:30 -07006686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006687 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6689 sizeof(WDI_TSMStatsReqParamsType));
6690 if(NULL == wdiTSMReqParam)
6691 {
6692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006693 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006694 VOS_ASSERT(0);
6695 return VOS_STATUS_E_NOMEM;
6696 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006697 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6698 if(NULL == pWdaParams)
6699 {
6700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006701 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006702 VOS_ASSERT(0);
6703 vos_mem_free(wdiTSMReqParam);
6704 return VOS_STATUS_E_NOMEM;
6705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006706 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6707 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6708 pTsmStats->bssId,
6709 sizeof(wpt_macAddr));
6710 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6711
6712 pWdaParams->pWdaContext = pWDA;
6713 /* Store TSM Stats pointer, as this will be used for response */
6714 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006715 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 status = WDI_TSMStatsReq(wdiTSMReqParam,
6717 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006718 if(IS_WDI_STATUS_FAILURE(status))
6719 {
6720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6721 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006722 vos_mem_free(pWdaParams);
6723
6724 pGetTsmStatsRspParams =
6725 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6726 if(NULL == pGetTsmStatsRspParams)
6727 {
6728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6729 "%s: VOS MEM Alloc Failure", __func__);
6730 VOS_ASSERT(0);
6731 vos_mem_free(pTsmStats);
6732 return VOS_STATUS_E_NOMEM;
6733 }
6734 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6735 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6736 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6737
6738 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 return CONVERT_WDI2VOS_STATUS(status) ;
6741}
6742#endif
6743/*
6744 * FUNCTION: WDA_SendBeaconParamsCallback
6745 * No need to send any response to PE in this case
6746 */
6747void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6748{
6749
Jeff Johnson295189b2012-06-20 16:38:30 -07006750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006751 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 return ;
6753}
Jeff Johnson295189b2012-06-20 16:38:30 -07006754/*
6755 * FUNCTION: WDA_ProcessSendBeacon
6756 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6757 * start beacon trasmission
6758 */
6759VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6760 tSendbeaconParams *pSendbeaconParams)
6761{
6762 WDI_Status status = WDI_STATUS_SUCCESS ;
6763 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006765 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6767 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6768 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6769 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6771 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306772 /* p2pIeOffset should be atleast greater than timIeOffset */
6773 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6774 (pSendbeaconParams->p2pIeOffset <
6775 pSendbeaconParams->timIeOffset))
6776 {
6777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6778 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6779 VOS_ASSERT( 0 );
6780 return WDI_STATUS_E_FAILURE;
6781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6783 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 /* Copy the beacon template to local buffer */
6785 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6786 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6787 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6788
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6790 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 if(IS_WDI_STATUS_FAILURE(status))
6792 {
6793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6794 "Failure in SEND BEACON REQ Params WDI API" );
6795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 vos_mem_free(pSendbeaconParams);
6797 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006798}
Jeff Johnson295189b2012-06-20 16:38:30 -07006799/*
6800 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6801 * No need to send any response to PE in this case
6802 */
6803void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6804{
Jeff Johnson295189b2012-06-20 16:38:30 -07006805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006806 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 return ;
6808}
6809
Jeff Johnson295189b2012-06-20 16:38:30 -07006810/*
6811 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6812 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6813 * send probe response
6814 */
6815VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6816 tSendProbeRespParams *pSendProbeRspParams)
6817{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006818 WDI_Status status = WDI_STATUS_SUCCESS;
6819 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6820 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006822 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006823
6824 if (!wdiSendProbeRspParam)
6825 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6826
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006828 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006830 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 /* Copy the Probe Response template to local buffer */
6833 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006834 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 pSendProbeRspParams->pProbeRespTemplate,
6836 pSendProbeRspParams->probeRespTemplateLen);
6837 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006838 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6840 WDI_PROBE_REQ_BITMAP_IE_LEN);
6841
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006842 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006843
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006844 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006846 if(IS_WDI_STATUS_FAILURE(status))
6847 {
6848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6849 "Failure in SEND Probe RSP Params WDI API" );
6850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006852 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006854}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006855#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07006856/*
6857 * FUNCTION: WDA_SetMaxTxPowerCallBack
6858 * send the response to PE with power value received from WDI
6859 */
6860void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6861 void* pUserData)
6862{
6863 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6864 tWDA_CbContext *pWDA = NULL;
6865 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6866
6867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006868 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 if(NULL == pWdaParams)
6870 {
6871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006872 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 VOS_ASSERT(0) ;
6874 return ;
6875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006876 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6877 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006878 if( NULL == pMaxTxPowerParams )
6879 {
6880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006881 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006882 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006883 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6884 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 return ;
6886 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006887
Jeff Johnson295189b2012-06-20 16:38:30 -07006888
6889 /*need to free memory for the pointers used in the
6890 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6892 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006894
Jeff Johnson295189b2012-06-20 16:38:30 -07006895
6896 /* send response to UMAC*/
6897 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6898
6899 return;
6900}
Jeff Johnson295189b2012-06-20 16:38:30 -07006901/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006902 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 * Request to WDI to send set Max Tx Power Request
6904 */
6905 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6906 tMaxTxPowerParams *MaxTxPowerParams)
6907{
6908 WDI_Status status = WDI_STATUS_SUCCESS;
6909 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6910 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006911
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006913 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006914
Jeff Johnson295189b2012-06-20 16:38:30 -07006915 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6916 sizeof(WDI_SetMaxTxPowerParamsType));
6917 if(NULL == wdiSetMaxTxPowerParams)
6918 {
6919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006921 VOS_ASSERT(0);
6922 return VOS_STATUS_E_NOMEM;
6923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6925 if(NULL == pWdaParams)
6926 {
6927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 vos_mem_free(wdiSetMaxTxPowerParams);
6930 VOS_ASSERT(0);
6931 return VOS_STATUS_E_NOMEM;
6932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 /* Copy.Max.Tx.Power Params to WDI structure */
6934 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6935 MaxTxPowerParams->bssId,
6936 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6938 MaxTxPowerParams->selfStaMacAddr,
6939 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006940 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6941 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 pWdaParams->pWdaContext = pWDA;
6944 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 /* store Params pass it to WDI */
6946 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6948 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006949 if(IS_WDI_STATUS_FAILURE(status))
6950 {
6951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6952 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6953 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6954 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006955 /* send response to UMAC*/
6956 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 }
6958 return CONVERT_WDI2VOS_STATUS(status);
6959
6960}
Jeff Johnson295189b2012-06-20 16:38:30 -07006961#endif
schang86c22c42013-03-13 18:41:24 -07006962
6963/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006964 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6965 * send the response to PE with power value received from WDI
6966 */
6967void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6968 *pwdiSetMaxTxPowerPerBandRsp,
6969 void* pUserData)
6970{
6971 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6972 tWDA_CbContext *pWDA = NULL;
6973 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6974
6975 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6976 "<------ %s ", __func__);
6977 if (NULL == pWdaParams)
6978 {
6979 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6980 "%s: pWdaParams received NULL", __func__);
6981 VOS_ASSERT(0);
6982 return ;
6983 }
6984 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6985 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6986 if ( NULL == pMxTxPwrPerBandParams )
6987 {
6988 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6989 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6990 VOS_ASSERT(0);
6991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6992 vos_mem_free(pWdaParams);
6993 return;
6994 }
6995
6996 /*need to free memory for the pointers used in the
6997 WDA Process.Set Max Tx Power Req function*/
6998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6999 vos_mem_free(pWdaParams);
7000 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7001
7002 /* send response to UMAC*/
7003 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7004 pMxTxPwrPerBandParams, 0);
7005
7006 return;
7007}
7008
7009/*
7010 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7011 * Request to WDI to send set Max Tx Power Per band Request
7012 */
7013 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7014 tMaxTxPowerPerBandParams
7015 *MaxTxPowerPerBandParams)
7016{
7017 WDI_Status status = WDI_STATUS_SUCCESS;
7018 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7019 tWDA_ReqParams *pWdaParams = NULL;
7020
7021 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7022 "------> %s ", __func__);
7023
7024 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7025 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7026
7027 if (NULL == wdiSetMxTxPwrPerBandParams)
7028 {
7029 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7030 "%s: VOS MEM Alloc Failure", __func__);
7031 VOS_ASSERT(0);
7032 return VOS_STATUS_E_NOMEM;
7033 }
7034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7035 if (NULL == pWdaParams)
7036 {
7037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7038 "%s: VOS MEM Alloc Failure", __func__);
7039 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7040 VOS_ASSERT(0);
7041 return VOS_STATUS_E_NOMEM;
7042 }
7043 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7044 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7045 MaxTxPowerPerBandParams->bandInfo;
7046 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7047 MaxTxPowerPerBandParams->power;
7048 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7049 pWdaParams->pWdaContext = pWDA;
7050 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7051 /* store Params pass it to WDI */
7052 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7053 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7054 WDA_SetMaxTxPowerPerBandCallBack,
7055 pWdaParams);
7056 if (IS_WDI_STATUS_FAILURE(status))
7057 {
7058 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7059 "Failure in SET MAX TX Power REQ Params WDI API,"
7060 " free all the memory");
7061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7062 vos_mem_free(pWdaParams);
7063 /* send response to UMAC*/
7064 WDA_SendMsg(pWDA,
7065 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7066 MaxTxPowerPerBandParams, 0);
7067 }
7068 return CONVERT_WDI2VOS_STATUS(status);
7069}
7070
7071/*
schang86c22c42013-03-13 18:41:24 -07007072 * FUNCTION: WDA_SetTxPowerCallBack
7073 * send the response to PE with power value received from WDI
7074 */
7075void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7076 void* pUserData)
7077{
7078 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7079 tWDA_CbContext *pWDA = NULL;
7080 tSirSetTxPowerReq *pTxPowerParams = NULL;
7081
7082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7083 "<------ %s ", __func__);
7084 if(NULL == pWdaParams)
7085 {
7086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7087 "%s: pWdaParams received NULL", __func__);
7088 VOS_ASSERT(0) ;
7089 return ;
7090 }
7091 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7092 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7093 if(NULL == pTxPowerParams)
7094 {
7095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7096 "%s: pTxPowerParams received NULL " ,__func__);
7097 VOS_ASSERT(0);
7098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7099 vos_mem_free(pWdaParams);
7100 return ;
7101 }
7102
7103 /*need to free memory for the pointers used in the
7104 WDA Process.Set Max Tx Power Req function*/
7105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7106 vos_mem_free(pWdaParams);
7107
7108 /* send response to UMAC*/
7109 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7110 return;
7111}
7112
7113/*
7114 * FUNCTION: WDA_ProcessSetTxPowerReq
7115 * Request to WDI to send set Tx Power Request
7116 */
7117 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7118 tSirSetTxPowerReq *txPowerParams)
7119{
7120 WDI_Status status = WDI_STATUS_SUCCESS;
7121 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7122 tWDA_ReqParams *pWdaParams = NULL;
7123
7124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7125 "------> %s ", __func__);
7126
7127 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7128 sizeof(WDI_SetTxPowerParamsType));
7129 if(NULL == wdiSetTxPowerParams)
7130 {
7131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7132 "%s: VOS MEM Alloc Failure", __func__);
7133 VOS_ASSERT(0);
7134 return VOS_STATUS_E_NOMEM;
7135 }
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,
7140 "%s: VOS MEM Alloc Failure", __func__);
7141 vos_mem_free(wdiSetTxPowerParams);
7142 VOS_ASSERT(0);
7143 return VOS_STATUS_E_NOMEM;
7144 }
7145 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7146 txPowerParams->bssIdx;
7147 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7148 txPowerParams->mwPower;
7149 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7150 pWdaParams->pWdaContext = pWDA;
7151 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7152 /* store Params pass it to WDI */
7153 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7154 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7155 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7156 if(IS_WDI_STATUS_FAILURE(status))
7157 {
7158 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7159 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7161 vos_mem_free(pWdaParams);
7162 /* send response to UMAC*/
7163 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7164 }
7165 return CONVERT_WDI2VOS_STATUS(status);
7166}
7167
Jeff Johnson295189b2012-06-20 16:38:30 -07007168/*
7169 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7170 * Free the memory. No need to send any response to PE in this case
7171 */
7172void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7173{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7175
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007177 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007178
7179 if(NULL == pWdaParams)
7180 {
7181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007182 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007183 VOS_ASSERT(0) ;
7184 return ;
7185 }
7186
7187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7188 vos_mem_free(pWdaParams->wdaMsgParam) ;
7189 vos_mem_free(pWdaParams);
7190
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 /*
7192 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7193 * so just free the request param here
7194 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 return ;
7196}
7197
Jeff Johnson295189b2012-06-20 16:38:30 -07007198/*
7199 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7200 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7201 */
7202VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7203 tP2pPsParams *pP2pPsConfigParams)
7204{
7205 WDI_Status status = WDI_STATUS_SUCCESS ;
7206 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7207 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7208 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007209 tWDA_ReqParams *pWdaParams = NULL;
7210
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007212 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007213 if(NULL == wdiSetP2PGONOAReqParam)
7214 {
7215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 VOS_ASSERT(0);
7218 return VOS_STATUS_E_NOMEM;
7219 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007220
7221 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7222 if(NULL == pWdaParams)
7223 {
7224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007225 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007226 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007227 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007228 VOS_ASSERT(0);
7229 return VOS_STATUS_E_NOMEM;
7230 }
7231
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7233 pP2pPsConfigParams->opp_ps;
7234 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7235 pP2pPsConfigParams->ctWindow;
7236 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7237 pP2pPsConfigParams->count;
7238 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7239 pP2pPsConfigParams->duration;
7240 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7241 pP2pPsConfigParams->interval;
7242 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7243 pP2pPsConfigParams->single_noa_duration;
7244 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7245 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007246
Jeff Johnson295189b2012-06-20 16:38:30 -07007247 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7248 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007249 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7250
Jeff Johnson295189b2012-06-20 16:38:30 -07007251 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007252 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7253 pWdaParams->pWdaContext = pWDA;
7254
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007256 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7257
Jeff Johnson295189b2012-06-20 16:38:30 -07007258 if(IS_WDI_STATUS_FAILURE(status))
7259 {
7260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7261 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7263 vos_mem_free(pWdaParams->wdaMsgParam);
7264 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 return CONVERT_WDI2VOS_STATUS(status);
7267
Jeff Johnson295189b2012-06-20 16:38:30 -07007268}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307269
7270#ifdef FEATURE_WLAN_TDLS
7271/*
7272 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7273 * Free the memory. No need to send any response to PE in this case
7274 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307275void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7276 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307277{
7278 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7279 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307280 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307281
7282
7283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7284 "<------ %s " ,__func__);
7285 if(NULL == pWdaParams)
7286 {
7287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7288 "%s: pWdaParams received NULL", __func__);
7289 VOS_ASSERT(0) ;
7290 return ;
7291 }
7292 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7293
7294 if(NULL == pWdaParams)
7295 {
7296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7297 "%s: pWdaParams received NULL", __func__);
7298 VOS_ASSERT(0) ;
7299 return ;
7300 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307301 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7302 if( NULL == pTdlsLinkEstablishParams )
7303 {
7304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7305 "%s: pTdlsLinkEstablishParams "
7306 "received NULL " ,__func__);
7307 VOS_ASSERT(0);
7308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7309 vos_mem_free(pWdaParams);
7310 return ;
7311 }
7312 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7313 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307315 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307316 /* send response to UMAC*/
7317 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7318
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307319 return ;
7320}
7321
7322VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7323 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7324{
7325 WDI_Status status = WDI_STATUS_SUCCESS ;
7326 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7327 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7328 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7329 tWDA_ReqParams *pWdaParams = NULL;
7330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7331 "------> %s " ,__func__);
7332 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7333 {
7334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7335 "%s: VOS MEM Alloc Failure", __func__);
7336 VOS_ASSERT(0);
7337 return VOS_STATUS_E_NOMEM;
7338 }
7339 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7340 if(NULL == pWdaParams)
7341 {
7342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7343 "%s: VOS MEM Alloc Failure", __func__);
7344 vos_mem_free(pTdlsLinkEstablishParams);
7345 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7346 VOS_ASSERT(0);
7347 return VOS_STATUS_E_NOMEM;
7348 }
7349 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307350 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307351 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307352 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307353 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307354 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307355 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307356 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307357 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307358 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307359 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7360 pTdlsLinkEstablishParams->isOffChannelSupported;
7361
7362 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7363 pTdlsLinkEstablishParams->validChannels,
7364 pTdlsLinkEstablishParams->validChannelsLen);
7365
7366 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7367 pTdlsLinkEstablishParams->validChannelsLen;
7368
7369 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7370 pTdlsLinkEstablishParams->validOperClasses,
7371 pTdlsLinkEstablishParams->validOperClassesLen);
7372 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7373 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307374
7375 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7376 /* Store msg pointer from PE, as this will be used for response */
7377 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7378 /* store Params pass it to WDI */
7379 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7380 pWdaParams->pWdaContext = pWDA;
7381
7382 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7383 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7384 WDA_SetTDLSLinkEstablishReqParamsCallback,
7385 pWdaParams);
7386 if(IS_WDI_STATUS_FAILURE(status))
7387 {
7388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7389 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7390 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7391 vos_mem_free(pWdaParams->wdaMsgParam);
7392 vos_mem_free(pWdaParams);
7393 }
7394 return CONVERT_WDI2VOS_STATUS(status);
7395}
7396#endif
7397
7398
Jeff Johnson295189b2012-06-20 16:38:30 -07007399#ifdef WLAN_FEATURE_VOWIFI_11R
7400/*
7401 * FUNCTION: WDA_AggrAddTSReqCallback
7402 * send ADD AGGREGATED TS RSP back to PE
7403 */
7404void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7405{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007406 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7407 tWDA_CbContext *pWDA;
7408 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007411 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007412 if(NULL == pWdaParams)
7413 {
7414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007415 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007416 VOS_ASSERT(0) ;
7417 return ;
7418 }
7419
7420 pWDA = pWdaParams->pWdaContext;
7421 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007422
7423 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7424 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007425 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007428
7429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7430 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007431 return ;
7432}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007433/*
7434 * FUNCTION: WDA_ProcessAddTSReq
7435 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7436 */
7437VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7438 tAggrAddTsParams *pAggrAddTsReqParams)
7439{
7440 WDI_Status status = WDI_STATUS_SUCCESS ;
7441 int i;
7442 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007443 tWDA_ReqParams *pWdaParams = NULL;
7444
7445
Jeff Johnson295189b2012-06-20 16:38:30 -07007446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007447 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007448 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7449 sizeof(WDI_AggrAddTSReqParamsType)) ;
7450 if(NULL == wdiAggrAddTSReqParam)
7451 {
7452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007453 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 VOS_ASSERT(0);
7455 return VOS_STATUS_E_NOMEM;
7456 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007457
7458
7459 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7460 if(NULL == pWdaParams)
7461 {
7462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007463 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007464 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007465 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007466 VOS_ASSERT(0);
7467 return VOS_STATUS_E_NOMEM;
7468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7470 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7471 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7473 {
7474 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7475 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7476 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7478 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7479 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7480 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7481 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7482 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7483 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7484 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7485 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7486 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7487 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7488 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7489 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7490 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7491 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7492 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7494 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007495 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7496 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7497 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7498 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7499 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7500 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7501 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7502 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7503 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7504 pAggrAddTsReqParams->tspec[i].inactInterval;
7505 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7506 pAggrAddTsReqParams->tspec[i].suspendInterval;
7507 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7508 pAggrAddTsReqParams->tspec[i].svcStartTime;
7509 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7510 pAggrAddTsReqParams->tspec[i].minDataRate;
7511 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7512 pAggrAddTsReqParams->tspec[i].meanDataRate;
7513 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7514 pAggrAddTsReqParams->tspec[i].peakDataRate;
7515 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7516 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7517 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7518 pAggrAddTsReqParams->tspec[i].delayBound;
7519 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7520 pAggrAddTsReqParams->tspec[i].minPhyRate;
7521 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7522 pAggrAddTsReqParams->tspec[i].surplusBw;
7523 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7524 pAggrAddTsReqParams->tspec[i].mediumTime;
7525 }
7526
7527 /* TODO: tAggrAddTsParams doesn't have the following fields */
7528#if 0
7529 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7530 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7531 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7532 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7533#endif
7534 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7535
7536 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007537 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007539 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7540
7541 pWdaParams->pWdaContext = pWDA;
7542
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007544 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7545
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 if(IS_WDI_STATUS_FAILURE(status))
7547 {
7548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7549 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7551 vos_mem_free(pWdaParams);
7552
7553 /* send the failure response back to PE*/
7554 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7555 {
7556 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7557 }
7558
7559 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7560 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 return CONVERT_WDI2VOS_STATUS(status) ;
7563}
7564#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007565/*
Mihir Shetea4306052014-03-25 00:02:54 +05307566 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007567 * send Enter IMPS RSP back to PE
7568 */
Mihir Shetea4306052014-03-25 00:02:54 +05307569void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007570{
Mihir Shetea4306052014-03-25 00:02:54 +05307571 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7572 tWDA_CbContext *pWDA;
7573
Jeff Johnson295189b2012-06-20 16:38:30 -07007574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307575 "<------ %s status=%d" ,__func__,status);
7576 if(NULL == pWdaParams)
7577 {
7578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7579 "%s: pWdaParams received NULL", __func__);
7580 VOS_ASSERT(0);
7581 return;
7582 }
7583
7584 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7585
7586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7587 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007588 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 return ;
7590}
Mihir Shetea4306052014-03-25 00:02:54 +05307591
7592
7593/*
7594 * FUNCTION: WDA_EnterImpsReqCallback
7595 * Free memory and send Enter IMPS RSP back to PE.
7596 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7597 */
7598void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7599{
7600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7601 tWDA_CbContext *pWDA;
7602
7603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7604 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7605
7606 if(NULL == pWdaParams)
7607 {
7608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7609 "%s: pWdaParams received NULL", __func__);
7610 VOS_ASSERT(0);
7611 return;
7612 }
7613
7614 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7615
7616 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7617 {
7618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7619 vos_mem_free(pWdaParams);
7620 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7621 CONVERT_WDI2SIR_STATUS(wdiStatus));
7622 }
7623
7624 return;
7625}
Jeff Johnson295189b2012-06-20 16:38:30 -07007626/*
7627 * FUNCTION: WDA_ProcessEnterImpsReq
7628 * Request to WDI to Enter IMPS power state.
7629 */
7630VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7631{
7632 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307633 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7634 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007636 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307637
7638
7639 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7640 if (NULL == wdiEnterImpsReqParams)
7641 {
7642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7643 "%s: VOS MEM Alloc Failure", __func__);
7644 VOS_ASSERT(0);
7645 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7646 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7647 return VOS_STATUS_E_NOMEM;
7648 }
7649
7650 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7651 if (NULL == pWdaParams)
7652 {
7653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7654 "%s: VOS MEM Alloc Failure", __func__);
7655 VOS_ASSERT(0);
7656 vos_mem_free(wdiEnterImpsReqParams);
7657 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7658 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7659 return VOS_STATUS_E_NOMEM;
7660 }
7661
7662 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7663 wdiEnterImpsReqParams->pUserData = pWdaParams;
7664
7665 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7666 pWdaParams->wdaMsgParam = NULL;
7667 pWdaParams->pWdaContext = pWDA;
7668
7669 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7670 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7671 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 if(IS_WDI_STATUS_FAILURE(status))
7673 {
7674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7675 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05307676 vos_mem_free(wdiEnterImpsReqParams);
7677 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007678 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007680 return CONVERT_WDI2VOS_STATUS(status) ;
7681}
Jeff Johnson295189b2012-06-20 16:38:30 -07007682/*
7683 * FUNCTION: WDA_ExitImpsReqCallback
7684 * send Exit IMPS RSP back to PE
7685 */
7686void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7687{
7688 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007690 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007691 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007692 return ;
7693}
Jeff Johnson295189b2012-06-20 16:38:30 -07007694/*
7695 * FUNCTION: WDA_ProcessExitImpsReq
7696 * Request to WDI to Exit IMPS power state.
7697 */
7698VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7699{
7700 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007702 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007704 if(IS_WDI_STATUS_FAILURE(status))
7705 {
7706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7707 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007708 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007709 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 return CONVERT_WDI2VOS_STATUS(status) ;
7711}
Jeff Johnson295189b2012-06-20 16:38:30 -07007712/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007713 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007714 * send Enter BMPS RSP back to PE
7715 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007716void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007717{
7718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7719 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007720 tEnterBmpsParams *pEnterBmpsRspParams;
7721
Jeff Johnson295189b2012-06-20 16:38:30 -07007722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007723 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 VOS_ASSERT(0) ;
7729 return ;
7730 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007731
7732 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7733 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7734
7735 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007736 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007737
7738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007739 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007740 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7741
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 return ;
7743}
Jeff Johnson295189b2012-06-20 16:38:30 -07007744/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007745 * FUNCTION: WDA_EnterBmpsReqCallback
7746 * Free memory and send Enter BMPS RSP back to PE.
7747 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7748 */
7749void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7750{
7751 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7752 tWDA_CbContext *pWDA;
7753 tEnterBmpsParams *pEnterBmpsRspParams;
7754
7755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7756 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7757
7758 if(NULL == pWdaParams)
7759 {
7760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7761 "%s: pWdaParams received NULL", __func__);
7762 VOS_ASSERT(0);
7763 return;
7764 }
7765
7766 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7767 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7768 pEnterBmpsRspParams->status = wdiStatus;
7769
7770 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7771 {
7772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7773 vos_mem_free(pWdaParams);
7774 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7775 }
7776
7777 return;
7778}
7779/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 * FUNCTION: WDA_ProcessEnterBmpsReq
7781 * Request to WDI to Enter BMPS power state.
7782 */
7783VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7784 tEnterBmpsParams *pEnterBmpsReqParams)
7785{
7786 WDI_Status status = WDI_STATUS_SUCCESS;
7787 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7788 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007790 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7792 {
7793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007794 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 VOS_ASSERT(0);
7796 return VOS_STATUS_E_FAILURE;
7797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7799 if (NULL == wdiEnterBmpsReqParams)
7800 {
7801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007804 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7805 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 return VOS_STATUS_E_NOMEM;
7807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7809 if (NULL == pWdaParams)
7810 {
7811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007812 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 VOS_ASSERT(0);
7814 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007815 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7816 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 return VOS_STATUS_E_NOMEM;
7818 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7820 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7821 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7822 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007823 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07007824 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7825 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7826 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007827 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7828 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007829
Jeff Johnson295189b2012-06-20 16:38:30 -07007830 /* Store param pointer as passed in by caller */
7831 /* store Params pass it to WDI */
7832 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007833 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007836 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 if (IS_WDI_STATUS_FAILURE(status))
7838 {
7839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7840 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007842 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007844 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 return CONVERT_WDI2VOS_STATUS(status);
7847}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007848
7849
7850static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7851 WDI_Status wdiStatus,
7852 tExitBmpsParams *pExitBmpsReqParams)
7853{
7854 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7855
7856 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7857}
7858
7859
Jeff Johnson295189b2012-06-20 16:38:30 -07007860/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007861 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007862 * send Exit BMPS RSP back to PE
7863 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007864void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007865{
7866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7867 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007868 tExitBmpsParams *pExitBmpsRspParams;
7869
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007871 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007872 if(NULL == pWdaParams)
7873 {
7874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007875 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007876 VOS_ASSERT(0) ;
7877 return ;
7878 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007879
7880 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7881 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7882
7883 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007884 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007885
Jeff Johnson295189b2012-06-20 16:38:30 -07007886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7887 vos_mem_free(pWdaParams) ;
7888
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007889 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 return ;
7891}
Jeff Johnson295189b2012-06-20 16:38:30 -07007892/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007893 * FUNCTION: WDA_ExitBmpsReqCallback
7894 * Free memory and send Exit BMPS RSP back to PE.
7895 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7896 */
7897void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7898{
7899 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7900 tWDA_CbContext *pWDA;
7901 tExitBmpsParams *pExitBmpsRspParams;
7902
7903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7904 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7905
7906 if(NULL == pWdaParams)
7907 {
7908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7909 "%s: pWdaParams received NULL", __func__);
7910 VOS_ASSERT(0);
7911 return;
7912 }
7913
7914 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7915 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7916 pExitBmpsRspParams->status = wdiStatus;
7917
7918 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7919 {
7920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7921 vos_mem_free(pWdaParams);
7922 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7923 }
7924
7925 return;
7926}
7927/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 * FUNCTION: WDA_ProcessExitBmpsReq
7929 * Request to WDI to Exit BMPS power state.
7930 */
7931VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7932 tExitBmpsParams *pExitBmpsReqParams)
7933{
7934 WDI_Status status = WDI_STATUS_SUCCESS ;
7935 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7936 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7937 sizeof(WDI_ExitBmpsReqParamsType)) ;
7938 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007940 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 if(NULL == wdiExitBmpsReqParams)
7942 {
7943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007946 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 return VOS_STATUS_E_NOMEM;
7948 }
7949 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7950 if(NULL == pWdaParams)
7951 {
7952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007953 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 VOS_ASSERT(0);
7955 vos_mem_free(wdiExitBmpsReqParams);
7956 return VOS_STATUS_E_NOMEM;
7957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007958 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007959
7960 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7961
Yue Ma7f44bbe2013-04-12 11:47:39 -07007962 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7963 wdiExitBmpsReqParams->pUserData = pWdaParams;
7964
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 /* Store param pointer as passed in by caller */
7966 /* store Params pass it to WDI */
7967 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7968 pWdaParams->pWdaContext = pWDA;
7969 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007971 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007972 if(IS_WDI_STATUS_FAILURE(status))
7973 {
7974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7975 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7977 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007978 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007980 return CONVERT_WDI2VOS_STATUS(status) ;
7981}
Jeff Johnson295189b2012-06-20 16:38:30 -07007982/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007983 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 * send Enter UAPSD RSP back to PE
7985 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007986void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007987{
7988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7989 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007990 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007992 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007993 if(NULL == pWdaParams)
7994 {
7995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007996 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007997 VOS_ASSERT(0) ;
7998 return ;
7999 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008000
8001 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8002 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8003
8004 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008005 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008006
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8008 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008009 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008010 return ;
8011}
Jeff Johnson295189b2012-06-20 16:38:30 -07008012/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008013 * FUNCTION: WDA_EnterUapsdReqCallback
8014 * Free memory and send Enter UAPSD RSP back to PE.
8015 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8016 */
8017void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8018{
8019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8020 tWDA_CbContext *pWDA;
8021 tUapsdParams *pEnterUapsdRsqParams;
8022
8023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8024 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8025
8026 if(NULL == pWdaParams)
8027 {
8028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8029 "%s: pWdaParams received NULL", __func__);
8030 VOS_ASSERT(0);
8031 return;
8032 }
8033
8034 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8035 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8036 pEnterUapsdRsqParams->status = wdiStatus;
8037
8038 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8039 {
8040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8041 vos_mem_free(pWdaParams);
8042 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8043 }
8044
8045 return;
8046}
8047/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 * FUNCTION: WDA_ProcessEnterUapsdReq
8049 * Request to WDI to Enter UAPSD power state.
8050 */
8051VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8052 tUapsdParams *pEnterUapsdReqParams)
8053{
8054 WDI_Status status = WDI_STATUS_SUCCESS ;
8055 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8056 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8057 sizeof(WDI_EnterUapsdReqParamsType)) ;
8058 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008060 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 if(NULL == wdiEnterUapsdReqParams)
8062 {
8063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 VOS_ASSERT(0);
8066 return VOS_STATUS_E_NOMEM;
8067 }
8068 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8069 if(NULL == pWdaParams)
8070 {
8071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008072 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 VOS_ASSERT(0);
8074 vos_mem_free(wdiEnterUapsdReqParams);
8075 return VOS_STATUS_E_NOMEM;
8076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008077 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8078 pEnterUapsdReqParams->beDeliveryEnabled;
8079 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8080 pEnterUapsdReqParams->beTriggerEnabled;
8081 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8082 pEnterUapsdReqParams->bkDeliveryEnabled;
8083 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8084 pEnterUapsdReqParams->bkTriggerEnabled;
8085 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8086 pEnterUapsdReqParams->viDeliveryEnabled;
8087 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8088 pEnterUapsdReqParams->viTriggerEnabled;
8089 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8090 pEnterUapsdReqParams->voDeliveryEnabled;
8091 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8092 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008093 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008094
Yue Ma7f44bbe2013-04-12 11:47:39 -07008095 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8096 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097
Jeff Johnson295189b2012-06-20 16:38:30 -07008098 /* Store param pointer as passed in by caller */
8099 /* store Params pass it to WDI */
8100 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8101 pWdaParams->pWdaContext = pWDA;
8102 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008104 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008105 if(IS_WDI_STATUS_FAILURE(status))
8106 {
8107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8108 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8109 vos_mem_free(pWdaParams->wdaMsgParam) ;
8110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8111 vos_mem_free(pWdaParams) ;
8112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008113 return CONVERT_WDI2VOS_STATUS(status) ;
8114}
Jeff Johnson295189b2012-06-20 16:38:30 -07008115/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008116 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 * send Exit UAPSD RSP back to PE
8118 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008119void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008120{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008121
8122 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8123 tWDA_CbContext *pWDA;
8124 tExitUapsdParams *pExitUapsdRspParams;
8125
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008127 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008128 if(NULL == pWdaParams)
8129 {
8130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008131 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008132 VOS_ASSERT(0);
8133 return;
8134 }
8135
8136 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8137 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8138
8139 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008140 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008141
8142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8143 vos_mem_free(pWdaParams) ;
8144
8145 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 return ;
8147}
Jeff Johnson295189b2012-06-20 16:38:30 -07008148/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008149 * FUNCTION: WDA_ExitUapsdReqCallback
8150 * Free memory and send Exit UAPSD RSP back to PE.
8151 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8152 */
8153void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8154{
8155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8156 tWDA_CbContext *pWDA;
8157 tExitUapsdParams *pExitUapsdRspParams;
8158
8159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8160 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8161
8162 if(NULL == pWdaParams)
8163 {
8164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8165 "%s: pWdaParams received NULL", __func__);
8166 VOS_ASSERT(0);
8167 return;
8168 }
8169
8170 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8171 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8172 pExitUapsdRspParams->status = wdiStatus;
8173
8174 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8175 {
8176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8177 vos_mem_free(pWdaParams);
8178 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8179 }
8180
8181 return;
8182}
8183/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008184 * FUNCTION: WDA_ProcessExitUapsdReq
8185 * Request to WDI to Exit UAPSD power state.
8186 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008187VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8188 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008189{
8190 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008191 tWDA_ReqParams *pWdaParams ;
8192 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8193 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8194 sizeof(WDI_ExitUapsdReqParamsType)) ;
8195
Jeff Johnson295189b2012-06-20 16:38:30 -07008196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008197 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008198
8199 if(NULL == wdiExitUapsdReqParams)
8200 {
8201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008202 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008203 VOS_ASSERT(0);
8204 return VOS_STATUS_E_NOMEM;
8205 }
8206 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8207 if(NULL == pWdaParams)
8208 {
8209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008210 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008211 VOS_ASSERT(0);
8212 vos_mem_free(wdiExitUapsdReqParams);
8213 return VOS_STATUS_E_NOMEM;
8214 }
8215
8216 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008217 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8218 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008219
8220 /* Store param pointer as passed in by caller */
8221 /* store Params pass it to WDI */
8222 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8223 pWdaParams->pWdaContext = pWDA;
8224 pWdaParams->wdaMsgParam = pExitUapsdParams;
8225
Yue Ma7f44bbe2013-04-12 11:47:39 -07008226 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008227 if(IS_WDI_STATUS_FAILURE(status))
8228 {
8229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8230 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008231 vos_mem_free(pWdaParams->wdaMsgParam) ;
8232 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8233 vos_mem_free(pWdaParams) ;
8234
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008236 return CONVERT_WDI2VOS_STATUS(status) ;
8237}
8238
Jeff Johnson295189b2012-06-20 16:38:30 -07008239/*
8240 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8241 *
8242 */
8243void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8244{
8245 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008247 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008248 if(NULL == pWdaParams)
8249 {
8250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008251 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008252 VOS_ASSERT(0) ;
8253 return ;
8254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 if( pWdaParams != NULL )
8256 {
8257 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8258 {
8259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8260 }
8261 if( pWdaParams->wdaMsgParam != NULL )
8262 {
8263 vos_mem_free(pWdaParams->wdaMsgParam) ;
8264 }
8265 vos_mem_free(pWdaParams) ;
8266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008267 return ;
8268}
Jeff Johnson295189b2012-06-20 16:38:30 -07008269/*
8270 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8271 * Request to WDI to set the power save params at start.
8272 */
8273VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8274 tSirPowerSaveCfg *pPowerSaveCfg)
8275{
8276 WDI_Status status = WDI_STATUS_SUCCESS ;
8277 tHalCfg *tlvStruct = NULL ;
8278 tANI_U8 *tlvStructStart = NULL ;
8279 v_PVOID_t *configParam;
8280 tANI_U32 configParamSize;
8281 tANI_U32 *configDataValue;
8282 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8283 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008285 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8287 {
8288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008289 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008290 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008291 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 return VOS_STATUS_E_FAILURE;
8293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008294 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8295 if (NULL == wdiPowerSaveCfg)
8296 {
8297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008299 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008300 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 return VOS_STATUS_E_NOMEM;
8302 }
8303 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8304 if(NULL == pWdaParams)
8305 {
8306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 VOS_ASSERT(0);
8309 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008310 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008311 return VOS_STATUS_E_NOMEM;
8312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8314 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 if(NULL == configParam)
8316 {
8317 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008318 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008319 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 vos_mem_free(pWdaParams);
8321 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008322 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 return VOS_STATUS_E_NOMEM;
8324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008325 vos_mem_set(configParam, configParamSize, 0);
8326 wdiPowerSaveCfg->pConfigBuffer = configParam;
8327 tlvStruct = (tHalCfg *)configParam;
8328 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8330 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8331 tlvStruct->length = sizeof(tANI_U32);
8332 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8333 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8335 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8337 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8338 tlvStruct->length = sizeof(tANI_U32);
8339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8340 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8342 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8344 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8345 tlvStruct->length = sizeof(tANI_U32);
8346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8347 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8349 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008350 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8351 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8352 tlvStruct->length = sizeof(tANI_U32);
8353 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8354 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8356 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008357 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8358 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8359 tlvStruct->length = sizeof(tANI_U32);
8360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8361 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008362 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8363 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8365 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8366 tlvStruct->length = sizeof(tANI_U32);
8367 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8368 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8370 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8372 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8373 tlvStruct->length = sizeof(tANI_U32);
8374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8375 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8377 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8379 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8380 tlvStruct->length = sizeof(tANI_U32);
8381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8382 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8383 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8384 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8386 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8387 tlvStruct->length = sizeof(tANI_U32);
8388 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8389 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8390 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8391 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8393 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8394 tlvStruct->length = sizeof(tANI_U32);
8395 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8396 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8398 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8400 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8401 tlvStruct->length = sizeof(tANI_U32);
8402 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8403 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8405 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 /* store Params pass it to WDI */
8409 pWdaParams->wdaMsgParam = configParam;
8410 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8411 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8413 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 if(IS_WDI_STATUS_FAILURE(status))
8415 {
8416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8417 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8418 vos_mem_free(pWdaParams->wdaMsgParam);
8419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8420 vos_mem_free(pWdaParams);
8421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 return CONVERT_WDI2VOS_STATUS(status);
8424}
Jeff Johnson295189b2012-06-20 16:38:30 -07008425/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008426 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008427 *
8428 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008429void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008430{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8432
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008434 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008435
8436 if(NULL == pWdaParams)
8437 {
8438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8439 "%s: pWdaParams received NULL", __func__);
8440 VOS_ASSERT(0);
8441 return ;
8442 }
8443
8444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 vos_mem_free(pWdaParams);
8446
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 return ;
8448}
Jeff Johnson295189b2012-06-20 16:38:30 -07008449/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008450 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8451 * Free memory.
8452 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8453 */
8454void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8455{
8456 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8457
8458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8459 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8460
8461 if(NULL == pWdaParams)
8462 {
8463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8464 "%s: pWdaParams received NULL", __func__);
8465 VOS_ASSERT(0);
8466 return;
8467 }
8468
8469 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8470 {
8471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8472 vos_mem_free(pWdaParams);
8473 }
8474
8475 return;
8476}
8477/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008478 * FUNCTION: WDA_SetUapsdAcParamsReq
8479 * Request to WDI to set the UAPSD params for an ac (sta mode).
8480 */
8481VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8482 tUapsdInfo *pUapsdInfo)
8483{
8484 WDI_Status status = WDI_STATUS_SUCCESS;
8485 tWDA_CbContext *pWDA = NULL ;
8486 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8487 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8488 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8489 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008491 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 if(NULL == wdiUapsdParams)
8493 {
8494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008496 VOS_ASSERT(0);
8497 return VOS_STATUS_E_NOMEM;
8498 }
8499 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8500 if(NULL == pWdaParams)
8501 {
8502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008503 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 VOS_ASSERT(0);
8505 vos_mem_free(wdiUapsdParams);
8506 return VOS_STATUS_E_NOMEM;
8507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008508 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8509 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8510 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8511 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8512 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8513 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008514 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8515 wdiUapsdParams->pUserData = pWdaParams;
8516
Jeff Johnson295189b2012-06-20 16:38:30 -07008517 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008518 pWdaParams->pWdaContext = pWDA;
8519 /* Store param pointer as passed in by caller */
8520 pWdaParams->wdaMsgParam = pUapsdInfo;
8521 /* store Params pass it to WDI */
8522 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008523 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008524 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008526 if(IS_WDI_STATUS_FAILURE(status))
8527 {
8528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8529 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8531 vos_mem_free(pWdaParams);
8532 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8534 return VOS_STATUS_SUCCESS;
8535 else
8536 return VOS_STATUS_E_FAILURE;
8537
Jeff Johnson295189b2012-06-20 16:38:30 -07008538}
8539/*
8540 * FUNCTION: WDA_ClearUapsdAcParamsReq
8541 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8542 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8543 * and again enter the UPASD with the modified params. Hence the disable
8544 * function was kept empty.
8545 *
8546 */
8547VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8548{
8549 /* do nothing */
8550 return VOS_STATUS_SUCCESS;
8551}
Jeff Johnson295189b2012-06-20 16:38:30 -07008552/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008553 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008554 *
8555 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008556void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008557{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8559
Jeff Johnson295189b2012-06-20 16:38:30 -07008560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008561 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008562
8563 if(NULL == pWdaParams)
8564 {
8565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008566 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008567 VOS_ASSERT(0) ;
8568 return ;
8569 }
8570
8571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8572 vos_mem_free(pWdaParams->wdaMsgParam);
8573 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008574
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 //print a msg, nothing else to do
8576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008577 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008578 return ;
8579}
Jeff Johnson295189b2012-06-20 16:38:30 -07008580/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008581 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8582 * Free memory.
8583 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8584 */
8585void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8586{
8587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8588
8589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8590 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8591
8592 if(NULL == pWdaParams)
8593 {
8594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8595 "%s: pWdaParams received NULL", __func__);
8596 VOS_ASSERT(0);
8597 return;
8598 }
8599
8600 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8601 {
8602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8603 vos_mem_free(pWdaParams->wdaMsgParam);
8604 vos_mem_free(pWdaParams);
8605 }
8606
8607 return;
8608}
8609/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 * FUNCTION: WDA_UpdateUapsdParamsReq
8611 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8612 */
8613VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8614 tUpdateUapsdParams* pUpdateUapsdInfo)
8615{
8616 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008617 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008618 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8619 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8620 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008621 tWDA_ReqParams *pWdaParams = NULL;
8622
Jeff Johnson295189b2012-06-20 16:38:30 -07008623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008624 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008625 if(NULL == wdiUpdateUapsdParams)
8626 {
8627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008628 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 VOS_ASSERT(0);
8630 return VOS_STATUS_E_NOMEM;
8631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8633 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8634 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008635 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8636 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008637
8638 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8639 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008640 {
8641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008643 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008644 vos_mem_free(pUpdateUapsdInfo);
8645 vos_mem_free(wdiUpdateUapsdParams);
8646 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008649 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008651 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8652 pWdaParams->pWdaContext = pWDA;
8653
Jeff Johnson43971f52012-07-17 12:26:56 -07008654 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008655 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008656 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008657
Jeff Johnson43971f52012-07-17 12:26:56 -07008658 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 {
8660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8661 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008662 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8664 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008665 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008667 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008668}
Jeff Johnson295189b2012-06-20 16:38:30 -07008669/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008670 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 *
8672 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008673void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008674{
8675 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008677 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008678 if(WDI_STATUS_SUCCESS != wdiStatus)
8679 {
8680 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008681 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008683 if(NULL == pWdaParams)
8684 {
8685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008686 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008687 VOS_ASSERT(0) ;
8688 return ;
8689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8691 vos_mem_free(pWdaParams->wdaMsgParam);
8692 vos_mem_free(pWdaParams);
8693 return ;
8694}
Jeff Johnson295189b2012-06-20 16:38:30 -07008695/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008696 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8697 * Free memory.
8698 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8699 */
8700void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8701{
8702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8703
8704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8705 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8706
8707 if(NULL == pWdaParams)
8708 {
8709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8710 "%s: pWdaParams received NULL", __func__);
8711 VOS_ASSERT(0);
8712 return;
8713 }
8714
8715 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8716 {
8717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8718 vos_mem_free(pWdaParams->wdaMsgParam);
8719 vos_mem_free(pWdaParams);
8720 }
8721
8722 return;
8723}
8724/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008725 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8726 *
8727 */
8728VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8729 tSirWlanSetRxpFilters *pWlanSuspendParam)
8730{
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008732 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05308733 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05308735 /* Sanity Check
8736 * This is very unlikely and add assert to collect more info next time */
8737 if(NULL == pWlanSuspendParam)
8738 {
8739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8740 "%s: pWlanSuspendParam received NULL", __func__);
8741 VOS_ASSERT(0) ;
8742 return VOS_STATUS_E_FAULT;
8743 }
8744 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8745 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008747 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 if(NULL == wdiRxpFilterParams)
8749 {
8750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008751 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008752 VOS_ASSERT(0);
8753 vos_mem_free(pWlanSuspendParam);
8754 return VOS_STATUS_E_NOMEM;
8755 }
8756 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8757 if(NULL == pWdaParams)
8758 {
8759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 VOS_ASSERT(0);
8762 vos_mem_free(wdiRxpFilterParams);
8763 vos_mem_free(pWlanSuspendParam);
8764 return VOS_STATUS_E_NOMEM;
8765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008766 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8767 pWlanSuspendParam->setMcstBcstFilter;
8768 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8769 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8770
Yue Ma7f44bbe2013-04-12 11:47:39 -07008771 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8772 wdiRxpFilterParams->pUserData = pWdaParams;
8773
Jeff Johnson295189b2012-06-20 16:38:30 -07008774 pWdaParams->pWdaContext = pWDA;
8775 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8776 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008777 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008778 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008780 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 {
8782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8783 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008784 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8786 vos_mem_free(pWdaParams->wdaMsgParam);
8787 vos_mem_free(pWdaParams);
8788 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008789 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008790}
Jeff Johnson295189b2012-06-20 16:38:30 -07008791/*
8792 * FUNCTION: WDA_WdiIndicationCallback
8793 *
8794 */
8795void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8796 void* pUserData)
8797{
8798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008799 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008800}
Jeff Johnson295189b2012-06-20 16:38:30 -07008801/*
8802 * FUNCTION: WDA_ProcessWlanSuspendInd
8803 *
8804 */
8805VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8806 tSirWlanSuspendParam *pWlanSuspendParam)
8807{
8808 WDI_Status wdiStatus;
8809 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008811 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8813 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8814 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8815 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008817 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8818 if(WDI_STATUS_PENDING == wdiStatus)
8819 {
8820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008821 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008822 }
8823 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8824 {
8825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008826 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008827 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 vos_mem_free(pWlanSuspendParam);
8829 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8830}
8831
Chet Lanctot186b5732013-03-18 10:26:30 -07008832#ifdef WLAN_FEATURE_11W
8833/*
8834 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8835 *
8836 */
8837VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8838 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8839{
8840 WDI_Status wdiStatus;
8841 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8843 "------> %s ", __func__);
8844
8845 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8846 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8847 sizeof(tSirMacAddr));
8848
8849 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8850 wdiExclUnencryptParams.pUserData = pWDA;
8851
8852 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8853 if(WDI_STATUS_PENDING == wdiStatus)
8854 {
8855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8856 "Pending received for %s:%d ", __func__, __LINE__ );
8857 }
8858 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8859 {
8860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8861 "Failure in %s:%d ", __func__, __LINE__ );
8862 }
8863 vos_mem_free(pExclUnencryptParam);
8864 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8865}
8866#endif
8867
Jeff Johnson295189b2012-06-20 16:38:30 -07008868/*
8869 * FUNCTION: WDA_ProcessWlanResumeCallback
8870 *
8871 */
8872void WDA_ProcessWlanResumeCallback(
8873 WDI_SuspendResumeRspParamsType *resumeRspParams,
8874 void* pUserData)
8875{
8876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008878 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008879 if(NULL == pWdaParams)
8880 {
8881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008882 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008883 VOS_ASSERT(0) ;
8884 return ;
8885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008886 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8887 {
8888 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008889 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8892 vos_mem_free(pWdaParams->wdaMsgParam);
8893 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 return ;
8895}
Jeff Johnson295189b2012-06-20 16:38:30 -07008896/*
8897 * FUNCTION: WDA_ProcessWlanResumeReq
8898 *
8899 */
8900VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8901 tSirWlanResumeParam *pWlanResumeParam)
8902{
8903 WDI_Status wdiStatus;
8904 WDI_ResumeParamsType *wdiResumeParams =
8905 (WDI_ResumeParamsType *)vos_mem_malloc(
8906 sizeof(WDI_ResumeParamsType) ) ;
8907 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008909 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008910 if(NULL == wdiResumeParams)
8911 {
8912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 VOS_ASSERT(0);
8915 return VOS_STATUS_E_NOMEM;
8916 }
8917 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8918 if(NULL == pWdaParams)
8919 {
8920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 VOS_ASSERT(0);
8923 vos_mem_free(wdiResumeParams);
8924 return VOS_STATUS_E_NOMEM;
8925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008926 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8927 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008929 wdiResumeParams->wdiReqStatusCB = NULL;
8930 pWdaParams->wdaMsgParam = pWlanResumeParam;
8931 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8932 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8934 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8935 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008936 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8937 {
8938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8939 "Failure in Host Resume REQ WDI API, free all the memory " );
8940 VOS_ASSERT(0);
8941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8942 vos_mem_free(pWdaParams->wdaMsgParam);
8943 vos_mem_free(pWdaParams);
8944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008945 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8946}
8947
Jeff Johnson295189b2012-06-20 16:38:30 -07008948/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008949 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008950 *
8951 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008952void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008953{
8954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008956 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008957 if(NULL == pWdaParams)
8958 {
8959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008960 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 VOS_ASSERT(0) ;
8962 return ;
8963 }
8964
8965 vos_mem_free(pWdaParams->wdaMsgParam) ;
8966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8967 vos_mem_free(pWdaParams) ;
8968 /*
8969 * No respone required for SetBeaconFilter req so just free the request
8970 * param here
8971 */
8972
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 return ;
8974}
Jeff Johnson295189b2012-06-20 16:38:30 -07008975/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008976 * FUNCTION: WDA_SetBeaconFilterReqCallback
8977 * Free memory.
8978 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8979 */
8980void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8981{
8982 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8983
8984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8985 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8986
8987 if(NULL == pWdaParams)
8988 {
8989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8990 "%s: pWdaParams received NULL", __func__);
8991 VOS_ASSERT(0);
8992 return;
8993 }
8994
8995 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8996 {
8997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8998 vos_mem_free(pWdaParams->wdaMsgParam);
8999 vos_mem_free(pWdaParams);
9000 }
9001
9002 return;
9003}
9004/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 * FUNCTION: WDA_SetBeaconFilterReq
9006 * Request to WDI to send the beacon filtering related information.
9007 */
9008VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9009 tBeaconFilterMsg* pBeaconFilterInfo)
9010{
9011 WDI_Status status = WDI_STATUS_SUCCESS;
9012 tANI_U8 *dstPtr, *srcPtr;
9013 tANI_U8 filterLength;
9014 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9015 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9016 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9017 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009020 if(NULL == wdiBeaconFilterInfo)
9021 {
9022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009024 VOS_ASSERT(0);
9025 return VOS_STATUS_E_NOMEM;
9026 }
9027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9028 if(NULL == pWdaParams)
9029 {
9030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009032 VOS_ASSERT(0);
9033 vos_mem_free(wdiBeaconFilterInfo);
9034 return VOS_STATUS_E_NOMEM;
9035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9037 pBeaconFilterInfo->beaconInterval;
9038 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9039 pBeaconFilterInfo->capabilityInfo;
9040 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9041 pBeaconFilterInfo->capabilityMask;
9042 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009043
9044 //Fill the BssIdx
9045 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9046
Jeff Johnson295189b2012-06-20 16:38:30 -07009047 //Fill structure with info contained in the beaconFilterTable
9048 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9049 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9050 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9051 if(WDI_BEACON_FILTER_LEN < filterLength)
9052 {
9053 filterLength = WDI_BEACON_FILTER_LEN;
9054 }
9055 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009056 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9057 wdiBeaconFilterInfo->pUserData = pWdaParams;
9058
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 /* Store param pointer as passed in by caller */
9060 /* store Params pass it to WDI */
9061 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9062 pWdaParams->pWdaContext = pWDA;
9063 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9064
Jeff Johnson295189b2012-06-20 16:38:30 -07009065 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009066 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009067 if(IS_WDI_STATUS_FAILURE(status))
9068 {
9069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9070 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9071 vos_mem_free(pWdaParams->wdaMsgParam) ;
9072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9073 vos_mem_free(pWdaParams) ;
9074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 return CONVERT_WDI2VOS_STATUS(status) ;
9076}
Jeff Johnson295189b2012-06-20 16:38:30 -07009077/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009078 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 *
9080 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009081void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009082{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009083 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9084
Jeff Johnson295189b2012-06-20 16:38:30 -07009085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009086 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009087
9088 if(NULL == pWdaParams)
9089 {
9090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009091 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009092 VOS_ASSERT(0) ;
9093 return ;
9094 }
9095
9096 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9097 vos_mem_free(pWdaParams->wdaMsgParam);
9098 vos_mem_free(pWdaParams);
9099
Jeff Johnson295189b2012-06-20 16:38:30 -07009100 //print a msg, nothing else to do
9101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009102 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009103 return ;
9104}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009105/*
9106 * FUNCTION: WDA_RemBeaconFilterReqCallback
9107 * Free memory.
9108 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9109 */
9110void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9111{
9112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9113
9114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9115 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9116
9117 if(NULL == pWdaParams)
9118 {
9119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9120 "%s: pWdaParams received NULL", __func__);
9121 VOS_ASSERT(0);
9122 return;
9123 }
9124
9125 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9126 {
9127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9128 vos_mem_free(pWdaParams->wdaMsgParam);
9129 vos_mem_free(pWdaParams);
9130 }
9131
9132 return;
9133}
Jeff Johnson295189b2012-06-20 16:38:30 -07009134 // TODO: PE does not have this feature for now implemented,
9135 // but the support for removing beacon filter exists between
9136 // HAL and FW. This function can be called whenever PE defines
9137 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009138/*
9139 * FUNCTION: WDA_RemBeaconFilterReq
9140 * Request to WDI to send the removal of beacon filtering related information.
9141 */
9142VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9143 tRemBeaconFilterMsg* pBeaconFilterInfo)
9144{
9145 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009146 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9148 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9149 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009150 tWDA_ReqParams *pWdaParams ;
9151
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009153 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 if(NULL == wdiBeaconFilterInfo)
9155 {
9156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 VOS_ASSERT(0);
9159 return VOS_STATUS_E_NOMEM;
9160 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009161 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9162 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 {
9164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009166 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009167 vos_mem_free(wdiBeaconFilterInfo);
9168 vos_mem_free(pBeaconFilterInfo);
9169 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009171
9172 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9173 pBeaconFilterInfo->ucIeCount;
9174 //Fill structure with info contained in the ucRemIeId
9175 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9176 pBeaconFilterInfo->ucRemIeId,
9177 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9178 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9179 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009180
9181 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009182 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009183 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009184 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9185
9186 pWdaParams->pWdaContext = pWDA;
9187
Jeff Johnson43971f52012-07-17 12:26:56 -07009188 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009189 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009190 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009191 {
9192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9193 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009194 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9196 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009197 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009199 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009200}
Jeff Johnson295189b2012-06-20 16:38:30 -07009201/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009202 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009203 *
9204 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009205void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009206{
9207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009209 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 if(NULL == pWdaParams)
9211 {
9212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009213 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 VOS_ASSERT(0) ;
9215 return ;
9216 }
9217
9218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9219 vos_mem_free(pWdaParams) ;
9220
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 return ;
9222}
Jeff Johnson295189b2012-06-20 16:38:30 -07009223/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009224 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9225 * Free memory.
9226 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9227 */
9228void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9229{
9230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9231
9232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9233 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9234
9235 if(NULL == pWdaParams)
9236 {
9237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9238 "%s: pWdaParams received NULL", __func__);
9239 VOS_ASSERT(0);
9240 return;
9241 }
9242
9243 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9244 {
9245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9246 vos_mem_free(pWdaParams);
9247 }
9248
9249 return;
9250}
9251/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009252 * FUNCTION: WDA_SetRSSIThresholdsReq
9253 * Request to WDI to set the RSSI thresholds (sta mode).
9254 */
9255VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9256{
9257 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009258 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 tWDA_CbContext *pWDA = NULL ;
9260 v_PVOID_t pVosContext = NULL;
9261 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9262 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9263 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9264 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009266 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009267 if(NULL == wdiRSSIThresholdsInfo)
9268 {
9269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009270 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009271 VOS_ASSERT(0);
9272 return VOS_STATUS_E_NOMEM;
9273 }
9274 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9275 if(NULL == pWdaParams)
9276 {
9277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009278 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 VOS_ASSERT(0);
9280 vos_mem_free(wdiRSSIThresholdsInfo);
9281 return VOS_STATUS_E_NOMEM;
9282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9285 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9286 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9288 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9289 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009290 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9291 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9292 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009293 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9294 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009295 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9296 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9297
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 /* Store param pointer as passed in by caller */
9299 /* store Params pass it to WDI */
9300 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9301 pWdaParams->pWdaContext = pWDA;
9302 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009303 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009304 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009305 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 {
9307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9308 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009309 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9311 vos_mem_free(pWdaParams) ;
9312 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009313 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009314
9315}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009316/*
Yue Madb90ac12013-04-04 13:39:13 -07009317 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009318 *
9319 */
Yue Madb90ac12013-04-04 13:39:13 -07009320void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009321{
9322 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9323
9324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009325 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 if(NULL == pWdaParams)
9327 {
9328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009329 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 VOS_ASSERT(0) ;
9331 return ;
9332 }
9333
9334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9335 vos_mem_free(pWdaParams->wdaMsgParam);
9336 vos_mem_free(pWdaParams) ;
9337
9338 //print a msg, nothing else to do
9339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009340 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 return ;
9342}
Jeff Johnson295189b2012-06-20 16:38:30 -07009343/*
Yue Madb90ac12013-04-04 13:39:13 -07009344 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009345 * Free memory.
9346 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009347 */
9348void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9349{
9350 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9351
9352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9353 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9354
9355 if(NULL == pWdaParams)
9356 {
9357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9358 "%s: Invalid pWdaParams pointer", __func__);
9359 VOS_ASSERT(0);
9360 return;
9361 }
9362
9363 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9364 {
9365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9366 vos_mem_free(pWdaParams->wdaMsgParam);
9367 vos_mem_free(pWdaParams);
9368 }
9369
9370 return;
9371}
9372/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 * FUNCTION: WDA_ProcessHostOffloadReq
9374 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9375 * to broadcast traffic (sta mode).
9376 */
9377VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9378 tSirHostOffloadReq *pHostOffloadParams)
9379{
9380 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009381 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9383 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9384 sizeof(WDI_HostOffloadReqParamsType)) ;
9385 tWDA_ReqParams *pWdaParams ;
9386
9387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009388 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009389
9390 if(NULL == wdiHostOffloadInfo)
9391 {
9392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 VOS_ASSERT(0);
9395 return VOS_STATUS_E_NOMEM;
9396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009397 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9398 if(NULL == pWdaParams)
9399 {
9400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009401 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 VOS_ASSERT(0);
9403 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009404 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009405 return VOS_STATUS_E_NOMEM;
9406 }
9407
9408 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9409 pHostOffloadParams->offloadType;
9410 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9411 pHostOffloadParams->enableOrDisable;
9412
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009413 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9414 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9415
Jeff Johnson295189b2012-06-20 16:38:30 -07009416 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9417 {
9418 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9419 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9420 pHostOffloadParams->params.hostIpv4Addr,
9421 4);
9422 break;
9423 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9424 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9425 pHostOffloadParams->params.hostIpv6Addr,
9426 16);
9427 break;
9428 case SIR_IPV6_NS_OFFLOAD:
9429 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9430 pHostOffloadParams->params.hostIpv6Addr,
9431 16);
9432
9433#ifdef WLAN_NS_OFFLOAD
9434 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9435 {
9436 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9437 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9438 16);
9439 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9440 }
9441 else
9442 {
9443 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9444 }
9445
9446 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9447 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9448 16);
9449 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9450 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9451 6);
9452
9453 //Only two are supported so let's go through them without a loop
9454 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9455 {
9456 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9457 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9458 16);
9459 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9460 }
9461 else
9462 {
9463 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9464 }
9465
9466 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9467 {
9468 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9469 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9470 16);
9471 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9472 }
9473 else
9474 {
9475 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9476 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309477 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9478 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009479 break;
9480#endif //WLAN_NS_OFFLOAD
9481 default:
9482 {
9483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9484 "No Handling for Offload Type %x in WDA "
9485 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9486 //WDA_VOS_ASSERT(0) ;
9487 }
9488 }
Yue Madb90ac12013-04-04 13:39:13 -07009489 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9490 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009491
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009493 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009494 /* store Params pass it to WDI */
9495 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9496 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009497
Jeff Johnson295189b2012-06-20 16:38:30 -07009498
Jeff Johnson43971f52012-07-17 12:26:56 -07009499 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009500 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009501
Jeff Johnson43971f52012-07-17 12:26:56 -07009502 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 {
9504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9505 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009506 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9508 vos_mem_free(pWdaParams->wdaMsgParam);
9509 vos_mem_free(pWdaParams) ;
9510 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009511 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009512
9513}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009514/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009515 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009516 *
9517 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009518void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009519{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9521
Jeff Johnson295189b2012-06-20 16:38:30 -07009522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009523 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009524
9525 if(NULL == pWdaParams)
9526 {
9527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009528 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009529 VOS_ASSERT(0) ;
9530 return ;
9531 }
9532
9533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9534 vos_mem_free(pWdaParams->wdaMsgParam);
9535 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009536
Jeff Johnson295189b2012-06-20 16:38:30 -07009537 //print a msg, nothing else to do
9538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009539 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 return ;
9541}
Jeff Johnson295189b2012-06-20 16:38:30 -07009542/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009543 * FUNCTION: WDA_KeepAliveReqCallback
9544 * Free memory.
9545 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9546 */
9547void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9548{
9549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9550
9551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9552 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9553
9554 if(NULL == pWdaParams)
9555 {
9556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9557 "%s: pWdaParams received NULL", __func__);
9558 VOS_ASSERT(0);
9559 return;
9560 }
9561
9562 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9563 {
9564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9565 vos_mem_free(pWdaParams->wdaMsgParam);
9566 vos_mem_free(pWdaParams);
9567 }
9568
9569 return;
9570}
9571/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009572 * FUNCTION: WDA_ProcessKeepAliveReq
9573 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9574 * wakeup due to broadcast traffic (sta mode).
9575 */
9576VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9577 tSirKeepAliveReq *pKeepAliveParams)
9578{
9579 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009580 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9582 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9583 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009584 tWDA_ReqParams *pWdaParams;
9585
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009587 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 if(NULL == wdiKeepAliveInfo)
9589 {
9590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009592 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009593 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009594 return VOS_STATUS_E_NOMEM;
9595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009596
9597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9598 if(NULL == pWdaParams)
9599 {
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009601 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009602 VOS_ASSERT(0);
9603 vos_mem_free(wdiKeepAliveInfo);
9604 vos_mem_free(pKeepAliveParams);
9605 return VOS_STATUS_E_NOMEM;
9606 }
9607
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9609 pKeepAliveParams->packetType;
9610 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9611 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009612
9613 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9614 pKeepAliveParams->bssId,
9615 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009616
9617 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9618 {
9619 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9620 pKeepAliveParams->hostIpv4Addr,
9621 SIR_IPV4_ADDR_LEN);
9622 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9623 pKeepAliveParams->destIpv4Addr,
9624 SIR_IPV4_ADDR_LEN);
9625 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9626 pKeepAliveParams->destMacAddr,
9627 SIR_MAC_ADDR_LEN);
9628 }
9629 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9630 {
9631 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9632 SIR_IPV4_ADDR_LEN,
9633 0);
9634 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9635 SIR_IPV4_ADDR_LEN,
9636 0);
9637 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9638 SIR_MAC_ADDR_LEN,
9639 0);
9640 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009641 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9642 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009643
Jeff Johnson295189b2012-06-20 16:38:30 -07009644 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009645 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009647 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9648 pWdaParams->pWdaContext = pWDA;
9649
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9651 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9652 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9653 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9654 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9656 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9657 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9658 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9659 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9661 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9662 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9663 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9664 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9665 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9666 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9667 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9669 "TimePeriod %d PacketType %d",
9670 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9671 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009672 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009673 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009674
Jeff Johnson43971f52012-07-17 12:26:56 -07009675 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009676 {
9677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9678 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009679 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9681 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009682 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009683 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009684 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009685
9686}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009687/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009688 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009689 *
9690 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009691void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009692 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9693 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009694{
9695 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009697 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009698 if(NULL == pWdaParams)
9699 {
9700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009702 VOS_ASSERT(0) ;
9703 return ;
9704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9706 vos_mem_free(pWdaParams->wdaMsgParam);
9707 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009708 return ;
9709}
Jeff Johnson295189b2012-06-20 16:38:30 -07009710/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009711 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9712 * Free memory.
9713 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9714 */
9715void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9716{
9717 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9718
9719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9720 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9721
9722 if(NULL == pWdaParams)
9723 {
9724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9725 "%s: pWdaParams received NULL", __func__);
9726 VOS_ASSERT(0);
9727 return;
9728 }
9729
9730 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9731 {
9732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9733 vos_mem_free(pWdaParams->wdaMsgParam);
9734 vos_mem_free(pWdaParams);
9735 }
9736
9737 return;
9738}
9739
9740/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009741 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9742 * Request to WDI to add WOWL Bcast pattern
9743 */
9744VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9745 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9746{
9747 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009748 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009749 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9750 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9751 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9752 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009754 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009755 if(NULL == wdiWowlAddBcPtrnInfo)
9756 {
9757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009759 VOS_ASSERT(0);
9760 return VOS_STATUS_E_NOMEM;
9761 }
9762 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9763 if(NULL == pWdaParams)
9764 {
9765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009767 VOS_ASSERT(0);
9768 vos_mem_free(wdiWowlAddBcPtrnInfo);
9769 return VOS_STATUS_E_NOMEM;
9770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009771 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9772 pWowlAddBcPtrnParams->ucPatternId;
9773 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9774 pWowlAddBcPtrnParams->ucPatternByteOffset;
9775 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9776 pWowlAddBcPtrnParams->ucPatternMaskSize;
9777 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9778 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009779 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9780 {
9781 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9782 pWowlAddBcPtrnParams->ucPattern,
9783 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9784 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9785 pWowlAddBcPtrnParams->ucPatternMask,
9786 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9787 }
9788 else
9789 {
9790 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9791 pWowlAddBcPtrnParams->ucPattern,
9792 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9793 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9794 pWowlAddBcPtrnParams->ucPatternMask,
9795 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9796
9797 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9798 pWowlAddBcPtrnParams->ucPatternExt,
9799 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9800 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9801 pWowlAddBcPtrnParams->ucPatternMaskExt,
9802 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9803 }
9804
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009805 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9806 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9807
Yue Ma7f44bbe2013-04-12 11:47:39 -07009808 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9809 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009810 /* Store param pointer as passed in by caller */
9811 /* store Params pass it to WDI */
9812 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9813 pWdaParams->pWdaContext = pWDA;
9814 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009815 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009816 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009817 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 {
9819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9820 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009821 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009822 vos_mem_free(pWdaParams->wdaMsgParam) ;
9823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9824 vos_mem_free(pWdaParams) ;
9825 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009826 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009827
9828}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009829/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009830 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009831 *
9832 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009833void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009834 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9835 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009836{
9837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009839 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009840 if(NULL == pWdaParams)
9841 {
9842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009843 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009844 VOS_ASSERT(0) ;
9845 return ;
9846 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9848 vos_mem_free(pWdaParams->wdaMsgParam);
9849 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 return ;
9851}
Jeff Johnson295189b2012-06-20 16:38:30 -07009852/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009853 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9854 * Free memory.
9855 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9856 */
9857void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9858{
9859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9860
9861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9862 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9863
9864 if(NULL == pWdaParams)
9865 {
9866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9867 "%s: pWdaParams received NULL", __func__);
9868 VOS_ASSERT(0);
9869 return;
9870 }
9871
9872 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9873 {
9874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9875 vos_mem_free(pWdaParams->wdaMsgParam);
9876 vos_mem_free(pWdaParams);
9877 }
9878
9879 return;
9880}
9881/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9883 * Request to WDI to delete WOWL Bcast pattern
9884 */
9885VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9886 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9887{
9888 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009889 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009890 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9891 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9892 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9893 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009895 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009896 if(NULL == wdiWowlDelBcPtrnInfo)
9897 {
9898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009899 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009900 VOS_ASSERT(0);
9901 return VOS_STATUS_E_NOMEM;
9902 }
9903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9904 if(NULL == pWdaParams)
9905 {
9906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 VOS_ASSERT(0);
9909 vos_mem_free(wdiWowlDelBcPtrnInfo);
9910 return VOS_STATUS_E_NOMEM;
9911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9913 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009914
9915 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9916 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9917
Yue Ma7f44bbe2013-04-12 11:47:39 -07009918 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9919 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 /* Store param pointer as passed in by caller */
9921 /* store Params pass it to WDI */
9922 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9923 pWdaParams->pWdaContext = pWDA;
9924 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009925 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009926 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009927 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 {
9929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9930 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009931 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 vos_mem_free(pWdaParams->wdaMsgParam) ;
9933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9934 vos_mem_free(pWdaParams) ;
9935 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009936 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009937
9938}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009939/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009940 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009941 *
9942 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009943void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009944{
9945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9946 tWDA_CbContext *pWDA;
9947 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009949 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 if(NULL == pWdaParams)
9951 {
9952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009953 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 VOS_ASSERT(0) ;
9955 return ;
9956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9958 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9959
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009960 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9961
Jeff Johnson295189b2012-06-20 16:38:30 -07009962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9963 vos_mem_free(pWdaParams) ;
9964
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009965 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009966 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009968 return ;
9969}
Jeff Johnson295189b2012-06-20 16:38:30 -07009970/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009971 * FUNCTION: WDA_WowlEnterReqCallback
9972 * Free memory and send WOWL Enter RSP back to PE.
9973 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9974 */
9975void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9976{
9977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9978 tWDA_CbContext *pWDA;
9979 tSirHalWowlEnterParams *pWowlEnterParams;
9980
9981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9982 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9983
9984 if(NULL == pWdaParams)
9985 {
9986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9987 "%s: pWdaParams received NULL", __func__);
9988 VOS_ASSERT(0);
9989 return;
9990 }
9991
9992 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9993 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9994 pWowlEnterParams->status = wdiStatus;
9995
9996 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9997 {
9998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9999 vos_mem_free(pWdaParams);
10000 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10001 }
10002
10003 return;
10004}
10005/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010006 * FUNCTION: WDA_ProcessWowlEnterReq
10007 * Request to WDI to enter WOWL
10008 */
10009VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10010 tSirHalWowlEnterParams *pWowlEnterParams)
10011{
10012 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010013 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010014 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10015 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10016 sizeof(WDI_WowlEnterReqParamsType)) ;
10017 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 if(NULL == wdiWowlEnterInfo)
10021 {
10022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 VOS_ASSERT(0);
10025 return VOS_STATUS_E_NOMEM;
10026 }
10027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10028 if(NULL == pWdaParams)
10029 {
10030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 VOS_ASSERT(0);
10033 vos_mem_free(wdiWowlEnterInfo);
10034 return VOS_STATUS_E_NOMEM;
10035 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010036
10037 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10038
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10040 pWowlEnterParams->magicPtrn,
10041 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10043 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010044 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10045 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10047 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010048 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10049 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010050 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10051 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010052 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10053 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010054 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10055 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010056 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10057 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010058#ifdef WLAN_WAKEUP_EVENTS
10059 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10060 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10061
10062 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10063 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10064
10065 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10066 pWowlEnterParams->ucWowNetScanOffloadMatch;
10067
10068 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10069 pWowlEnterParams->ucWowGTKRekeyError;
10070
10071 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10072 pWowlEnterParams->ucWoWBSSConnLoss;
10073#endif // WLAN_WAKEUP_EVENTS
10074
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010075 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10076 pWowlEnterParams->bssIdx;
10077
Yue Ma7f44bbe2013-04-12 11:47:39 -070010078 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10079 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010080 /* Store param pointer as passed in by caller */
10081 /* store Params pass it to WDI */
10082 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10083 pWdaParams->pWdaContext = pWDA;
10084 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010085 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010086 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010087 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010088 {
10089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10090 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010091 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 vos_mem_free(pWdaParams->wdaMsgParam) ;
10093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10094 vos_mem_free(pWdaParams) ;
10095 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010096 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010097
10098}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010099/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010100 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 *
10102 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010103void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010104{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10106 tWDA_CbContext *pWDA;
10107 tSirHalWowlExitParams *pWowlExitParams;
10108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010109 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010110 if(NULL == pWdaParams)
10111 {
10112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010113 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010114 VOS_ASSERT(0) ;
10115 return ;
10116 }
10117 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10118 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10119
10120 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010121 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010122
10123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10124 vos_mem_free(pWdaParams) ;
10125
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010127 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010128 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010129 return ;
10130}
Jeff Johnson295189b2012-06-20 16:38:30 -070010131/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010132 * FUNCTION: WDA_WowlExitReqCallback
10133 * Free memory and send WOWL Exit RSP back to PE.
10134 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10135 */
10136void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10137{
10138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10139 tWDA_CbContext *pWDA;
10140 tSirHalWowlExitParams *pWowlExitParams;
10141
10142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10143 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10144
10145 if(NULL == pWdaParams)
10146 {
10147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10148 "%s: pWdaParams received NULL", __func__);
10149 VOS_ASSERT(0);
10150 return;
10151 }
10152
10153 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10154 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10155 pWowlExitParams->status = wdiStatus;
10156
10157 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10158 {
10159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10160 vos_mem_free(pWdaParams);
10161 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10162 }
10163
10164 return;
10165}
10166/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010167 * FUNCTION: WDA_ProcessWowlExitReq
10168 * Request to WDI to add WOWL Bcast pattern
10169 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010170VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10171 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010172{
10173 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010174 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010175 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10176 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10177 sizeof(WDI_WowlExitReqParamsType)) ;
10178 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010180 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010181 if(NULL == wdiWowlExitInfo)
10182 {
10183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010184 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010185 VOS_ASSERT(0);
10186 return VOS_STATUS_E_NOMEM;
10187 }
10188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10189 if(NULL == pWdaParams)
10190 {
10191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010192 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010193 VOS_ASSERT(0);
10194 vos_mem_free(wdiWowlExitInfo);
10195 return VOS_STATUS_E_NOMEM;
10196 }
10197
10198 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10199 pWowlExitParams->bssIdx;
10200
Yue Ma7f44bbe2013-04-12 11:47:39 -070010201 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10202 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010203
10204 /* Store param pointer as passed in by caller */
10205 /* store Params pass it to WDI */
10206 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10207 pWdaParams->pWdaContext = pWDA;
10208 pWdaParams->wdaMsgParam = pWowlExitParams;
10209
10210 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010211 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010212
Jeff Johnson43971f52012-07-17 12:26:56 -070010213 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010214 {
10215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10216 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010217 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10219 vos_mem_free(pWdaParams->wdaMsgParam);
10220 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010221 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010222 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010223}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010224/*
10225 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10226 * Request to WDI to determine whether a given station is capable of
10227 * using HW-based frame translation
10228 */
10229v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10230 tANI_U8 staIdx)
10231{
10232 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10233}
Jeff Johnson295189b2012-06-20 16:38:30 -070010234/*
10235 * FUNCTION: WDA_NvDownloadReqCallback
10236 * send NV Download RSP back to PE
10237 */
10238void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10239 void* pUserData)
10240{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010241
10242 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10243 tWDA_CbContext *pWDA;
10244
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010246 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010247
10248 if(NULL == pWdaParams)
10249 {
10250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010251 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010252 VOS_ASSERT(0) ;
10253 return ;
10254 }
10255
10256 pWDA = pWdaParams->pWdaContext;
10257
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10260 vos_mem_free(pWdaParams);
10261
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 return ;
10264}
Jeff Johnson295189b2012-06-20 16:38:30 -070010265/*
10266 * FUNCTION: WDA_ProcessNvDownloadReq
10267 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10268 */
10269VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10270{
10271 /* Initialize the local Variables*/
10272 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10273 v_VOID_t *pNvBuffer=NULL;
10274 v_SIZE_t bufferSize = 0;
10275 WDI_Status status = WDI_STATUS_E_FAILURE;
10276 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010277 tWDA_ReqParams *pWdaParams ;
10278
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010280 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 if(NULL == pWDA)
10282 {
10283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010284 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010285 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010286 return VOS_STATUS_E_FAILURE;
10287 }
10288
10289 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010290 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10291
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10293 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 if(NULL == wdiNvDownloadReqParam)
10295 {
10296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 VOS_ASSERT(0);
10299 return VOS_STATUS_E_NOMEM;
10300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010301 /* Copy Params to wdiNvDownloadReqParam*/
10302 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10303 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010304
10305 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10306 if(NULL == pWdaParams)
10307 {
10308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010309 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010310 VOS_ASSERT(0);
10311 vos_mem_free(wdiNvDownloadReqParam);
10312 return VOS_STATUS_E_NOMEM;
10313 }
10314
Jeff Johnson295189b2012-06-20 16:38:30 -070010315 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010316 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10317 pWdaParams->wdaMsgParam = NULL;
10318 pWdaParams->pWdaContext = pWDA;
10319
10320
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010322
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010324 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10325
Jeff Johnson295189b2012-06-20 16:38:30 -070010326 if(IS_WDI_STATUS_FAILURE(status))
10327 {
10328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10329 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10331 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010332 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010334}
10335/*
10336 * FUNCTION: WDA_FlushAcReqCallback
10337 * send Flush AC RSP back to TL
10338 */
10339void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10340{
10341 vos_msg_t wdaMsg = {0} ;
10342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10343 tFlushACReq *pFlushACReqParams;
10344 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010346 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 if(NULL == pWdaParams)
10348 {
10349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010350 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 VOS_ASSERT(0) ;
10352 return ;
10353 }
10354
10355 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10356 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10357 if(NULL == pFlushACRspParams)
10358 {
10359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010362 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 return ;
10364 }
10365 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10366 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10367 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10368 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10369 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010370 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010371 vos_mem_free(pWdaParams->wdaMsgParam) ;
10372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10373 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010374 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10375 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10376 // POST message to TL
10377 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10378
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 return ;
10380}
Jeff Johnson295189b2012-06-20 16:38:30 -070010381/*
10382 * FUNCTION: WDA_ProcessFlushAcReq
10383 * Request to WDI to Update the DELBA REQ params.
10384 */
10385VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10386 tFlushACReq *pFlushAcReqParams)
10387{
10388 WDI_Status status = WDI_STATUS_SUCCESS ;
10389 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10390 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10391 sizeof(WDI_FlushAcReqParamsType)) ;
10392 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 if(NULL == wdiFlushAcReqParam)
10394 {
10395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 VOS_ASSERT(0);
10398 return VOS_STATUS_E_NOMEM;
10399 }
10400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10401 if(NULL == pWdaParams)
10402 {
10403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 VOS_ASSERT(0);
10406 vos_mem_free(wdiFlushAcReqParam);
10407 return VOS_STATUS_E_NOMEM;
10408 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010410 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010411 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10412 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10413 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10414 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010415 /* Store Flush AC pointer, as this will be used for response */
10416 /* store Params pass it to WDI */
10417 pWdaParams->pWdaContext = pWDA;
10418 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10419 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010420 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10421 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 if(IS_WDI_STATUS_FAILURE(status))
10423 {
10424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10425 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10426 vos_mem_free(pWdaParams->wdaMsgParam) ;
10427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10428 vos_mem_free(pWdaParams) ;
10429 //TODO: respond to TL with failure
10430 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010431 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010432}
Jeff Johnson295189b2012-06-20 16:38:30 -070010433/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010434 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010435 *
10436 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010437void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010438{
10439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10440 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010441 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010442
10443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010444 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010445 if(NULL == pWdaParams)
10446 {
10447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010448 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010449 VOS_ASSERT(0) ;
10450 return ;
10451 }
10452 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10453 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10454 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10455 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10456 {
10457 pWDA->wdaAmpSessionOn = VOS_FALSE;
10458 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010459 vos_mem_free(pWdaParams->wdaMsgParam) ;
10460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10461 vos_mem_free(pWdaParams) ;
10462 /*
10463 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10464 * param here
10465 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010466 return ;
10467}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010468/*
10469 * FUNCTION: WDA_BtAmpEventReqCallback
10470 * Free memory.
10471 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10472 */
10473void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10474{
10475 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10476 tWDA_CbContext *pWDA;
10477 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010478
Yue Ma7f44bbe2013-04-12 11:47:39 -070010479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10480 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10481
10482 if(NULL == pWdaParams)
10483 {
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10485 "%s: pWdaParams received NULL", __func__);
10486 VOS_ASSERT(0);
10487 return;
10488 }
10489
10490 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10491 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10492
10493 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10494 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10495 {
10496 pWDA->wdaAmpSessionOn = VOS_FALSE;
10497 }
10498
10499 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10500 {
10501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10502 vos_mem_free(pWdaParams->wdaMsgParam);
10503 vos_mem_free(pWdaParams);
10504 }
10505
10506 return;
10507}
Jeff Johnson295189b2012-06-20 16:38:30 -070010508/*
10509 * FUNCTION: WDA_ProcessBtAmpEventReq
10510 * Request to WDI to Update with BT AMP events.
10511 */
10512VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10513 tSmeBtAmpEvent *pBtAmpEventParams)
10514{
10515 WDI_Status status = WDI_STATUS_SUCCESS ;
10516 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10517 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10518 sizeof(WDI_BtAmpEventParamsType)) ;
10519 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010521 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010522 if(NULL == wdiBtAmpEventParam)
10523 {
10524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 VOS_ASSERT(0);
10527 return VOS_STATUS_E_NOMEM;
10528 }
10529 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10530 if(NULL == pWdaParams)
10531 {
10532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010533 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010534 VOS_ASSERT(0);
10535 vos_mem_free(wdiBtAmpEventParam);
10536 return VOS_STATUS_E_NOMEM;
10537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010538 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10539 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010540 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10541 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 /* Store BT AMP event pointer, as this will be used for response */
10543 /* store Params pass it to WDI */
10544 pWdaParams->pWdaContext = pWDA;
10545 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10546 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010547 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010548 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010549 if(IS_WDI_STATUS_FAILURE(status))
10550 {
10551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10552 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10553 vos_mem_free(pWdaParams->wdaMsgParam) ;
10554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10555 vos_mem_free(pWdaParams) ;
10556 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010557 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10558 {
10559 pWDA->wdaAmpSessionOn = VOS_TRUE;
10560 }
10561 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010562}
10563
Jeff Johnson295189b2012-06-20 16:38:30 -070010564/*
10565 * FUNCTION: WDA_FTMCommandReqCallback
10566 * Handle FTM CMD response came from HAL
10567 * Route responce to HDD FTM
10568 */
10569void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10570 void *usrData)
10571{
10572 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010573 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10574 {
10575 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010576 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010577 return;
10578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 /* Release Current FTM Command Request */
10580 vos_mem_free(pWDA->wdaFTMCmdReq);
10581 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 /* Post FTM Responce to HDD FTM */
10583 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010584 return;
10585}
Jeff Johnson295189b2012-06-20 16:38:30 -070010586/*
10587 * FUNCTION: WDA_ProcessFTMCommand
10588 * Send FTM command to WDI
10589 */
10590VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10591 tPttMsgbuffer *pPTTFtmCmd)
10592{
10593 WDI_Status status = WDI_STATUS_SUCCESS;
10594 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 ftmCMDReq = (WDI_FTMCommandReqType *)
10596 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10597 if(NULL == ftmCMDReq)
10598 {
10599 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10600 "WDA FTM Command buffer alloc fail");
10601 return VOS_STATUS_E_NOMEM;
10602 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010603 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10604 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010605 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010606 /* Send command to WDI */
10607 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010608 return status;
10609}
Jeff Johnsone7245742012-09-05 17:12:55 -070010610#ifdef FEATURE_OEM_DATA_SUPPORT
10611/*
10612 * FUNCTION: WDA_StartOemDataReqCallback
10613 *
10614 */
10615void WDA_StartOemDataReqCallback(
10616 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10617 void* pUserData)
10618{
10619 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10621 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010622 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010623
Jeff Johnsone7245742012-09-05 17:12:55 -070010624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010625 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010626
10627 if(NULL == pWdaParams)
10628 {
10629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010630 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010631 VOS_ASSERT(0) ;
10632 return ;
10633 }
10634 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10635
Jeff Johnsone7245742012-09-05 17:12:55 -070010636 if(NULL == pWDA)
10637 {
10638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010639 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010640 VOS_ASSERT(0);
10641 return ;
10642 }
10643
10644 /*
10645 * Allocate memory for response params sent to PE
10646 */
10647 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10648
10649 // Check if memory is allocated for OemdataMeasRsp Params.
10650 if(NULL == pOemDataRspParams)
10651 {
10652 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10653 "OEM DATA WDA callback alloc fail");
10654 VOS_ASSERT(0) ;
10655 return;
10656 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010657
Jeff Johnsone7245742012-09-05 17:12:55 -070010658 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10660 vos_mem_free(pWdaParams->wdaMsgParam);
10661 vos_mem_free(pWdaParams) ;
10662
Jeff Johnsone7245742012-09-05 17:12:55 -070010663 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010664 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010665 * Also, here success always means that we have atleast one BSSID.
10666 */
10667 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10668
10669 //enable Tx
10670 status = WDA_ResumeDataTx(pWDA);
10671 if(status != VOS_STATUS_SUCCESS)
10672 {
10673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10674 }
10675 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10676 return ;
10677}
10678/*
10679 * FUNCTION: WDA_ProcessStartOemDataReq
10680 * Send Start Oem Data Req to WDI
10681 */
10682VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10683 tStartOemDataReq *pOemDataReqParams)
10684{
10685 WDI_Status status = WDI_STATUS_SUCCESS;
10686 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010687 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010688
10689 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10690
10691 if(NULL == wdiOemDataReqParams)
10692 {
10693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010695 VOS_ASSERT(0);
10696 return VOS_STATUS_E_NOMEM;
10697 }
10698
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010699 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10700 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10701 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10702 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010703
10704 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10705
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010706 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10707 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010708 {
10709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010710 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010711 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010712 vos_mem_free(pOemDataReqParams);
10713 VOS_ASSERT(0);
10714 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010715 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010716
Bernald44a1ae2013-01-09 08:30:39 -080010717 pWdaParams->pWdaContext = (void*)pWDA;
10718 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10719 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010720
10721 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10722 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010723
10724 if(IS_WDI_STATUS_FAILURE(status))
10725 {
10726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10727 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010728 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10729 vos_mem_free(pWdaParams->wdaMsgParam);
10730 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010731 }
10732 return CONVERT_WDI2VOS_STATUS(status) ;
10733}
10734#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010735/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010736 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010737 *
10738 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010739void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010740{
10741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010743 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010744 if(NULL == pWdaParams)
10745 {
10746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010747 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010748 VOS_ASSERT(0) ;
10749 return ;
10750 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010751
10752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10753 vos_mem_free(pWdaParams->wdaMsgParam);
10754 vos_mem_free(pWdaParams);
10755
10756 return ;
10757}
10758/*
10759 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10760 * Free memory.
10761 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10762 */
10763void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10764{
10765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10766
10767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10768 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10769
10770 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010771 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10773 "%s: pWdaParams received NULL", __func__);
10774 VOS_ASSERT(0);
10775 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010777
10778 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 {
10780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010781 vos_mem_free(pWdaParams->wdaMsgParam);
10782 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010783 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010784
10785 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010786}
Jeff Johnson295189b2012-06-20 16:38:30 -070010787#ifdef WLAN_FEATURE_GTK_OFFLOAD
10788/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010789 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010790 *
10791 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010792void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010793 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010794{
10795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10796
10797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010798 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010799 if(NULL == pWdaParams)
10800 {
10801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10802 "%s: pWdaParams received NULL", __func__);
10803 VOS_ASSERT(0);
10804 return;
10805 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010806
Jeff Johnson295189b2012-06-20 16:38:30 -070010807 vos_mem_free(pWdaParams->wdaMsgParam) ;
10808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10809 vos_mem_free(pWdaParams) ;
10810
10811 //print a msg, nothing else to do
10812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010813 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010814
10815 return ;
10816}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010817/*
10818 * FUNCTION: WDA_GTKOffloadReqCallback
10819 * Free memory.
10820 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10821 */
10822void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10823{
10824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010825
Yue Ma7f44bbe2013-04-12 11:47:39 -070010826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10827 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10828
10829 if(NULL == pWdaParams)
10830 {
10831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10832 "%s: pWdaParams received NULL", __func__);
10833 VOS_ASSERT(0);
10834 return;
10835 }
10836
10837 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10838 {
10839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10840 vos_mem_free(pWdaParams->wdaMsgParam);
10841 vos_mem_free(pWdaParams);
10842 }
10843
10844 return;
10845}
Jeff Johnson295189b2012-06-20 16:38:30 -070010846/*
10847 * FUNCTION: WDA_ProcessGTKOffloadReq
10848 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10849 * to broadcast traffic (sta mode).
10850 */
10851VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10852 tpSirGtkOffloadParams pGtkOffloadParams)
10853{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010854 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010855 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10856 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10857 sizeof(WDI_GtkOffloadReqMsg)) ;
10858 tWDA_ReqParams *pWdaParams ;
10859
10860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010861 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010862
10863 if(NULL == wdiGtkOffloadReqMsg)
10864 {
10865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010866 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010867 VOS_ASSERT(0);
10868 return VOS_STATUS_E_NOMEM;
10869 }
10870
10871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10872 if(NULL == pWdaParams)
10873 {
10874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010875 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010876 VOS_ASSERT(0);
10877 vos_mem_free(wdiGtkOffloadReqMsg);
10878 return VOS_STATUS_E_NOMEM;
10879 }
10880
10881 //
10882 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10883 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010884
10885 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010886 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010887
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10889 // Copy KCK
10890 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10891 // Copy KEK
10892 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10893 // Copy KeyReplayCounter
10894 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10895 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10896
Yue Ma7f44bbe2013-04-12 11:47:39 -070010897 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10898 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010899
Jeff Johnson295189b2012-06-20 16:38:30 -070010900
10901 /* Store Params pass it to WDI */
10902 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10903 pWdaParams->pWdaContext = pWDA;
10904 /* Store param pointer as passed in by caller */
10905 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10906
Yue Ma7f44bbe2013-04-12 11:47:39 -070010907 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010908
10909 if(IS_WDI_STATUS_FAILURE(status))
10910 {
10911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10912 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10914 vos_mem_free(pWdaParams->wdaMsgParam);
10915 vos_mem_free(pWdaParams);
10916 }
10917
10918 return CONVERT_WDI2VOS_STATUS(status) ;
10919}
10920
10921/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010922 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010923 *
10924 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010925void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010926 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010927{
10928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10929 tWDA_CbContext *pWDA;
10930 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010931 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 vos_msg_t vosMsg;
10933
10934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010935 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010936
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010937 if(NULL == pWdaParams)
10938 {
10939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10940 "%s: pWdaParams received NULL", __func__);
10941 VOS_ASSERT(0);
10942 return;
10943 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010944
Nirav Shah374de6e2014-02-13 16:40:01 +053010945 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10946 if(NULL == pGtkOffloadGetInfoRsp)
10947 {
10948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10949 "%s: vos_mem_malloc failed ", __func__);
10950 VOS_ASSERT(0);
10951 return;
10952 }
10953
Jeff Johnson295189b2012-06-20 16:38:30 -070010954 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10955 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10956
10957 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10958 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10959
10960 /* Message Header */
10961 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010962 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010963
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010964 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10965 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10966 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10967 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10968 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010969
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010970 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10971 pwdiGtkOffloadGetInfoRsparams->bssId,
10972 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 /* VOS message wrapper */
10974 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10975 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10976 vosMsg.bodyval = 0;
10977
10978 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10979 {
10980 /* free the mem and return */
10981 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10982 }
10983
10984 vos_mem_free(pWdaParams->wdaMsgParam) ;
10985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10986 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010987
10988 return;
10989}
10990/*
10991 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10992 * Free memory and send RSP back to SME.
10993 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10994 */
10995void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10996{
10997 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10998 vos_msg_t vosMsg;
10999
11000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11001 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11002
11003 if(NULL == pWdaParams)
11004 {
11005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11006 "%s: pWdaParams received NULL", __func__);
11007 VOS_ASSERT(0);
11008 return;
11009 }
11010
11011 /* VOS message wrapper */
11012 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11013 vosMsg.bodyptr = NULL;
11014 vosMsg.bodyval = 0;
11015
11016 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11017 {
11018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11019 vos_mem_free(pWdaParams->wdaMsgParam);
11020 vos_mem_free(pWdaParams);
11021 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11022 }
11023
11024 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011025}
11026#endif
11027
11028/*
11029 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11030 * Request to WDI to set Tx Per Tracking configurations
11031 */
11032VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11033{
11034 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011035 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11037 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11038 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11039 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011041 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 if(NULL == pwdiSetTxPerTrackingReqParams)
11043 {
11044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011045 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 vos_mem_free(pTxPerTrackingParams);
11047 VOS_ASSERT(0);
11048 return VOS_STATUS_E_NOMEM;
11049 }
11050 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11051 if(NULL == pWdaParams)
11052 {
11053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11056 vos_mem_free(pTxPerTrackingParams);
11057 VOS_ASSERT(0);
11058 return VOS_STATUS_E_NOMEM;
11059 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011060 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11061 pTxPerTrackingParams->ucTxPerTrackingEnable;
11062 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11063 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11064 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11065 pTxPerTrackingParams->ucTxPerTrackingRatio;
11066 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11067 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011068 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11069 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011070 /* Store param pointer as passed in by caller */
11071 /* store Params pass it to WDI
11072 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11073 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11074 pWdaParams->pWdaContext = pWDA;
11075 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011076 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011077 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011078 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011079 {
11080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11081 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011082 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011083 vos_mem_free(pWdaParams->wdaMsgParam) ;
11084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11085 vos_mem_free(pWdaParams) ;
11086 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011087 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011088
11089}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011090/*
11091 * FUNCTION: WDA_HALDumpCmdCallback
11092 * Send the VOS complete .
11093 */
11094void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11095 void* pUserData)
11096{
11097 tANI_U8 *buffer = NULL;
11098 tWDA_CbContext *pWDA = NULL;
11099 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 if(NULL == pWdaParams)
11101 {
11102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011103 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 VOS_ASSERT(0) ;
11105 return ;
11106 }
11107
11108 pWDA = pWdaParams->pWdaContext;
11109 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011110 if(wdiRspParams->usBufferLen > 0)
11111 {
11112 /*Copy the Resp data to UMAC supplied buffer*/
11113 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11116 vos_mem_free(pWdaParams);
11117
11118 /* Indicate VOSS about the start complete */
11119 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011120 return ;
11121}
11122
Jeff Johnson295189b2012-06-20 16:38:30 -070011123/*
11124 * FUNCTION: WDA_ProcessHALDumpCmdReq
11125 * Send Dump command to WDI
11126 */
11127VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11128 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11129 tANI_U32 arg4, tANI_U8 *pBuffer)
11130{
11131 WDI_Status status = WDI_STATUS_SUCCESS;
11132 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11133 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11134 tWDA_ReqParams *pWdaParams ;
11135 pVosContextType pVosContext = NULL;
11136 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011137 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11138 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011139 if(pVosContext)
11140 {
11141 if (pVosContext->isLogpInProgress)
11142 {
11143 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11144 "%s:LOGP in Progress. Ignore!!!", __func__);
11145 return VOS_STATUS_E_BUSY;
11146 }
11147 }
11148 else
11149 {
11150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11151 "%s: VOS Context Null", __func__);
11152 return VOS_STATUS_E_RESOURCES;
11153 }
11154
Jeff Johnson295189b2012-06-20 16:38:30 -070011155 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11156 if(NULL == pWdaParams)
11157 {
11158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011160 return VOS_STATUS_E_NOMEM;
11161 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011162 /* Allocate memory WDI request structure*/
11163 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11164 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11165 if(NULL == wdiHALDumpCmdReqParam)
11166 {
11167 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11168 "WDA HAL DUMP Command buffer alloc fail");
11169 vos_mem_free(pWdaParams);
11170 return WDI_STATUS_E_FAILURE;
11171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011172 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011173 /* Extract the arguments */
11174 wdiHalDumpCmdInfo->command = cmd;
11175 wdiHalDumpCmdInfo->argument1 = arg1;
11176 wdiHalDumpCmdInfo->argument2 = arg2;
11177 wdiHalDumpCmdInfo->argument3 = arg3;
11178 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11181
11182 /* Response message will be passed through the buffer */
11183 pWdaParams->wdaMsgParam = (void *)pBuffer;
11184
11185 /* store Params pass it to WDI */
11186 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011187 /* Send command to WDI */
11188 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011189 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011190 if ( vStatus != VOS_STATUS_SUCCESS )
11191 {
11192 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11193 {
11194 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011195 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011196 }
11197 else
11198 {
11199 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011200 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 }
11202 VOS_ASSERT(0);
11203 }
11204 return status;
11205}
Jeff Johnson295189b2012-06-20 16:38:30 -070011206#ifdef WLAN_FEATURE_GTK_OFFLOAD
11207/*
11208 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11209 * Request to WDI to get GTK Offload Information
11210 */
11211VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11212 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11213{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011214 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011215 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11216 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11217 tWDA_ReqParams *pWdaParams ;
11218
11219 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11220 {
11221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011223 VOS_ASSERT(0);
11224 return VOS_STATUS_E_NOMEM;
11225 }
11226
11227 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11228 if(NULL == pWdaParams)
11229 {
11230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011231 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 VOS_ASSERT(0);
11233 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11234 return VOS_STATUS_E_NOMEM;
11235 }
11236
Yue Ma7f44bbe2013-04-12 11:47:39 -070011237 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11238 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011239
Jeff Johnson295189b2012-06-20 16:38:30 -070011240 /* Store Params pass it to WDI */
11241 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11242 pWdaParams->pWdaContext = pWDA;
11243 /* Store param pointer as passed in by caller */
11244 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11245
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011246 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011247 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011248
Yue Ma7f44bbe2013-04-12 11:47:39 -070011249 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011250
11251 if(IS_WDI_STATUS_FAILURE(status))
11252 {
11253 /* failure returned by WDI API */
11254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11255 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11257 vos_mem_free(pWdaParams) ;
11258 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11259 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11260 }
11261
11262 return CONVERT_WDI2VOS_STATUS(status) ;
11263}
11264#endif // WLAN_FEATURE_GTK_OFFLOAD
11265
11266/*
Yue Mab9c86f42013-08-14 15:59:08 -070011267 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11268 *
11269 */
11270VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11271 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11272{
11273 WDI_Status wdiStatus;
11274 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11275
11276 addPeriodicTxPtrnParams =
11277 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11278
11279 if (NULL == addPeriodicTxPtrnParams)
11280 {
11281 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11282 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11283 __func__);
11284
11285 return VOS_STATUS_E_NOMEM;
11286 }
11287
11288 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11289 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11290
11291 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11292 addPeriodicTxPtrnParams->pUserData = pWDA;
11293
11294 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11295
11296 if (WDI_STATUS_PENDING == wdiStatus)
11297 {
11298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11299 "Pending received for %s:%d", __func__, __LINE__ );
11300 }
11301 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11302 {
11303 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11304 "Failure in %s:%d", __func__, __LINE__ );
11305 }
11306
11307 vos_mem_free(addPeriodicTxPtrnParams);
11308
11309 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11310}
11311
11312/*
11313 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11314 *
11315 */
11316VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11317 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11318{
11319 WDI_Status wdiStatus;
11320 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11321
11322 delPeriodicTxPtrnParams =
11323 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11324
11325 if (NULL == delPeriodicTxPtrnParams)
11326 {
11327 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11328 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11329 __func__);
11330
11331 return VOS_STATUS_E_NOMEM;
11332 }
11333
11334 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11335 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11336
11337 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11338 delPeriodicTxPtrnParams->pUserData = pWDA;
11339
11340 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11341
11342 if (WDI_STATUS_PENDING == wdiStatus)
11343 {
11344 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11345 "Pending received for %s:%d", __func__, __LINE__ );
11346 }
11347 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11348 {
11349 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11350 "Failure in %s:%d", __func__, __LINE__ );
11351 }
11352
11353 vos_mem_free(delPeriodicTxPtrnParams);
11354
11355 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11356}
11357
Rajeev79dbe4c2013-10-05 11:03:42 +053011358#ifdef FEATURE_WLAN_BATCH_SCAN
11359/*
11360 * FUNCTION: WDA_ProcessStopBatchScanInd
11361 *
11362 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11363 *
11364 * PARAM:
11365 * pWDA: pointer to WDA context
11366 * pReq: pointer to stop batch scan request
11367 */
11368VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11369 tSirStopBatchScanInd *pReq)
11370{
11371 WDI_Status wdiStatus;
11372 WDI_StopBatchScanIndType wdiReq;
11373
11374 wdiReq.param = pReq->param;
11375
11376 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11377
11378 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11379 {
11380 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11381 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11382 }
11383
11384 vos_mem_free(pReq);
11385
11386 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11387}
11388/*==========================================================================
11389 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11390
11391 DESCRIPTION
11392 API to pull batch scan result from FW
11393
11394 PARAMETERS
11395 pWDA: Pointer to WDA context
11396 pGetBatchScanReq: Pointer to get batch scan result indication
11397
11398 RETURN VALUE
11399 NONE
11400
11401===========================================================================*/
11402VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11403 tSirTriggerBatchScanResultInd *pReq)
11404{
11405 WDI_Status wdiStatus;
11406 WDI_TriggerBatchScanResultIndType wdiReq;
11407
11408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11409 "------> %s " ,__func__);
11410
11411 wdiReq.param = pReq->param;
11412
11413 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11414
11415 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11416 {
11417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11418 "Trigger batch scan result ind failed %s:%d",
11419 __func__, wdiStatus);
11420 }
11421
11422 vos_mem_free(pReq);
11423
11424 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11425}
11426
11427/*==========================================================================
11428 FUNCTION WDA_SetBatchScanRespCallback
11429
11430 DESCRIPTION
11431 API to process set batch scan response from FW
11432
11433 PARAMETERS
11434 pRsp: Pointer to set batch scan response
11435 pUserData: Pointer to user data
11436
11437 RETURN VALUE
11438 NONE
11439
11440===========================================================================*/
11441void WDA_SetBatchScanRespCallback
11442(
11443 WDI_SetBatchScanRspType *pRsp,
11444 void* pUserData
11445)
11446{
11447 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11448 tpAniSirGlobal pMac;
11449 void *pCallbackContext;
11450 tWDA_CbContext *pWDA = NULL ;
11451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11452
11453
11454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11455 "<------ %s " ,__func__);
11456 if (NULL == pWdaParams)
11457 {
11458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11459 "%s: pWdaParams received NULL", __func__);
11460 VOS_ASSERT(0) ;
11461 return ;
11462 }
11463
11464 /*extract WDA context*/
11465 pWDA = pWdaParams->pWdaContext;
11466 if (NULL == pWDA)
11467 {
11468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11469 "%s:pWDA is NULL can't invole HDD callback",
11470 __func__);
11471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11472 vos_mem_free(pWdaParams->wdaMsgParam);
11473 vos_mem_free(pWdaParams);
11474 VOS_ASSERT(0);
11475 return;
11476 }
11477
11478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11479 vos_mem_free(pWdaParams->wdaMsgParam);
11480 vos_mem_free(pWdaParams);
11481
11482 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11483 if (NULL == pMac)
11484 {
11485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11486 "%s:pMac is NULL", __func__);
11487 VOS_ASSERT(0);
11488 return;
11489 }
11490
11491 pHddSetBatchScanRsp =
11492 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11493 if (NULL == pHddSetBatchScanRsp)
11494 {
11495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11496 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11497 VOS_ASSERT(0);
11498 return;
11499 }
11500
11501 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11502
11503 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11504 /*call hdd callback with set batch scan response data*/
11505 if(pMac->pmc.setBatchScanReqCallback)
11506 {
11507 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11508 }
11509 else
11510 {
11511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11512 "%s:HDD callback is null", __func__);
11513 VOS_ASSERT(0);
11514 }
11515
11516 vos_mem_free(pHddSetBatchScanRsp);
11517 return ;
11518}
11519
11520/*==========================================================================
11521 FUNCTION WDA_ProcessSetBatchScanReq
11522
11523 DESCRIPTION
11524 API to send set batch scan request to WDI
11525
11526 PARAMETERS
11527 pWDA: Pointer to WDA context
11528 pSetBatchScanReq: Pointer to set batch scan req
11529
11530 RETURN VALUE
11531 NONE
11532
11533===========================================================================*/
11534VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11535 tSirSetBatchScanReq *pSetBatchScanReq)
11536{
11537 WDI_Status status;
11538 tWDA_ReqParams *pWdaParams ;
11539 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11540
11541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11542 "------> %s " ,__func__);
11543
11544 pWdiSetBatchScanReq =
11545 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11546 if (NULL == pWdiSetBatchScanReq)
11547 {
11548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11549 "%s: VOS MEM Alloc Failure", __func__);
11550 vos_mem_free(pSetBatchScanReq);
11551 VOS_ASSERT(0);
11552 return VOS_STATUS_E_NOMEM;
11553 }
11554
11555 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11556 if (NULL == pWdaParams)
11557 {
11558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11559 "%s: VOS MEM Alloc Failure", __func__);
11560 VOS_ASSERT(0);
11561 vos_mem_free(pSetBatchScanReq);
11562 vos_mem_free(pWdiSetBatchScanReq);
11563 return VOS_STATUS_E_NOMEM;
11564 }
11565
11566 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11567 pWdiSetBatchScanReq->numberOfScansToBatch =
11568 pSetBatchScanReq->numberOfScansToBatch;
11569 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11570 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11571 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11572
11573 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11574 pWdaParams->pWdaContext = pWDA;
11575 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11576
11577 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11578 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11579 if (IS_WDI_STATUS_FAILURE(status))
11580 {
11581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11582 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11584 vos_mem_free(pWdaParams->wdaMsgParam);
11585 vos_mem_free(pWdaParams);
11586 }
11587 return CONVERT_WDI2VOS_STATUS(status);
11588}
11589
11590#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011591/*
11592 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11593 *
11594 * DESCRIPTION: This function sends start/update OBSS scan
11595 * inidcation message to WDI
11596 *
11597 * PARAM:
11598 * pWDA: pointer to WDA context
11599 * pReq: pointer to start OBSS scan request
11600 */
11601VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11602 tSirHT40OBSSScanInd *pReq)
11603{
11604 WDI_Status status;
11605 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11606 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011607
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11609 "------> %s " ,__func__);
11610 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11611 wdiOBSSScanParams.pUserData = pWDA;
11612
11613 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11614 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11615 pWdiOBSSScanInd->scanType = pReq->scanType;
11616 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11617 pReq->OBSSScanActiveDwellTime;
11618 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11619 pReq->OBSSScanPassiveDwellTime;
11620 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11621 pReq->BSSChannelWidthTriggerScanInterval;
11622 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11623 pReq->BSSWidthChannelTransitionDelayFactor;
11624 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11625 pReq->OBSSScanActiveTotalPerChannel;
11626 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11627 pReq->OBSSScanPassiveTotalPerChannel;
11628 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11629 pReq->OBSSScanActivityThreshold;
11630 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11631 vos_mem_copy(pWdiOBSSScanInd->channels,
11632 pReq->channels,
11633 pReq->channelCount);
11634 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11635 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11636 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11637 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11638 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11639
11640 vos_mem_copy(pWdiOBSSScanInd->ieField,
11641 pReq->ieField,
11642 pReq->ieFieldLen);
11643
11644 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11645 if (WDI_STATUS_PENDING == status)
11646 {
11647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11648 "Pending received for %s:%d ",__func__,__LINE__ );
11649 }
11650 else if (WDI_STATUS_SUCCESS_SYNC != status)
11651 {
11652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11653 "Failure in %s:%d ",__func__,__LINE__ );
11654 }
11655 return CONVERT_WDI2VOS_STATUS(status) ;
11656}
11657/*
11658 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11659 *
11660 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11661 *
11662 * PARAM:
11663 * pWDA: pointer to WDA context
11664 * pReq: pointer to stop batch scan request
11665 */
11666VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11667 tANI_U8 *bssIdx)
11668{
11669 WDI_Status status;
11670
11671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11672 "------> %s " ,__func__);
11673
11674 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11675 if (WDI_STATUS_PENDING == status)
11676 {
11677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11678 "Pending received for %s:%d ",__func__,__LINE__ );
11679 }
11680 else if (WDI_STATUS_SUCCESS_SYNC != status)
11681 {
11682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11683 "Failure in %s:%d ",__func__,__LINE__ );
11684 }
11685 return CONVERT_WDI2VOS_STATUS(status) ;
11686}
Yue Mab9c86f42013-08-14 15:59:08 -070011687/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011688 * FUNCTION: WDA_ProcessRateUpdateInd
11689 *
11690 */
11691VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11692 tSirRateUpdateInd *pRateUpdateParams)
11693{
11694 WDI_Status wdiStatus;
11695 WDI_RateUpdateIndParams rateUpdateParams;
11696
11697 vos_mem_copy(rateUpdateParams.bssid,
11698 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11699
11700 rateUpdateParams.ucastDataRateTxFlag =
11701 pRateUpdateParams->ucastDataRateTxFlag;
11702 rateUpdateParams.reliableMcastDataRateTxFlag =
11703 pRateUpdateParams->reliableMcastDataRateTxFlag;
11704 rateUpdateParams.mcastDataRate24GHzTxFlag =
11705 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11706 rateUpdateParams.mcastDataRate5GHzTxFlag =
11707 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11708
11709 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11710 rateUpdateParams.reliableMcastDataRate =
11711 pRateUpdateParams->reliableMcastDataRate;
11712 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11713 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11714
11715 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11716 rateUpdateParams.pUserData = pWDA;
11717
11718 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11719
11720 if (WDI_STATUS_PENDING == wdiStatus)
11721 {
11722 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11723 "Pending received for %s:%d", __func__, __LINE__ );
11724 }
11725 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11726 {
11727 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11728 "Failure in %s:%d", __func__, __LINE__ );
11729 }
11730
11731 vos_mem_free(pRateUpdateParams);
11732
11733 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11734}
11735
11736/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011737 * -------------------------------------------------------------------------
11738 * DATA interface with WDI for Mgmt Frames
11739 * -------------------------------------------------------------------------
11740 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011741/*
11742 * FUNCTION: WDA_TxComplete
11743 * Callback function for the WDA_TxPacket
11744 */
11745VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11746 VOS_STATUS status )
11747{
11748
11749 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11750 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011751 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011752
11753 if(NULL == wdaContext)
11754 {
11755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11756 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011757 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011758 VOS_ASSERT(0);
11759 return VOS_STATUS_E_FAILURE;
11760 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011761
11762 /*Check if frame was timed out or not*/
11763 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11764 (v_PVOID_t)&uUserData);
11765
11766 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11767 {
11768 /*Discard frame - no further processing is needed*/
11769 vos_pkt_return_packet(pData);
11770 return VOS_STATUS_SUCCESS;
11771 }
11772
Jeff Johnson295189b2012-06-20 16:38:30 -070011773 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11774 if( NULL!=wdaContext->pTxCbFunc)
11775 {
11776 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011777 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 {
11779 wdaContext->pTxCbFunc(pMac, pData);
11780 }
11781 else
11782 {
11783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011784 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011785 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 //Return from here since we reaching here because the packet already timeout
11787 return status;
11788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011789 }
11790
11791 /*
11792 * Trigger the event to bring the HAL TL Tx complete function to come
11793 * out of wait
11794 * Let the coe above to complete the packet first. When this event is set,
11795 * the thread waiting for the event may run and set Vospacket_freed causing the original
11796 * packet not being freed.
11797 */
11798 status = vos_event_set(&wdaContext->txFrameEvent);
11799 if(!VOS_IS_STATUS_SUCCESS(status))
11800 {
11801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011802 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011803 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011804 return status;
11805}
Jeff Johnson295189b2012-06-20 16:38:30 -070011806/*
11807 * FUNCTION: WDA_TxPacket
11808 * Forward TX management frame to WDI
11809 */
11810VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11811 void *pFrmBuf,
11812 tANI_U16 frmLen,
11813 eFrameType frmType,
11814 eFrameTxDir txDir,
11815 tANI_U8 tid,
11816 pWDATxRxCompFunc pCompFunc,
11817 void *pData,
11818 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011819 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011820{
11821 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11822 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11823 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11824 tANI_U8 eventIdx = 0;
11825 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11826 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011827 if((NULL == pWDA)||(NULL == pFrmBuf))
11828 {
11829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011830 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011831 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011832 VOS_ASSERT(0);
11833 return VOS_STATUS_E_FAILURE;
11834 }
11835
11836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011837 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011838 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11839 if(NULL == pMac)
11840 {
11841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011842 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011843 VOS_ASSERT(0);
11844 return VOS_STATUS_E_FAILURE;
11845 }
11846
11847
11848
11849 /* store the call back function in WDA context */
11850 pWDA->pTxCbFunc = pCompFunc;
11851 /* store the call back for the function of ackTxComplete */
11852 if( pAckTxComp )
11853 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011854 if( NULL != pWDA->pAckTxCbFunc )
11855 {
11856 /* Already TxComp is active no need to active again */
11857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011858 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011859 pWDA->pAckTxCbFunc( pMac, 0);
11860 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011861
Jeff Johnsone7245742012-09-05 17:12:55 -070011862 if( VOS_STATUS_SUCCESS !=
11863 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11864 {
11865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11866 "Tx Complete timeout Timer Stop Failed ");
11867 }
11868 else
11869 {
11870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011871 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011872 }
11873 }
11874
11875 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11876 pWDA->pAckTxCbFunc = pAckTxComp;
11877 if( VOS_STATUS_SUCCESS !=
11878 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11879 {
11880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11881 "Tx Complete Timer Start Failed ");
11882 pWDA->pAckTxCbFunc = NULL;
11883 return eHAL_STATUS_FAILURE;
11884 }
11885 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011886 /* Reset the event to be not signalled */
11887 status = vos_event_reset(&pWDA->txFrameEvent);
11888 if(!VOS_IS_STATUS_SUCCESS(status))
11889 {
11890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011891 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011892 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11893 if( pAckTxComp )
11894 {
11895 pWDA->pAckTxCbFunc = NULL;
11896 if( VOS_STATUS_SUCCESS !=
11897 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11898 {
11899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11900 "Tx Complete timeout Timer Stop Failed ");
11901 }
11902 }
11903 return VOS_STATUS_E_FAILURE;
11904 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011905
11906 /* If Peer Sta mask is set don't overwrite to self sta */
11907 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011908 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011909 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011910 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011911 else
11912 {
Ganesh K08bce952012-12-13 15:04:41 -080011913 /* Get system role, use the self station if in unknown role or STA role */
11914 systemRole = wdaGetGlobalSystemRole(pMac);
11915 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11916 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080011917#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011918 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011919#endif
Ganesh K08bce952012-12-13 15:04:41 -080011920 ))
11921 {
11922 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11923 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011924 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011925
Jeff Johnsone7245742012-09-05 17:12:55 -070011926 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11927 disassoc frame reaches the HW, HAL has already deleted the peer station */
11928 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011930 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011931 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011932 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011933 /*Send Probe request frames on self sta idx*/
11934 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011935 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 /* Since we donot want probe responses to be retried, send probe responses
11937 through the NO_ACK queues */
11938 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11939 {
11940 //probe response is sent out using self station and no retries options.
11941 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11942 }
11943 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11944 {
11945 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11946 }
11947 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011948 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011949
11950 /*Set frame tag to 0
11951 We will use the WDA user data in order to tag a frame as expired*/
11952 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11953 (v_PVOID_t)0);
11954
11955
11956 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11957 frmLen, ucTypeSubType, tid,
11958 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11959 {
11960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011961 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011962 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011963 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 -070011964 if( pAckTxComp )
11965 {
11966 pWDA->pAckTxCbFunc = NULL;
11967 if( VOS_STATUS_SUCCESS !=
11968 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11969 {
11970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11971 "Tx Complete timeout Timer Stop Failed ");
11972 }
11973 }
11974 return VOS_STATUS_E_FAILURE;
11975 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011976 /*
11977 * Wait for the event to be set by the TL, to get the response of TX
11978 * complete, this event should be set by the Callback function called by TL
11979 */
11980 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11981 &eventIdx);
11982 if(!VOS_IS_STATUS_SUCCESS(status))
11983 {
11984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11985 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011986 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011987 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11988 after the packet gets completed(packet freed once)*/
11989
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011990 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Mihir Shete40a55652014-03-02 14:14:47 +053011991 WDA_TransportChannelDebug(pMac, 1, WPAL_DEBUG_TX_DESC_RESYNC);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011992
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011993 /*Tag Frame as timed out for later deletion*/
11994 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11995 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11996
Jeff Johnson295189b2012-06-20 16:38:30 -070011997 /* check whether the packet was freed already,so need not free again when
11998 * TL calls the WDA_Txcomplete routine
11999 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012000 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12001 /*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 -070012002 {
12003 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012004 } */
12005
Jeff Johnson295189b2012-06-20 16:38:30 -070012006 if( pAckTxComp )
12007 {
12008 pWDA->pAckTxCbFunc = NULL;
12009 if( VOS_STATUS_SUCCESS !=
12010 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12011 {
12012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12013 "Tx Complete timeout Timer Stop Failed ");
12014 }
12015 }
12016 status = VOS_STATUS_E_FAILURE;
12017 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012018#ifdef WLAN_DUMP_MGMTFRAMES
12019 if (VOS_IS_STATUS_SUCCESS(status))
12020 {
12021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12022 "%s() TX packet : SubType %d", __func__,pFc->subType);
12023 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12024 pData, frmLen);
12025 }
12026#endif
12027
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012028 if (VOS_IS_STATUS_SUCCESS(status))
12029 {
12030 if (pMac->fEnableDebugLog & 0x1)
12031 {
12032 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12033 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12034 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12035 {
12036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12037 pFc->type, pFc->subType);
12038 }
12039 }
12040 }
12041
12042
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 return status;
12044}
Jeff Johnson295189b2012-06-20 16:38:30 -070012045/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012046 * FUNCTION: WDA_ProcessDHCPStartInd
12047 * Forward DHCP Start to WDI
12048 */
12049static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12050 tAniDHCPInd *dhcpStartInd)
12051{
12052 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012053 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012054
c_hpothu0b0cab72014-02-13 21:52:40 +053012055 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12056 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012057 sizeof(tSirMacAddr));
12058
c_hpothu0b0cab72014-02-13 21:52:40 +053012059 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012060
c_hpothu0b0cab72014-02-13 21:52:40 +053012061 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012062 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12064 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012065 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012066 else if (WDI_STATUS_SUCCESS_SYNC != status)
12067 {
12068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12069 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12070 }
12071
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012072 vos_mem_free(dhcpStartInd);
12073 return CONVERT_WDI2VOS_STATUS(status) ;
12074}
12075
12076 /*
12077 * FUNCTION: WDA_ProcessDHCPStopInd
12078 * Forward DHCP Stop to WDI
12079 */
12080 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12081 tAniDHCPInd *dhcpStopInd)
12082 {
12083 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012084 WDI_DHCPInd wdiDHCPInd;
12085
12086 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12087 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12088
12089 status = WDI_dhcpStopInd(&wdiDHCPInd);
12090
12091 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012092 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12094 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012095 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012096 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012097 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12099 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012100 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012101
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012102 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012103
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012104 return CONVERT_WDI2VOS_STATUS(status) ;
12105 }
12106
12107/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 * FUNCTION: WDA_McProcessMsg
12109 * Trigger DAL-AL to start CFG download
12110 */
12111VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12112{
12113 VOS_STATUS status = VOS_STATUS_SUCCESS;
12114 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012115 if(NULL == pMsg)
12116 {
12117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012118 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012119 VOS_ASSERT(0);
12120 return VOS_STATUS_E_FAILURE;
12121 }
12122
12123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012124 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012125
12126 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12127 if(NULL == pWDA )
12128 {
12129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012130 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012131 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012132 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012133 return VOS_STATUS_E_FAILURE;
12134 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012135 /* Process all the WDA messages.. */
12136 switch( pMsg->type )
12137 {
12138 case WNI_CFG_DNLD_REQ:
12139 {
12140 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012141 /* call WDA complete event if config download success */
12142 if( VOS_IS_STATUS_SUCCESS(status) )
12143 {
12144 vos_WDAComplete_cback(pVosContext);
12145 }
12146 else
12147 {
12148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12149 "WDA Config Download failure" );
12150 }
12151 break ;
12152 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012153 /*
12154 * Init SCAN request from PE, convert it into DAL format
12155 * and send it to DAL
12156 */
12157 case WDA_INIT_SCAN_REQ:
12158 {
12159 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12160 break ;
12161 }
12162 /* start SCAN request from PE */
12163 case WDA_START_SCAN_REQ:
12164 {
12165 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12166 break ;
12167 }
12168 /* end SCAN request from PE */
12169 case WDA_END_SCAN_REQ:
12170 {
12171 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12172 break ;
12173 }
12174 /* end SCAN request from PE */
12175 case WDA_FINISH_SCAN_REQ:
12176 {
12177 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12178 break ;
12179 }
12180 /* join request from PE */
12181 case WDA_CHNL_SWITCH_REQ:
12182 {
12183 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12184 {
12185 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12186 }
12187 else
12188 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012189 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12190 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12191 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12192 {
12193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12194 "call ProcessChannelSwitchReq_V1" );
12195 WDA_ProcessChannelSwitchReq_V1(pWDA,
12196 (tSwitchChannelParams*)pMsg->bodyptr) ;
12197 }
12198 else
12199 {
12200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12201 "call ProcessChannelSwitchReq" );
12202 WDA_ProcessChannelSwitchReq(pWDA,
12203 (tSwitchChannelParams*)pMsg->bodyptr) ;
12204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012205 }
12206 break ;
12207 }
12208 /* ADD BSS request from PE */
12209 case WDA_ADD_BSS_REQ:
12210 {
12211 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12212 break ;
12213 }
12214 case WDA_ADD_STA_REQ:
12215 {
12216 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12217 break ;
12218 }
12219 case WDA_DELETE_BSS_REQ:
12220 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012221 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12222 break ;
12223 }
12224 case WDA_DELETE_STA_REQ:
12225 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012226 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12227 break ;
12228 }
12229 case WDA_CONFIG_PARAM_UPDATE_REQ:
12230 {
12231 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12232 break ;
12233 }
12234 case WDA_SET_BSSKEY_REQ:
12235 {
12236 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12237 break ;
12238 }
12239 case WDA_SET_STAKEY_REQ:
12240 {
12241 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12242 break ;
12243 }
12244 case WDA_SET_STA_BCASTKEY_REQ:
12245 {
12246 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12247 break ;
12248 }
12249 case WDA_REMOVE_BSSKEY_REQ:
12250 {
12251 WDA_ProcessRemoveBssKeyReq(pWDA,
12252 (tRemoveBssKeyParams *)pMsg->bodyptr);
12253 break ;
12254 }
12255 case WDA_REMOVE_STAKEY_REQ:
12256 {
12257 WDA_ProcessRemoveStaKeyReq(pWDA,
12258 (tRemoveStaKeyParams *)pMsg->bodyptr);
12259 break ;
12260 }
12261 case WDA_REMOVE_STA_BCASTKEY_REQ:
12262 {
12263 /* TODO: currently UMAC is not sending this request, Add the code for
12264 handling this request when UMAC supports */
12265 break;
12266 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012267#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012268 case WDA_TSM_STATS_REQ:
12269 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012270 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012271 break;
12272 }
12273#endif
12274 case WDA_UPDATE_EDCA_PROFILE_IND:
12275 {
12276 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12277 break;
12278 }
12279 case WDA_ADD_TS_REQ:
12280 {
12281 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12282 break;
12283 }
12284 case WDA_DEL_TS_REQ:
12285 {
12286 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12287 break;
12288 }
12289 case WDA_ADDBA_REQ:
12290 {
12291 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12292 break;
12293 }
12294 case WDA_DELBA_IND:
12295 {
12296 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12297 break;
12298 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012299 case WDA_UPDATE_CHAN_LIST_REQ:
12300 {
12301 WDA_ProcessUpdateChannelList(pWDA,
12302 (tSirUpdateChanList *)pMsg->bodyptr);
12303 break;
12304 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012305 case WDA_SET_LINK_STATE:
12306 {
12307 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12308 break;
12309 }
12310 case WDA_GET_STATISTICS_REQ:
12311 {
12312 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12313 break;
12314 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012315#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012316 case WDA_GET_ROAM_RSSI_REQ:
12317 {
12318 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12319 break;
12320 }
12321#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012322 case WDA_PWR_SAVE_CFG:
12323 {
12324 if(pWDA->wdaState == WDA_READY_STATE)
12325 {
12326 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12327 }
12328 else
12329 {
12330 if(NULL != pMsg->bodyptr)
12331 {
12332 vos_mem_free(pMsg->bodyptr);
12333 }
12334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12335 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12336 }
12337 break;
12338 }
12339 case WDA_ENTER_IMPS_REQ:
12340 {
12341 if(pWDA->wdaState == WDA_READY_STATE)
12342 {
12343 WDA_ProcessEnterImpsReq(pWDA);
12344 }
12345 else
12346 {
12347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12348 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12349 }
12350 break;
12351 }
12352 case WDA_EXIT_IMPS_REQ:
12353 {
12354 if(pWDA->wdaState == WDA_READY_STATE)
12355 {
12356 WDA_ProcessExitImpsReq(pWDA);
12357 }
12358 else
12359 {
12360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12361 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12362 }
12363 break;
12364 }
12365 case WDA_ENTER_BMPS_REQ:
12366 {
12367 if(pWDA->wdaState == WDA_READY_STATE)
12368 {
12369 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12370 }
12371 else
12372 {
12373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12374 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12375 }
12376 break;
12377 }
12378 case WDA_EXIT_BMPS_REQ:
12379 {
12380 if(pWDA->wdaState == WDA_READY_STATE)
12381 {
12382 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12383 }
12384 else
12385 {
12386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12387 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12388 }
12389 break;
12390 }
12391 case WDA_ENTER_UAPSD_REQ:
12392 {
12393 if(pWDA->wdaState == WDA_READY_STATE)
12394 {
12395 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12396 }
12397 else
12398 {
12399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12400 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12401 }
12402 break;
12403 }
12404 case WDA_EXIT_UAPSD_REQ:
12405 {
12406 if(pWDA->wdaState == WDA_READY_STATE)
12407 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012408 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012409 }
12410 else
12411 {
12412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12413 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12414 }
12415 break;
12416 }
12417 case WDA_UPDATE_UAPSD_IND:
12418 {
12419 if(pWDA->wdaState == WDA_READY_STATE)
12420 {
12421 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12422 }
12423 else
12424 {
12425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12426 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12427 }
12428 break;
12429 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012430 case WDA_REGISTER_PE_CALLBACK :
12431 {
12432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12433 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12434 /*TODO: store the PE callback */
12435 /* Do Nothing? MSG Body should be freed at here */
12436 if(NULL != pMsg->bodyptr)
12437 {
12438 vos_mem_free(pMsg->bodyptr);
12439 }
12440 break;
12441 }
12442 case WDA_SYS_READY_IND :
12443 {
12444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12445 "Handling msg type WDA_SYS_READY_IND " );
12446 pWDA->wdaState = WDA_READY_STATE;
12447 if(NULL != pMsg->bodyptr)
12448 {
12449 vos_mem_free(pMsg->bodyptr);
12450 }
12451 break;
12452 }
12453 case WDA_BEACON_FILTER_IND :
12454 {
12455 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12456 break;
12457 }
12458 case WDA_BTC_SET_CFG:
12459 {
12460 /*TODO: handle this while dealing with BTC */
12461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12462 "Handling msg type WDA_BTC_SET_CFG " );
12463 /* Do Nothing? MSG Body should be freed at here */
12464 if(NULL != pMsg->bodyptr)
12465 {
12466 vos_mem_free(pMsg->bodyptr);
12467 }
12468 break;
12469 }
12470 case WDA_SIGNAL_BT_EVENT:
12471 {
12472 /*TODO: handle this while dealing with BTC */
12473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12474 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12475 /* Do Nothing? MSG Body should be freed at here */
12476 if(NULL != pMsg->bodyptr)
12477 {
12478 vos_mem_free(pMsg->bodyptr);
12479 }
12480 break;
12481 }
12482 case WDA_CFG_RXP_FILTER_REQ:
12483 {
12484 WDA_ProcessConfigureRxpFilterReq(pWDA,
12485 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12486 break;
12487 }
12488 case WDA_SET_HOST_OFFLOAD:
12489 {
12490 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12491 break;
12492 }
12493 case WDA_SET_KEEP_ALIVE:
12494 {
12495 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12496 break;
12497 }
12498#ifdef WLAN_NS_OFFLOAD
12499 case WDA_SET_NS_OFFLOAD:
12500 {
12501 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12502 break;
12503 }
12504#endif //WLAN_NS_OFFLOAD
12505 case WDA_ADD_STA_SELF_REQ:
12506 {
12507 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12508 break;
12509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012510 case WDA_DEL_STA_SELF_REQ:
12511 {
12512 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12513 break;
12514 }
12515 case WDA_WOWL_ADD_BCAST_PTRN:
12516 {
12517 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12518 break;
12519 }
12520 case WDA_WOWL_DEL_BCAST_PTRN:
12521 {
12522 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12523 break;
12524 }
12525 case WDA_WOWL_ENTER_REQ:
12526 {
12527 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12528 break;
12529 }
12530 case WDA_WOWL_EXIT_REQ:
12531 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012532 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012533 break;
12534 }
12535 case WDA_TL_FLUSH_AC_REQ:
12536 {
12537 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12538 break;
12539 }
12540 case WDA_SIGNAL_BTAMP_EVENT:
12541 {
12542 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12543 break;
12544 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053012545#ifdef WLAN_FEATURE_LINK_LAYER_STATS
12546 case WDA_LINK_LAYER_STATS_SET_REQ:
12547 {
12548 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
12549 break;
12550 }
12551 case WDA_LINK_LAYER_STATS_GET_REQ:
12552 {
12553 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
12554 break;
12555 }
12556 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
12557 {
12558 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
12559 break;
12560 }
12561#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Jeff Johnson295189b2012-06-20 16:38:30 -070012562#ifdef WDA_UT
12563 case WDA_WDI_EVENT_MSG:
12564 {
12565 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12566 break ;
12567 }
12568#endif
12569 case WDA_UPDATE_BEACON_IND:
12570 {
12571 WDA_ProcessUpdateBeaconParams(pWDA,
12572 (tUpdateBeaconParams *)pMsg->bodyptr);
12573 break;
12574 }
12575 case WDA_SEND_BEACON_REQ:
12576 {
12577 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12578 break;
12579 }
12580 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12581 {
12582 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12583 (tSendProbeRespParams *)pMsg->bodyptr);
12584 break;
12585 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012586#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070012587 case WDA_SET_MAX_TX_POWER_REQ:
12588 {
12589 WDA_ProcessSetMaxTxPowerReq(pWDA,
12590 (tMaxTxPowerParams *)pMsg->bodyptr);
12591 break;
12592 }
12593#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012594 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12595 {
12596 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12597 pMsg->bodyptr);
12598 break;
12599 }
schang86c22c42013-03-13 18:41:24 -070012600 case WDA_SET_TX_POWER_REQ:
12601 {
12602 WDA_ProcessSetTxPowerReq(pWDA,
12603 (tSirSetTxPowerReq *)pMsg->bodyptr);
12604 break;
12605 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012606 case WDA_SET_P2P_GO_NOA_REQ:
12607 {
12608 WDA_ProcessSetP2PGONOAReq(pWDA,
12609 (tP2pPsParams *)pMsg->bodyptr);
12610 break;
12611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012612 /* timer related messages */
12613 case WDA_TIMER_BA_ACTIVITY_REQ:
12614 {
12615 WDA_BaCheckActivity(pWDA) ;
12616 break ;
12617 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012618
12619 /* timer related messages */
12620 case WDA_TIMER_TRAFFIC_STATS_IND:
12621 {
12622 WDA_TimerTrafficStatsInd(pWDA);
12623 break;
12624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012625#ifdef WLAN_FEATURE_VOWIFI_11R
12626 case WDA_AGGR_QOS_REQ:
12627 {
12628 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12629 break;
12630 }
12631#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012632 case WDA_FTM_CMD_REQ:
12633 {
12634 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12635 break ;
12636 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012637#ifdef FEATURE_OEM_DATA_SUPPORT
12638 case WDA_START_OEM_DATA_REQ:
12639 {
12640 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12641 break;
12642 }
12643#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012644 /* Tx Complete Time out Indication */
12645 case WDA_TX_COMPLETE_TIMEOUT_IND:
12646 {
12647 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12648 break;
12649 }
12650 case WDA_WLAN_SUSPEND_IND:
12651 {
12652 WDA_ProcessWlanSuspendInd(pWDA,
12653 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12654 break;
12655 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012656 case WDA_WLAN_RESUME_REQ:
12657 {
12658 WDA_ProcessWlanResumeReq(pWDA,
12659 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12660 break;
12661 }
12662
12663 case WDA_UPDATE_CF_IND:
12664 {
12665 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12666 pMsg->bodyptr = NULL;
12667 break;
12668 }
12669#ifdef FEATURE_WLAN_SCAN_PNO
12670 case WDA_SET_PNO_REQ:
12671 {
12672 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12673 break;
12674 }
12675 case WDA_UPDATE_SCAN_PARAMS_REQ:
12676 {
12677 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12678 break;
12679 }
12680 case WDA_SET_RSSI_FILTER_REQ:
12681 {
12682 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12683 break;
12684 }
12685#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012686#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012687 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012688 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012689 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012690 break;
12691 }
12692#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012693 case WDA_SET_TX_PER_TRACKING_REQ:
12694 {
12695 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12696 break;
12697 }
12698
12699#ifdef WLAN_FEATURE_PACKET_FILTERING
12700 case WDA_8023_MULTICAST_LIST_REQ:
12701 {
12702 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12703 break;
12704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012705 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12706 {
12707 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12708 break;
12709 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012710 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12711 {
12712 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12713 break;
12714 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012715 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12716 {
12717 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12718 break;
12719 }
12720#endif // WLAN_FEATURE_PACKET_FILTERING
12721
12722
12723 case WDA_TRANSMISSION_CONTROL_IND:
12724 {
12725 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12726 break;
12727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012728 case WDA_SET_POWER_PARAMS_REQ:
12729 {
12730 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12731 break;
12732 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012733#ifdef WLAN_FEATURE_GTK_OFFLOAD
12734 case WDA_GTK_OFFLOAD_REQ:
12735 {
12736 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12737 break;
12738 }
12739
12740 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12741 {
12742 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12743 break;
12744 }
12745#endif //WLAN_FEATURE_GTK_OFFLOAD
12746
12747 case WDA_SET_TM_LEVEL_REQ:
12748 {
12749 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12750 break;
12751 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012752
Mohit Khanna4a70d262012-09-11 16:30:12 -070012753 case WDA_UPDATE_OP_MODE:
12754 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012755 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12756 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12757 {
12758 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12759 }
12760 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012761 {
12762 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12763 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12764 else
12765 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012766 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012767 }
12768 else
12769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012770 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012771 break;
12772 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012773#ifdef WLAN_FEATURE_11W
12774 case WDA_EXCLUDE_UNENCRYPTED_IND:
12775 {
12776 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12777 break;
12778 }
12779#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012780#ifdef FEATURE_WLAN_TDLS
12781 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12782 {
12783 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12784 break;
12785 }
12786#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012787 case WDA_DHCP_START_IND:
12788 {
12789 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12790 break;
12791 }
12792 case WDA_DHCP_STOP_IND:
12793 {
12794 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12795 break;
12796 }
Leo Chang9056f462013-08-01 19:21:11 -070012797#ifdef FEATURE_WLAN_LPHB
12798 case WDA_LPHB_CONF_REQ:
12799 {
12800 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12801 break;
12802 }
12803#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012804 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12805 {
12806 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12807 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12808 break;
12809 }
12810 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12811 {
12812 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12813 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12814 break;
12815 }
12816
Rajeev79dbe4c2013-10-05 11:03:42 +053012817#ifdef FEATURE_WLAN_BATCH_SCAN
12818 case WDA_SET_BATCH_SCAN_REQ:
12819 {
12820 WDA_ProcessSetBatchScanReq(pWDA,
12821 (tSirSetBatchScanReq *)pMsg->bodyptr);
12822 break;
12823 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012824 case WDA_RATE_UPDATE_IND:
12825 {
12826 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12827 break;
12828 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012829 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12830 {
12831 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12832 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12833 break;
12834 }
12835 case WDA_STOP_BATCH_SCAN_IND:
12836 {
12837 WDA_ProcessStopBatchScanInd(pWDA,
12838 (tSirStopBatchScanInd *)pMsg->bodyptr);
12839 break;
12840 }
c_hpothu92367912014-05-01 15:18:17 +053012841 case WDA_GET_BCN_MISS_RATE_REQ:
12842 WDA_ProcessGetBcnMissRateReq(pWDA,
12843 (tSirBcnMissRateReq *)pMsg->bodyptr);
12844 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053012845#endif
12846
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012847 case WDA_HT40_OBSS_SCAN_IND:
12848 {
12849 WDA_ProcessHT40OBSSScanInd(pWDA,
12850 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12851 break;
12852 }
12853 case WDA_HT40_OBSS_STOP_SCAN_IND:
12854 {
12855 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12856 (tANI_U8*)pMsg->bodyptr);
12857 break;
12858 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012859 default:
12860 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053012861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070012862 "No Handling for msg type %x in WDA "
12863 ,pMsg->type);
12864 /* Do Nothing? MSG Body should be freed at here */
12865 if(NULL != pMsg->bodyptr)
12866 {
12867 vos_mem_free(pMsg->bodyptr);
12868 }
12869 //WDA_VOS_ASSERT(0) ;
12870 }
12871 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012872 return status ;
12873}
12874
Jeff Johnson295189b2012-06-20 16:38:30 -070012875/*
12876 * FUNCTION: WDA_LowLevelIndCallback
12877 * IND API callback from WDI, send Ind to PE
12878 */
12879void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12880 void* pUserData )
12881{
12882 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12883#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12884 tSirRSSINotification rssiNotification;
12885#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 if(NULL == pWDA)
12887 {
12888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012889 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 VOS_ASSERT(0);
12891 return ;
12892 }
12893
12894 switch(wdiLowLevelInd->wdiIndicationType)
12895 {
12896 case WDI_RSSI_NOTIFICATION_IND:
12897 {
12898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12899 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012900#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12901 rssiNotification.bReserved =
12902 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12903 rssiNotification.bRssiThres1NegCross =
12904 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12905 rssiNotification.bRssiThres1PosCross =
12906 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12907 rssiNotification.bRssiThres2NegCross =
12908 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12909 rssiNotification.bRssiThres2PosCross =
12910 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12911 rssiNotification.bRssiThres3NegCross =
12912 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12913 rssiNotification.bRssiThres3PosCross =
12914 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012915 rssiNotification.avgRssi = (v_S7_t)
12916 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012917 WLANTL_BMPSRSSIRegionChangedNotification(
12918 pWDA->pVosContext,
12919 &rssiNotification);
12920#endif
12921 break ;
12922 }
12923 case WDI_MISSED_BEACON_IND:
12924 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012925 tpSirSmeMissedBeaconInd pMissBeacInd =
12926 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12928 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012929 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012930 if(NULL == pMissBeacInd)
12931 {
12932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12933 "%s: VOS MEM Alloc Failure", __func__);
12934 break;
12935 }
12936 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12937 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12938 pMissBeacInd->bssIdx =
12939 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12940 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012941 break ;
12942 }
12943 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12944 {
12945 /* TODO: Decode Ind and send Ind to PE */
12946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12947 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12948 break ;
12949 }
12950
12951 case WDI_MIC_FAILURE_IND:
12952 {
12953 tpSirSmeMicFailureInd pMicInd =
12954 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12955
12956 if(NULL == pMicInd)
12957 {
12958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012960 break;
12961 }
12962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12963 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012964 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12965 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12966 vos_mem_copy(pMicInd->bssId,
12967 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12968 sizeof(tSirMacAddr));
12969 vos_mem_copy(pMicInd->info.srcMacAddr,
12970 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12971 sizeof(tSirMacAddr));
12972 vos_mem_copy(pMicInd->info.taMacAddr,
12973 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12974 sizeof(tSirMacAddr));
12975 vos_mem_copy(pMicInd->info.dstMacAddr,
12976 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12977 sizeof(tSirMacAddr));
12978 vos_mem_copy(pMicInd->info.rxMacAddr,
12979 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12980 sizeof(tSirMacAddr));
12981 pMicInd->info.multicast =
12982 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12983 pMicInd->info.keyId=
12984 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12985 pMicInd->info.IV1=
12986 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12987 vos_mem_copy(pMicInd->info.TSC,
12988 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012989 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12990 (void *)pMicInd , 0) ;
12991 break ;
12992 }
12993 case WDI_FATAL_ERROR_IND:
12994 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012995 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012996 /* TODO: Decode Ind and send Ind to PE */
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12998 "Received WDI_FATAL_ERROR_IND from WDI ");
12999 break ;
13000 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013001 case WDI_DEL_STA_IND:
13002 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013003 tpDeleteStaContext pDelSTACtx =
13004 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13005
13006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13007 "Received WDI_DEL_STA_IND from WDI ");
13008 if(NULL == pDelSTACtx)
13009 {
13010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013012 break;
13013 }
13014 vos_mem_copy(pDelSTACtx->addr2,
13015 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13016 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013017 vos_mem_copy(pDelSTACtx->bssId,
13018 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13019 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013020 pDelSTACtx->assocId =
13021 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13022 pDelSTACtx->reasonCode =
13023 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13024 pDelSTACtx->staId =
13025 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013026 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13027 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013028 break ;
13029 }
13030 case WDI_COEX_IND:
13031 {
13032 tANI_U32 index;
13033 vos_msg_t vosMsg;
13034 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
13035 if(NULL == pSmeCoexInd)
13036 {
13037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013038 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013039 break;
13040 }
13041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13042 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 /* Message Header */
13044 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13045 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013046 /* Info from WDI Indication */
13047 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13048 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13049 {
13050 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13051 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013052 /* VOS message wrapper */
13053 vosMsg.type = eWNI_SME_COEX_IND;
13054 vosMsg.bodyptr = (void *)pSmeCoexInd;
13055 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013056 /* Send message to SME */
13057 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13058 {
13059 /* free the mem and return */
13060 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13061 }
13062 else
13063 {
13064 /* DEBUG */
13065 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13066 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13067 pSmeCoexInd->coexIndType,
13068 pSmeCoexInd->coexIndData[0],
13069 pSmeCoexInd->coexIndData[1],
13070 pSmeCoexInd->coexIndData[2],
13071 pSmeCoexInd->coexIndData[3]);
13072 }
13073 break;
13074 }
13075 case WDI_TX_COMPLETE_IND:
13076 {
13077 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13078 /* Calling TxCompleteAck Indication from wda context*/
13079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13080 "Complete Indication received from HAL");
13081 if( pWDA->pAckTxCbFunc )
13082 {
13083 if( VOS_STATUS_SUCCESS !=
13084 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13085 {
13086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13087 "Tx Complete timeout Timer Stop Failed ");
13088 }
13089 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13090 pWDA->pAckTxCbFunc = NULL;
13091 }
13092 else
13093 {
13094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13095 "Tx Complete Indication is received after timeout ");
13096 }
13097 break;
13098 }
Viral Modid86bde22012-12-10 13:09:21 -080013099 case WDI_P2P_NOA_START_IND :
13100 {
13101 tSirP2PNoaStart *pP2pNoaStart =
13102 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13103
13104 if (NULL == pP2pNoaStart)
13105 {
13106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13107 "Memory allocation failure, "
13108 "WDI_P2P_NOA_START_IND not forwarded");
13109 break;
13110 }
13111 pP2pNoaStart->status =
13112 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13113 pP2pNoaStart->bssIdx =
13114 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13115 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13116 (void *)pP2pNoaStart , 0) ;
13117 break;
13118 }
13119
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013120#ifdef FEATURE_WLAN_TDLS
13121 case WDI_TDLS_IND :
13122 {
13123 tSirTdlsInd *pTdlsInd =
13124 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13125
13126 if (NULL == pTdlsInd)
13127 {
13128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13129 "Memory allocation failure, "
13130 "WDI_TDLS_IND not forwarded");
13131 break;
13132 }
13133 pTdlsInd->status =
13134 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13135 pTdlsInd->assocId =
13136 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13137 pTdlsInd->staIdx =
13138 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13139 pTdlsInd->reasonCode =
13140 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13141 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13142 (void *)pTdlsInd , 0) ;
13143 break;
13144 }
13145#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013146 case WDI_P2P_NOA_ATTR_IND :
13147 {
13148 tSirP2PNoaAttr *pP2pNoaAttr =
13149 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13151 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013152 if (NULL == pP2pNoaAttr)
13153 {
13154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13155 "Memory allocation failure, "
13156 "WDI_P2P_NOA_ATTR_IND not forwarded");
13157 break;
13158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013159 pP2pNoaAttr->index =
13160 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13161 pP2pNoaAttr->oppPsFlag =
13162 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13163 pP2pNoaAttr->ctWin =
13164 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13165
13166 pP2pNoaAttr->uNoa1IntervalCnt =
13167 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13168 pP2pNoaAttr->uNoa1Duration =
13169 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13170 pP2pNoaAttr->uNoa1Interval =
13171 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13172 pP2pNoaAttr->uNoa1StartTime =
13173 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 pP2pNoaAttr->uNoa2IntervalCnt =
13175 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13176 pP2pNoaAttr->uNoa2Duration =
13177 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13178 pP2pNoaAttr->uNoa2Interval =
13179 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13180 pP2pNoaAttr->uNoa2StartTime =
13181 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13183 (void *)pP2pNoaAttr , 0) ;
13184 break;
13185 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013186#ifdef FEATURE_WLAN_SCAN_PNO
13187 case WDI_PREF_NETWORK_FOUND_IND:
13188 {
13189 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013190 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13191 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13192 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13193 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13194
Jeff Johnson295189b2012-06-20 16:38:30 -070013195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13196 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013197 if (NULL == pPrefNetworkFoundInd)
13198 {
13199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13200 "Memory allocation failure, "
13201 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013202 if (NULL !=
13203 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13204 {
13205 wpalMemoryFree(
13206 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13207 );
13208 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13209 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 break;
13211 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013212 /* Message Header */
13213 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013214 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013215
13216 /* Info from WDI Indication */
13217 pPrefNetworkFoundInd->ssId.length =
13218 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013219 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013220 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13221 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13222 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013223 if (NULL !=
13224 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13225 {
13226 pPrefNetworkFoundInd->frameLength =
13227 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13228 vos_mem_copy( pPrefNetworkFoundInd->data,
13229 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13230 pPrefNetworkFoundInd->frameLength);
13231 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13232 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13233 }
13234 else
13235 {
13236 pPrefNetworkFoundInd->frameLength = 0;
13237 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013238 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013239 /* VOS message wrapper */
13240 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13241 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13242 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013243 /* Send message to SME */
13244 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13245 {
13246 /* free the mem and return */
13247 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13248 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013249 break;
13250 }
13251#endif // FEATURE_WLAN_SCAN_PNO
13252
13253#ifdef WLAN_WAKEUP_EVENTS
13254 case WDI_WAKE_REASON_IND:
13255 {
13256 vos_msg_t vosMsg;
13257 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13258 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13259 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13260
13261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13262 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
13263 wdiLowLevelInd->wdiIndicationType,
13264 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13265 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13266 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13267
13268 if (NULL == pWakeReasonInd)
13269 {
13270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13271 "Memory allocation failure, "
13272 "WDI_WAKE_REASON_IND not forwarded");
13273 break;
13274 }
13275
13276 vos_mem_zero(pWakeReasonInd, allocSize);
13277
13278 /* Message Header */
13279 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13280 pWakeReasonInd->mesgLen = allocSize;
13281
13282 /* Info from WDI Indication */
13283 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13284 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13285 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13286 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13287 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13288 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13289 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13290 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13291
13292 /* VOS message wrapper */
13293 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13294 vosMsg.bodyptr = (void *) pWakeReasonInd;
13295 vosMsg.bodyval = 0;
13296
13297 /* Send message to SME */
13298 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13299 {
13300 /* free the mem and return */
13301 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13302 }
13303
13304 break;
13305 }
13306#endif // WLAN_WAKEUP_EVENTS
13307
13308 case WDI_TX_PER_HIT_IND:
13309 {
13310 vos_msg_t vosMsg;
13311 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13312 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13313 /* VOS message wrapper */
13314 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13315 vosMsg.bodyptr = NULL;
13316 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013317 /* Send message to SME */
13318 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13319 {
13320 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13321 }
13322 break;
13323 }
13324
Leo Chang9056f462013-08-01 19:21:11 -070013325#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013326 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013327 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013328 vos_msg_t vosMsg;
13329 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013330
Leo Changd9df8aa2013-09-26 13:32:26 -070013331 lphbInd =
13332 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13333 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013334 {
13335 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13336 "%s: LPHB IND buffer alloc Fail", __func__);
13337 return ;
13338 }
13339
Leo Changd9df8aa2013-09-26 13:32:26 -070013340 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013341 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013342 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013343 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013344 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013345 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13346
13347 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013348 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013349 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13350
Leo Changd9df8aa2013-09-26 13:32:26 -070013351 vosMsg.type = eWNI_SME_LPHB_IND;
13352 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013353 vosMsg.bodyval = 0;
13354 /* Send message to SME */
13355 if (VOS_STATUS_SUCCESS !=
13356 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13357 {
13358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13359 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013360 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013361 }
13362 break;
13363 }
13364#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013365 case WDI_PERIODIC_TX_PTRN_FW_IND:
13366 {
13367 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13368 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13369 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13370 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13371 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13372 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13373 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13374
13375 break;
13376 }
Leo Chang9056f462013-08-01 19:21:11 -070013377
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013378 case WDI_IBSS_PEER_INACTIVITY_IND:
13379 {
13380 tSirIbssPeerInactivityInd *pIbssInd =
13381 (tSirIbssPeerInactivityInd *)
13382 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13383
13384 if (NULL == pIbssInd)
13385 {
13386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13387 "Memory allocation failure, "
13388 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13389 break;
13390 }
13391
13392 pIbssInd->bssIdx =
13393 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13394 pIbssInd->staIdx =
13395 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13396 vos_mem_copy(pIbssInd->peerAddr,
13397 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13398 sizeof(tSirMacAddr));
13399 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13400 break;
13401 }
13402
Rajeev79dbe4c2013-10-05 11:03:42 +053013403#ifdef FEATURE_WLAN_BATCH_SCAN
13404 case WDI_BATCH_SCAN_RESULT_IND:
13405 {
13406 void *pBatchScanResult;
13407 void *pCallbackContext;
13408 tpAniSirGlobal pMac;
13409
13410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13411 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13412
13413 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053013414 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053013415 {
13416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13417 "%s:pWDA is NULL", __func__);
13418 VOS_ASSERT(0);
13419 return;
13420 }
13421
13422 pBatchScanResult =
13423 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13424 if (NULL == pBatchScanResult)
13425 {
13426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13427 "%s:Batch scan result from FW is null can't invoke HDD callback",
13428 __func__);
13429 VOS_ASSERT(0);
13430 return;
13431 }
13432
13433 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13434 if (NULL == pMac)
13435 {
13436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13437 "%s:pMac is NULL", __func__);
13438 VOS_ASSERT(0);
13439 return;
13440 }
13441
13442 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13443 /*call hdd callback with set batch scan response data*/
13444 if(pMac->pmc.batchScanResultCallback)
13445 {
13446 pMac->pmc.batchScanResultCallback(pCallbackContext,
13447 pBatchScanResult);
13448 }
13449 else
13450 {
13451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13452 "%s:HDD callback is null", __func__);
13453 VOS_ASSERT(0);
13454 }
13455 break;
13456 }
13457#endif
13458
Leo Chang0b0e45a2013-12-15 15:18:55 -080013459#ifdef FEATURE_WLAN_CH_AVOID
13460 case WDI_CH_AVOID_IND:
13461 {
13462 vos_msg_t vosMsg;
13463 tSirChAvoidIndType *chAvoidInd;
13464
13465 chAvoidInd =
13466 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13467 if (NULL == chAvoidInd)
13468 {
13469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13470 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13471 return ;
13472 }
13473
13474 chAvoidInd->avoidRangeCount =
13475 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13476 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13477 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13478 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13479
13480 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13481 "%s : WDA CH avoid notification", __func__);
13482
13483 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13484 vosMsg.bodyptr = chAvoidInd;
13485 vosMsg.bodyval = 0;
13486 /* Send message to SME */
13487 if (VOS_STATUS_SUCCESS !=
13488 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13489 {
13490 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13491 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13492 vos_mem_free(chAvoidInd);
13493 }
13494 break;
13495 }
13496#endif /* FEATURE_WLAN_CH_AVOID */
13497
Sunil Duttbd736ed2014-05-26 21:19:41 +053013498#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13499 case WDI_LL_STATS_RESULTS_IND:
13500 {
13501 void *pLinkLayerStatsInd;
13502 void *pCallbackContext;
13503 tpAniSirGlobal pMac;
13504
13505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13506 "Received WDI_LL_STATS_RESULTS_IND from FW");
13507
13508 /*sanity check*/
13509 if (NULL == pWDA)
13510 {
13511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13512 "%s:pWDA is NULL", __func__);
13513 VOS_ASSERT(0);
13514 return;
13515 }
13516
13517 pLinkLayerStatsInd =
13518 (void *)wdiLowLevelInd->wdiIndicationData.pLinkLayerStatsResults;
13519 if (NULL == pLinkLayerStatsInd)
13520 {
13521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13522 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
13523 __func__);
13524 VOS_ASSERT(0);
13525 return;
13526 }
13527
13528 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13529 if (NULL == pMac)
13530 {
13531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13532 "%s:pMac is NULL", __func__);
13533 VOS_ASSERT(0);
13534 return;
13535 }
13536
13537 pCallbackContext = pMac->sme.pLinkLayerStatsCallbackContext;
13538 /*call hdd callback with Link Layer Statistics*/
13539 if (pMac->sme.pLinkLayerStatsIndCallback)
13540 {
13541 pMac->sme.pLinkLayerStatsIndCallback(pCallbackContext,
13542 WDA_LINK_LAYER_STATS_RESULTS_RSP,
13543 pLinkLayerStatsInd);
13544 }
13545 else
13546 {
13547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13548 "%s:HDD callback is null", __func__);
13549 }
13550 break;
13551 }
13552#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
13553
Jeff Johnson295189b2012-06-20 16:38:30 -070013554 default:
13555 {
13556 /* TODO error */
13557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13558 "Received UNKNOWN Indication from WDI ");
13559 }
13560 }
13561 return ;
13562}
13563
Jeff Johnson295189b2012-06-20 16:38:30 -070013564/*
13565 * BA related processing in WDA.
13566 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013567void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13568 void* pUserData)
13569{
13570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13571 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013572 if(NULL == pWdaParams)
13573 {
13574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013575 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013576 VOS_ASSERT(0) ;
13577 return ;
13578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013579 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013580 vos_mem_free(pWdaParams->wdaMsgParam) ;
13581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13582 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013584 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013585 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13586 {
13587 tANI_U8 i = 0 ;
13588 tBaActivityInd *baActivityInd = NULL ;
13589 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13590 tANI_U8 allocSize = sizeof(tBaActivityInd)
13591 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13592 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13593 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013594 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013595 if(NULL == baActivityInd)
13596 {
13597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 VOS_ASSERT(0) ;
13600 return;
13601 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013602 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13603 sizeof(tSirMacAddr)) ;
13604 baActivityInd->baCandidateCnt = baCandidateCount ;
13605
13606 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13607 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13608
13609 for(i = 0 ; i < baCandidateCount ; i++)
13610 {
13611 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013612 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13613 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013614 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13615 {
13616 baCandidate->baInfo[tid].fBaEnable =
13617 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13618 baCandidate->baInfo[tid].startingSeqNum =
13619 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13620 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013621 wdiBaCandidate++ ;
13622 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013623 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013624 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13625 }
13626 else
13627 {
13628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13629 "BA Trigger RSP with Failure received ");
13630 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013631 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013632}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013633
13634
13635/*
13636 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13637 * during MCC
13638 */
13639void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13640{
13641 wpt_uint32 enabled;
13642 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13643 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13644 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13645
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013646 if (NULL == pMac )
13647 {
13648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13649 "%s: Invoked with invalid MAC context ", __func__ );
13650 VOS_ASSERT(0);
13651 return;
13652 }
13653
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013654 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13655 != eSIR_SUCCESS)
13656 {
13657 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13658 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13659 return;
13660 }
13661
13662 if(!enabled)
13663 {
13664 return;
13665 }
13666
13667 if(NULL == pWDA)
13668 {
13669 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13670 "%s:WDA context is NULL", __func__);
13671 VOS_ASSERT(0);
13672 return;
13673 }
13674
13675 if(activate)
13676 {
13677 if( VOS_STATUS_SUCCESS !=
13678 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13679 {
13680 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13681 "Traffic Stats Timer Start Failed ");
13682 return;
13683 }
13684 WDI_DS_ActivateTrafficStats();
13685 }
13686 else
13687 {
13688 WDI_DS_DeactivateTrafficStats();
13689 WDI_DS_ClearTrafficStats();
13690
13691 if( VOS_STATUS_SUCCESS !=
13692 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13693 {
13694 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13695 "Traffic Stats Timer Stop Failed ");
13696 return;
13697 }
13698 }
13699}
13700
13701/*
13702 * Traffic Stats Timer handler
13703 */
13704void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13705{
13706 WDI_Status wdiStatus;
13707 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13708 WDI_TrafficStatsIndType trafficStatsIndParams;
13709 wpt_uint32 length, enabled;
13710 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13711
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013712 if (NULL == pMac )
13713 {
13714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13715 "%s: Invoked with invalid MAC context ", __func__ );
13716 VOS_ASSERT(0);
13717 return;
13718 }
13719
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013720 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13721 != eSIR_SUCCESS)
13722 {
13723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13724 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13725 return;
13726 }
13727
13728 if(!enabled)
13729 {
13730 WDI_DS_DeactivateTrafficStats();
13731 return;
13732 }
13733
13734 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13735
13736 if(pWdiTrafficStats != NULL)
13737 {
13738 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13739 trafficStatsIndParams.length = length;
13740 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013741 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013742 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13743 trafficStatsIndParams.pUserData = pWDA;
13744
13745 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13746
13747 if(WDI_STATUS_PENDING == wdiStatus)
13748 {
13749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13750 "Pending received for %s:%d ",__func__,__LINE__ );
13751 }
13752 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13753 {
13754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13755 "Failure in %s:%d ",__func__,__LINE__ );
13756 }
13757
13758 WDI_DS_ClearTrafficStats();
13759 }
13760 else
13761 {
13762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13763 "pWdiTrafficStats is Null");
13764 }
13765
13766 if( VOS_STATUS_SUCCESS !=
13767 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13768 {
13769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13770 "Traffic Stats Timer Start Failed ");
13771 return;
13772 }
13773}
13774
Jeff Johnson295189b2012-06-20 16:38:30 -070013775/*
13776 * BA Activity check timer handler
13777 */
13778void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13779{
13780 tANI_U8 curSta = 0 ;
13781 tANI_U8 tid = 0 ;
13782 tANI_U8 size = 0 ;
13783 tANI_U8 baCandidateCount = 0 ;
13784 tANI_U8 newBaCandidate = 0 ;
13785 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13786
13787 if(NULL == pWDA)
13788 {
13789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013790 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013791 VOS_ASSERT(0);
13792 return ;
13793 }
13794 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13795 {
13796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13797 "Inconsistent STA entries in WDA");
13798 VOS_ASSERT(0) ;
13799 }
13800 /* walk through all STA entries and find out TX packet count */
13801 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13802 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013803#ifdef WLAN_SOFTAP_VSTA_FEATURE
13804 // We can only do BA on "hard" STAs.
13805 if (!(IS_HWSTA_IDX(curSta)))
13806 {
13807 continue;
13808 }
13809#endif //WLAN_SOFTAP_VSTA_FEATURE
13810 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13811 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013812 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013813 tANI_U32 txPktCount = 0 ;
13814 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013815 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013816 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13817 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013818 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13819 curSta, tid, &txPktCount)))
13820 {
13821#if 0
13822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13823 "************* %d:%d, %d ",curSta, txPktCount,
13824 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13825#endif
13826 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013827 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013828 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13829 curSta, tid)))
13830 {
13831 /* get prepare for sending message to HAL */
13832 //baCandidate[baCandidateCount].staIdx = curSta ;
13833 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13834 newBaCandidate = WDA_ENABLE_BA ;
13835 }
13836 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13837 }
13838 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013839 /* fill the entry for all the sta with given TID's */
13840 if(WDA_ENABLE_BA == newBaCandidate)
13841 {
13842 /* move to next BA candidate */
13843 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13844 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13845 baCandidateCount++ ;
13846 newBaCandidate = WDA_DISABLE_BA ;
13847 }
13848 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013849 /* prepare and send message to hal */
13850 if( 0 < baCandidateCount)
13851 {
13852 WDI_Status status = WDI_STATUS_SUCCESS ;
13853 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13854 tWDA_ReqParams *pWdaParams =
13855 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013856 if(NULL == pWdaParams)
13857 {
13858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013860 VOS_ASSERT(0) ;
13861 return;
13862 }
13863 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13864 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13865 if(NULL == wdiTriggerBaReq)
13866 {
13867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013868 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013869 VOS_ASSERT(0) ;
13870 vos_mem_free(pWdaParams);
13871 return;
13872 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013873 do
13874 {
13875 WDI_TriggerBAReqinfoType *triggerBaInfo =
13876 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13877 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13878 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13879 * for each request */
13880 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13881 triggerBaInfo->ucBASessionID = 0;
13882 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13883 } while(0) ;
13884 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013887 pWdaParams->pWdaContext = pWDA;
13888 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13889 pWdaParams->wdaMsgParam = NULL;
13890 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13891 WDA_TriggerBaReqCallback, pWdaParams) ;
13892 if(IS_WDI_STATUS_FAILURE(status))
13893 {
13894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13895 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13896 vos_mem_free(pWdaParams->wdaMsgParam) ;
13897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13898 vos_mem_free(pWdaParams) ;
13899 }
13900 }
13901 else
13902 {
13903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13904 "There is no TID for initiating BA");
13905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 if( VOS_STATUS_SUCCESS !=
13907 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13908 {
13909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13910 "BA Activity Timer Stop Failed ");
13911 return ;
13912 }
13913 if( VOS_STATUS_SUCCESS !=
13914 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13915 {
13916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13917 "BA Activity Timer Start Failed ");
13918 return;
13919 }
13920 return ;
13921}
Jeff Johnson295189b2012-06-20 16:38:30 -070013922/*
13923 * WDA common routine to create timer used by WDA.
13924 */
13925static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13926{
Jeff Johnson295189b2012-06-20 16:38:30 -070013927 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13928 tANI_U32 val = 0 ;
13929 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13930
13931 if(NULL == pMac)
13932 {
13933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013934 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013935 VOS_ASSERT(0);
13936 return VOS_STATUS_E_FAILURE;
13937 }
13938 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13939 != eSIR_SUCCESS)
13940 {
13941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13942 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13943 return VOS_STATUS_E_FAILURE;
13944 }
13945 val = SYS_MS_TO_TICKS(val) ;
13946
13947 /* BA activity check timer */
13948 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13949 "BA Activity Check timer", WDA_TimerHandler,
13950 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13951 if(status != TX_SUCCESS)
13952 {
13953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13954 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013955 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013957 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013958 /* Tx Complete Timeout timer */
13959 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13960 "Tx Complete Check timer", WDA_TimerHandler,
13961 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013962 if(status != TX_SUCCESS)
13963 {
13964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13965 "Unable to create Tx Complete Timeout timer");
13966 /* Destroy timer of BA activity check timer */
13967 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13968 if(status != TX_SUCCESS)
13969 {
13970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13971 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013972 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013973 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013974 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013975 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013976
13977 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13978
13979 /* Traffic Stats timer */
13980 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13981 "Traffic Stats timer", WDA_TimerHandler,
13982 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13983 if(status != TX_SUCCESS)
13984 {
13985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13986 "Unable to create traffic stats timer");
13987 /* Destroy timer of BA activity check timer */
13988 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13989 if(status != TX_SUCCESS)
13990 {
13991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13992 "Unable to Destroy BA activity timer");
13993 }
13994 /* Destroy timer of tx complete timer */
13995 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13996 if(status != TX_SUCCESS)
13997 {
13998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13999 "Unable to Tx complete timer");
14000 }
14001 return VOS_STATUS_E_FAILURE ;
14002 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014003 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014004}
Jeff Johnson295189b2012-06-20 16:38:30 -070014005/*
14006 * WDA common routine to destroy timer used by WDA.
14007 */
14008static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
14009{
14010 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014011 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14012 if(status != TX_SUCCESS)
14013 {
14014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14015 "Unable to Destroy Tx Complete Timeout timer");
14016 return eSIR_FAILURE ;
14017 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014018 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14019 if(status != TX_SUCCESS)
14020 {
14021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14022 "Unable to Destroy BA activity timer");
14023 return eSIR_FAILURE ;
14024 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014025 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
14026 if(status != TX_SUCCESS)
14027 {
14028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14029 "Unable to Destroy traffic stats timer");
14030 return eSIR_FAILURE ;
14031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014032 return eSIR_SUCCESS ;
14033}
Jeff Johnson295189b2012-06-20 16:38:30 -070014034/*
14035 * WDA timer handler.
14036 */
14037void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
14038{
14039 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
14040 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014041 /*
14042 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
14043 */
14044 wdaMsg.type = timerInfo ;
14045 wdaMsg.bodyptr = NULL;
14046 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014047 /* post the message.. */
14048 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
14049 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
14050 {
14051 vosStatus = VOS_STATUS_E_BADMSG;
14052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014053}
Jeff Johnson295189b2012-06-20 16:38:30 -070014054/*
14055 * WDA Tx Complete timeout Indication.
14056 */
14057void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
14058{
14059 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014060 if( pWDA->pAckTxCbFunc )
14061 {
14062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014063 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014064 pWDA->pAckTxCbFunc( pMac, 0);
14065 pWDA->pAckTxCbFunc = NULL;
14066 }
14067 else
14068 {
14069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014070 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014072}
Jeff Johnson295189b2012-06-20 16:38:30 -070014073/*
14074 * WDA Set REG Domain to VOS NV
14075 */
Abhishek Singha306a442013-11-07 18:39:01 +053014076eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
14077 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070014078{
Abhishek Singha306a442013-11-07 18:39:01 +053014079 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070014080 {
14081 return eHAL_STATUS_INVALID_PARAMETER;
14082 }
14083 return eHAL_STATUS_SUCCESS;
14084}
Jeff Johnson295189b2012-06-20 16:38:30 -070014085
Jeff Johnson295189b2012-06-20 16:38:30 -070014086#ifdef FEATURE_WLAN_SCAN_PNO
14087/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014088 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014089 *
14090 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014091void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014092{
14093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014094 tSirPNOScanReq *pPNOScanReqParams;
14095
Jeff Johnson295189b2012-06-20 16:38:30 -070014096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014097 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014098 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014099 {
14100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014101 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014102 VOS_ASSERT(0) ;
14103 return ;
14104 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014105
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014106 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14107 if(pPNOScanReqParams->statusCallback)
14108 {
14109 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14110 (status == WDI_STATUS_SUCCESS) ?
14111 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14112 }
14113
Yue Ma7f44bbe2013-04-12 11:47:39 -070014114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14115 vos_mem_free(pWdaParams->wdaMsgParam);
14116 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014117
14118 return ;
14119}
Jeff Johnson295189b2012-06-20 16:38:30 -070014120/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014121 * FUNCTION: WDA_PNOScanReqCallback
14122 * Free memory.
14123 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14124 */
14125void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014126{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014128 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014129
14130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14131 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14132
14133 if(NULL == pWdaParams)
14134 {
14135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14136 "%s: pWdaParams received NULL", __func__);
14137 VOS_ASSERT(0);
14138 return;
14139 }
14140
14141 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14142 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014143 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14144 if(pPNOScanReqParams->statusCallback)
14145 {
14146 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14147 VOS_STATUS_E_FAILURE);
14148 }
14149
Yue Ma7f44bbe2013-04-12 11:47:39 -070014150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14151 vos_mem_free(pWdaParams->wdaMsgParam);
14152 vos_mem_free(pWdaParams);
14153 }
14154
14155 return;
14156}
14157/*
14158 * FUNCTION: WDA_UpdateScanParamsRespCallback
14159 *
14160 */
14161void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14162{
14163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014165 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014166 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014167 {
14168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014169 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014170 VOS_ASSERT(0) ;
14171 return ;
14172 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014173
14174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14175 vos_mem_free(pWdaParams->wdaMsgParam);
14176 vos_mem_free(pWdaParams);
14177
Jeff Johnson295189b2012-06-20 16:38:30 -070014178 return ;
14179}
Jeff Johnson295189b2012-06-20 16:38:30 -070014180/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014181 * FUNCTION: WDA_UpdateScanParamsReqCallback
14182 * Free memory.
14183 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14184 */
14185void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14186{
14187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14188
14189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14190 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14191
14192 if(NULL == pWdaParams)
14193 {
14194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14195 "%s: pWdaParams received NULL", __func__);
14196 VOS_ASSERT(0);
14197 return;
14198 }
14199
14200 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14201 {
14202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14203 vos_mem_free(pWdaParams->wdaMsgParam);
14204 vos_mem_free(pWdaParams);
14205 }
14206
14207 return;
14208}
14209/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014210 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14211 * Request to WDI to set Preferred Network List.Offload
14212 */
14213VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14214 tSirPNOScanReq *pPNOScanReqParams)
14215{
Jeff Johnson43971f52012-07-17 12:26:56 -070014216 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014217 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14218 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14219 tWDA_ReqParams *pWdaParams ;
14220 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014222 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014223 if(NULL == pwdiPNOScanReqInfo)
14224 {
14225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014227 VOS_ASSERT(0);
14228 return VOS_STATUS_E_NOMEM;
14229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014230 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14231 if(NULL == pWdaParams)
14232 {
14233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014235 VOS_ASSERT(0);
14236 vos_mem_free(pwdiPNOScanReqInfo);
14237 return VOS_STATUS_E_NOMEM;
14238 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014239 //
14240 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14241 //
14242 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14243 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014244 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14245 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14246 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014247 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14248 {
14249 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14250 &pPNOScanReqParams->aNetworks[i],
14251 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14252 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014253 /*Scan timer intervals*/
14254 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14255 &pPNOScanReqParams->scanTimers,
14256 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014257 /*Probe template for 2.4GHz band*/
14258 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14259 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14260 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014261 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14262 pPNOScanReqParams->p24GProbeTemplate,
14263 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014264 /*Probe template for 5GHz band*/
14265 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14266 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14267 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014268 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14269 pPNOScanReqParams->p5GProbeTemplate,
14270 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014271 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14272 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014273
Jeff Johnson295189b2012-06-20 16:38:30 -070014274 /* Store Params pass it to WDI */
14275 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14276 pWdaParams->pWdaContext = pWDA;
14277 /* Store param pointer as passed in by caller */
14278 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014279 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014280 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014281 if(IS_WDI_STATUS_FAILURE(status))
14282 {
14283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14284 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014285 if(pPNOScanReqParams->statusCallback)
14286 {
14287 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14288 VOS_STATUS_E_FAILURE);
14289 }
14290
Jeff Johnson295189b2012-06-20 16:38:30 -070014291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14292 vos_mem_free(pWdaParams->wdaMsgParam);
14293 pWdaParams->wdaWdiApiMsgParam = NULL;
14294 pWdaParams->wdaMsgParam = NULL;
14295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014296 return CONVERT_WDI2VOS_STATUS(status) ;
14297}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014298
14299#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14300
14301void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14302{
14303 /*Convert the CSR Auth types to WDI Auth types */
14304 switch (csrAuthType)
14305 {
14306 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14307 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14308 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014309#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014310 case eCSR_AUTH_TYPE_CCKM_WPA:
14311 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14312 break;
14313#endif
14314 case eCSR_AUTH_TYPE_WPA:
14315 *AuthType = eWDA_AUTH_TYPE_WPA;
14316 break;
14317 case eCSR_AUTH_TYPE_WPA_PSK:
14318 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14319 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014320#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014321 case eCSR_AUTH_TYPE_CCKM_RSN:
14322 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14323 break;
14324#endif
14325 case eCSR_AUTH_TYPE_RSN:
14326 *AuthType = eWDA_AUTH_TYPE_RSN;
14327 break;
14328 case eCSR_AUTH_TYPE_RSN_PSK:
14329 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14330 break;
14331#if defined WLAN_FEATURE_VOWIFI_11R
14332 case eCSR_AUTH_TYPE_FT_RSN:
14333 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14334 break;
14335 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14336 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14337 break;
14338#endif
14339#ifdef FEATURE_WLAN_WAPI
14340 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14341 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14342 break;
14343 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14344 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14345 break;
14346#endif /* FEATURE_WLAN_WAPI */
14347 case eCSR_AUTH_TYPE_SHARED_KEY:
14348 case eCSR_AUTH_TYPE_AUTOSWITCH:
14349 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14350 break;
14351#if 0
14352 case eCSR_AUTH_TYPE_SHARED_KEY:
14353 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14354 break;
14355 case eCSR_AUTH_TYPE_AUTOSWITCH:
14356 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14357#endif
14358 default:
14359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14360 "%s: Unknown Auth Type", __func__);
14361 break;
14362 }
14363}
14364void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
14365{
14366 switch (csrEncrType)
14367 {
14368 case eCSR_ENCRYPT_TYPE_NONE:
14369 *EncrType = WDI_ED_NONE;
14370 break;
14371 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
14372 case eCSR_ENCRYPT_TYPE_WEP40:
14373 *EncrType = WDI_ED_WEP40;
14374 break;
14375 case eCSR_ENCRYPT_TYPE_WEP104:
14376 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
14377 *EncrType = WDI_ED_WEP104;
14378 break;
14379 case eCSR_ENCRYPT_TYPE_TKIP:
14380 *EncrType = WDI_ED_TKIP;
14381 break;
14382 case eCSR_ENCRYPT_TYPE_AES:
14383 *EncrType = WDI_ED_CCMP;
14384 break;
14385#ifdef WLAN_FEATURE_11W
14386 case eCSR_ENCRYPT_TYPE_AES_CMAC:
14387 *EncrType = WDI_ED_AES_128_CMAC;
14388 break;
14389#endif
14390#ifdef FEATURE_WLAN_WAPI
14391 case eCSR_ENCRYPT_TYPE_WPI:
14392 *EncrType = WDI_ED_WPI;
14393 break;
14394#endif
14395 case eCSR_ENCRYPT_TYPE_ANY:
14396 *EncrType = WDI_ED_ANY;
14397 break;
14398
14399 default:
14400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14401 "%s: Unknown Encryption Type", __func__);
14402 break;
14403 }
14404}
14405
14406/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014407 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014408 * Request to WDI to set Roam Offload Scan
14409 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014410VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014411 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
14412{
14413 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014414 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
14415 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014416 tWDA_ReqParams *pWdaParams ;
14417 v_U8_t csrAuthType;
14418 WDI_RoamNetworkType *pwdiRoamNetworkType;
14419 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
14420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14421 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014422 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014423 {
14424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14425 "%s: VOS MEM Alloc Failure", __func__);
14426 VOS_ASSERT(0);
14427 return VOS_STATUS_E_NOMEM;
14428 }
14429 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14430 if (NULL == pWdaParams)
14431 {
14432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14433 "%s: VOS MEM Alloc Failure", __func__);
14434 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014435 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014436 return VOS_STATUS_E_NOMEM;
14437 }
14438
14439 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014440 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014441 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014442 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
14443 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014444 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
14445 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
14446 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
14447 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
14448 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
14449 sizeof(pwdiRoamNetworkType->currAPbssid));
14450 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
14451 csrAuthType);
14452 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
14453 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14454 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14455 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14456 pwdiRoamOffloadScanInfo->LookupThreshold =
14457 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014458 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14459 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014460 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14461 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014462 pwdiRoamOffloadScanInfo->MAWCEnabled =
14463 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014464 pwdiRoamOffloadScanInfo->Command =
14465 pRoamOffloadScanReqParams->Command ;
14466 pwdiRoamOffloadScanInfo->StartScanReason =
14467 pRoamOffloadScanReqParams->StartScanReason ;
14468 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14469 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14470 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14471 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14472 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14473 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14474 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14475 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14476 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14477 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014478 pwdiRoamOffloadScanInfo->IsESEEnabled =
14479 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014480 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14481 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14482 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14483 pwdiRoamNetworkType->ssId.ucLength =
14484 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14485 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14486 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14487 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14488 pwdiRoamNetworkType->ChannelCount =
14489 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14490 pwdiRoamOffloadScanInfo->ChannelCacheType =
14491 pRoamOffloadScanReqParams->ChannelCacheType;
14492 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14493 pRoamOffloadScanReqParams->ValidChannelList,
14494 pRoamOffloadScanReqParams->ValidChannelCount);
14495 pwdiRoamOffloadScanInfo->ValidChannelCount =
14496 pRoamOffloadScanReqParams->ValidChannelCount;
14497 pwdiRoamOffloadScanInfo->us24GProbeSize =
14498 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14499 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14500 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14501 pRoamOffloadScanReqParams->p24GProbeTemplate,
14502 pwdiRoamOffloadScanInfo->us24GProbeSize);
14503 pwdiRoamOffloadScanInfo->us5GProbeSize =
14504 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14505 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14506 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14507 pRoamOffloadScanReqParams->p5GProbeTemplate,
14508 pwdiRoamOffloadScanInfo->us5GProbeSize);
14509 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14510 pRoamOffloadScanReqParams->MDID.mdiePresent;
14511 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14512 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014513 pwdiRoamOffloadScanInfo->nProbes =
14514 pRoamOffloadScanReqParams->nProbes;
14515 pwdiRoamOffloadScanInfo->HomeAwayTime =
14516 pRoamOffloadScanReqParams->HomeAwayTime;
14517 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014518 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014519 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014520 pWdaParams->pWdaContext = pWDA;
14521 /* Store param pointer as passed in by caller */
14522 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014523 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014524 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14525 if(IS_WDI_STATUS_FAILURE(status))
14526 {
14527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14528 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14530 vos_mem_free(pWdaParams->wdaMsgParam);
14531 pWdaParams->wdaWdiApiMsgParam = NULL;
14532 pWdaParams->wdaMsgParam = NULL;
14533 }
14534 return CONVERT_WDI2VOS_STATUS(status) ;
14535}
14536#endif
14537
Jeff Johnson295189b2012-06-20 16:38:30 -070014538/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014539 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014540 *
14541 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014542void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014543{
14544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14545
14546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014547 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014548
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014549 if(NULL == pWdaParams)
14550 {
14551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014552 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014553 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014554 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014555 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014556
Jeff Johnson295189b2012-06-20 16:38:30 -070014557 vos_mem_free(pWdaParams->wdaMsgParam) ;
14558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14559 vos_mem_free(pWdaParams) ;
14560
14561 return ;
14562}
14563/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014564 * FUNCTION: WDA_RssiFilterReqCallback
14565 * Free memory.
14566 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14567 */
14568void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14569{
14570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14571
14572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14573 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14574
14575 if(NULL == pWdaParams)
14576 {
14577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14578 "%s: pWdaParams received NULL", __func__);
14579 VOS_ASSERT(0);
14580 return;
14581 }
14582
14583 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14584 {
14585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14586 vos_mem_free(pWdaParams->wdaMsgParam);
14587 vos_mem_free(pWdaParams);
14588 }
14589
14590 return;
14591}
14592/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014593 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14594 * Request to WDI to set Preferred Network List.Offload
14595 */
14596VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14597 tSirSetRSSIFilterReq* pRssiFilterParams)
14598{
Jeff Johnson43971f52012-07-17 12:26:56 -070014599 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014600 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14601 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14602 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014604 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014605 if(NULL == pwdiSetRssiFilterReqInfo)
14606 {
14607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014609 VOS_ASSERT(0);
14610 return VOS_STATUS_E_NOMEM;
14611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14613 if(NULL == pWdaParams)
14614 {
14615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014617 VOS_ASSERT(0);
14618 vos_mem_free(pwdiSetRssiFilterReqInfo);
14619 return VOS_STATUS_E_NOMEM;
14620 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014621 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014622 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14623 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014624
Jeff Johnson295189b2012-06-20 16:38:30 -070014625 /* Store Params pass it to WDI */
14626 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14627 pWdaParams->pWdaContext = pWDA;
14628 /* Store param pointer as passed in by caller */
14629 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014630 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014631 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014632 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014633 if(IS_WDI_STATUS_FAILURE(status))
14634 {
14635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14636 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14638 vos_mem_free(pWdaParams->wdaMsgParam);
14639 pWdaParams->wdaWdiApiMsgParam = NULL;
14640 pWdaParams->wdaMsgParam = NULL;
14641 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014642 return CONVERT_WDI2VOS_STATUS(status) ;
14643}
14644
Jeff Johnson295189b2012-06-20 16:38:30 -070014645/*
14646 * FUNCTION: WDA_ProcessUpdateScanParams
14647 * Request to WDI to update Scan Parameters
14648 */
14649VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14650 tSirUpdateScanParams *pUpdateScanParams)
14651{
Jeff Johnson43971f52012-07-17 12:26:56 -070014652 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014653 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14654 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14655 sizeof(WDI_UpdateScanParamsInfoType)) ;
14656 tWDA_ReqParams *pWdaParams ;
14657 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014659 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014660 if(NULL == wdiUpdateScanParamsInfoType)
14661 {
14662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014664 VOS_ASSERT(0);
14665 return VOS_STATUS_E_NOMEM;
14666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014667 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14668 if ( NULL == pWdaParams )
14669 {
14670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014671 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014672 VOS_ASSERT(0);
14673 vos_mem_free(wdiUpdateScanParamsInfoType);
14674 return VOS_STATUS_E_NOMEM;
14675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014676 //
14677 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14678 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14680 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14681 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14682 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014683 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014684 pUpdateScanParams->b11dEnabled,
14685 pUpdateScanParams->b11dResolved,
14686 pUpdateScanParams->ucChannelCount,
14687 pUpdateScanParams->usPassiveMinChTime,
14688 pUpdateScanParams->usPassiveMaxChTime,
14689 pUpdateScanParams->usActiveMinChTime,
14690 pUpdateScanParams->usActiveMaxChTime,
14691 sizeof(tSirUpdateScanParams),
14692 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14693
Jeff Johnson295189b2012-06-20 16:38:30 -070014694 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14695 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014696 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14697 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014698 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14699 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014700 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14701 pUpdateScanParams->usActiveMaxChTime;
14702 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14703 pUpdateScanParams->usActiveMinChTime;
14704 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14705 pUpdateScanParams->usPassiveMaxChTime;
14706 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14707 pUpdateScanParams->usPassiveMinChTime;
14708
Jeff Johnson295189b2012-06-20 16:38:30 -070014709 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014710 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14711 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014712
Jeff Johnson295189b2012-06-20 16:38:30 -070014713 for ( i = 0; i <
14714 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14715 i++)
14716 {
14717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14718 "Update Scan Parameters channel: %d",
14719 pUpdateScanParams->aChannels[i]);
14720
14721 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14722 pUpdateScanParams->aChannels[i];
14723 }
14724
Yue Ma7f44bbe2013-04-12 11:47:39 -070014725 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14726 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014727
Jeff Johnson295189b2012-06-20 16:38:30 -070014728 /* Store Params pass it to WDI */
14729 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14730 pWdaParams->pWdaContext = pWDA;
14731 /* Store param pointer as passed in by caller */
14732 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014733
Jeff Johnson295189b2012-06-20 16:38:30 -070014734
14735
14736 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014737 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014738 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014739 if(IS_WDI_STATUS_FAILURE(status))
14740 {
14741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14742 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14744 vos_mem_free(pWdaParams->wdaMsgParam);
14745 vos_mem_free(pWdaParams);
14746 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014747 return CONVERT_WDI2VOS_STATUS(status) ;
14748}
14749#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014750
14751#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14752/*
14753 * FUNCTION: WDA_RoamOffloadScanReqCallback
14754 *
14755 */
14756void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14757{
14758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014759 vos_msg_t vosMsg;
14760 wpt_uint8 reason = 0;
14761
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014763 "<------ %s " ,__func__);
14764 if (NULL == pWdaParams)
14765 {
14766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14767 "%s: pWdaParams received NULL", __func__);
14768 VOS_ASSERT(0) ;
14769 return ;
14770 }
14771 if ( pWdaParams != NULL )
14772 {
14773 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14774 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014775 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14777 }
14778 if ( pWdaParams->wdaMsgParam != NULL)
14779 {
14780 vos_mem_free(pWdaParams->wdaMsgParam);
14781 }
14782
14783 vos_mem_free(pWdaParams) ;
14784 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014785 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14786 vosMsg.bodyptr = NULL;
14787 if (WDI_STATUS_SUCCESS != status)
14788 {
14789 reason = 0;
14790 }
14791 vosMsg.bodyval = reason;
14792 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14793 {
14794 /* free the mem and return */
14795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014796 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014797 }
14798
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014799 return ;
14800}
14801#endif
14802
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014803/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014804 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014805 *
14806 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014807void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014808{
14809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14810
14811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14812 "<------ %s " ,__func__);
14813
14814 if(NULL == pWdaParams)
14815 {
14816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14817 "%s: pWdaParams received NULL", __func__);
14818 VOS_ASSERT(0);
14819 return;
14820 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014821
14822 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14823 vos_mem_free(pWdaParams->wdaMsgParam);
14824 vos_mem_free(pWdaParams);
14825
14826 return;
14827}
14828/*
14829 * FUNCTION: WDA_SetPowerParamsReqCallback
14830 * Free memory.
14831 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14832 */
14833void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14834{
14835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14836
14837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14838 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14839
14840 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014841 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14843 "%s: pWdaParams received NULL", __func__);
14844 VOS_ASSERT(0);
14845 return;
14846 }
14847
14848 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14849 {
14850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14851 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014852 vos_mem_free(pWdaParams);
14853 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014854
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014855 return;
14856}
14857
Jeff Johnson295189b2012-06-20 16:38:30 -070014858#ifdef WLAN_FEATURE_PACKET_FILTERING
14859/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014860 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014861 *
14862 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014863void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014864 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14865 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014866{
14867 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014869 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014870 if(NULL == pWdaParams)
14871 {
14872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014873 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014874 VOS_ASSERT(0) ;
14875 return ;
14876 }
14877
14878 vos_mem_free(pWdaParams->wdaMsgParam) ;
14879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14880 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014881 //print a msg, nothing else to do
14882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014883 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014884 return ;
14885}
Jeff Johnson295189b2012-06-20 16:38:30 -070014886/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014887 * FUNCTION: WDA_8023MulticastListReqCallback
14888 * Free memory.
14889 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14890 */
14891void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14892{
14893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14894
14895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14896 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14897
14898 if(NULL == pWdaParams)
14899 {
14900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14901 "%s: pWdaParams received NULL", __func__);
14902 VOS_ASSERT(0);
14903 return;
14904 }
14905
14906 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14907 {
14908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14909 vos_mem_free(pWdaParams->wdaMsgParam);
14910 vos_mem_free(pWdaParams);
14911 }
14912
14913 return;
14914}
14915/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014916 * FUNCTION: WDA_Process8023MulticastListReq
14917 * Request to WDI to add 8023 Multicast List
14918 */
14919VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14920 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14921{
Jeff Johnson43971f52012-07-17 12:26:56 -070014922 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014923 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14924 tWDA_ReqParams *pWdaParams ;
14925 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014927 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014928 pwdiFltPktSetMcListReqParamsType =
14929 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14930 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14931 ) ;
14932 if(NULL == pwdiFltPktSetMcListReqParamsType)
14933 {
14934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014936 return VOS_STATUS_E_NOMEM;
14937 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014938 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14939 if(NULL == pWdaParams)
14940 {
14941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014943 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14944 return VOS_STATUS_E_NOMEM;
14945 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014946
Jeff Johnson295189b2012-06-20 16:38:30 -070014947 //
14948 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14949 //
14950 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014951 pRcvFltMcAddrList->ulMulticastAddrCnt;
14952
14953 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14954 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14955 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14956 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14957
Jeff Johnson295189b2012-06-20 16:38:30 -070014958 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14959 {
14960 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14961 &(pRcvFltMcAddrList->multicastAddr[i]),
14962 sizeof(tSirMacAddr));
14963 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014964 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14965 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014966
Jeff Johnson295189b2012-06-20 16:38:30 -070014967 /* Store Params pass it to WDI */
14968 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14969 pWdaParams->pWdaContext = pWDA;
14970 /* Store param pointer as passed in by caller */
14971 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014972 status = WDI_8023MulticastListReq(
14973 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014974 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014975 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014976 if(IS_WDI_STATUS_FAILURE(status))
14977 {
14978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14979 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14981 vos_mem_free(pWdaParams->wdaMsgParam);
14982 vos_mem_free(pWdaParams);
14983 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014984 return CONVERT_WDI2VOS_STATUS(status) ;
14985}
Jeff Johnson295189b2012-06-20 16:38:30 -070014986/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014987 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014988 *
14989 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014990void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014991 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14992 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014993{
14994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014996 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014997 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014998 if(NULL == pWdaParams)
14999 {
15000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015001 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015002 VOS_ASSERT(0) ;
15003 return ;
15004 }
15005
15006 vos_mem_free(pWdaParams->wdaMsgParam) ;
15007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15008 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015009 //print a msg, nothing else to do
15010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015011 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015012 return ;
15013}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015014
15015/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015016 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
15017 * Free memory.
15018 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015019 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015020void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015021 void* pUserData)
15022{
15023 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15024
15025 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15026 "<------ %s, wdiStatus: %d",
15027 __func__, wdiStatus);
15028
15029 if (NULL == pWdaParams)
15030 {
15031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15032 "%s: Invalid pWdaParams pointer", __func__);
15033 VOS_ASSERT(0);
15034 return;
15035 }
15036
15037 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15038 {
15039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15040 vos_mem_free(pWdaParams->wdaMsgParam);
15041 vos_mem_free(pWdaParams);
15042 }
15043
15044 return;
15045}
15046
Jeff Johnson295189b2012-06-20 16:38:30 -070015047/*
15048 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
15049 * Request to WDI to set Receive Filters
15050 */
15051VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
15052 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
15053{
Jeff Johnson43971f52012-07-17 12:26:56 -070015054 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015055 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
15056 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
15057 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
15058 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
15059 tWDA_ReqParams *pWdaParams ;
15060 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015062 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015063 if(NULL == pwdiSetRcvPktFilterReqParamsType)
15064 {
15065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015066 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015067 VOS_ASSERT(0);
15068 return VOS_STATUS_E_NOMEM;
15069 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015070 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15071 if(NULL == pWdaParams)
15072 {
15073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015074 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015075 VOS_ASSERT(0);
15076 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
15077 return VOS_STATUS_E_NOMEM;
15078 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015079 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
15080 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
15081 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
15082 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070015083 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15084 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15085
15086 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15087 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015088
15089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15090 "FID %d FT %d NParams %d CT %d",
15091 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15092 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15093 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15094 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015095 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15096 {
15097 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15098 &pRcvPktFilterCfg->paramsData[i],
15099 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015101 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015102 pwdiSetRcvPktFilterReqParamsType->
15103 wdiPktFilterCfg.paramsData[i].protocolLayer,
15104 pwdiSetRcvPktFilterReqParamsType->
15105 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015107 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015108 pwdiSetRcvPktFilterReqParamsType->
15109 wdiPktFilterCfg.paramsData[i].dataOffset,
15110 pwdiSetRcvPktFilterReqParamsType->
15111 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015113 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015114 pwdiSetRcvPktFilterReqParamsType->
15115 wdiPktFilterCfg.paramsData[i].compareData[0],
15116 pwdiSetRcvPktFilterReqParamsType->
15117 wdiPktFilterCfg.paramsData[i].compareData[1],
15118 pwdiSetRcvPktFilterReqParamsType->
15119 wdiPktFilterCfg.paramsData[i].compareData[2],
15120 pwdiSetRcvPktFilterReqParamsType->
15121 wdiPktFilterCfg.paramsData[i].compareData[3],
15122 pwdiSetRcvPktFilterReqParamsType->
15123 wdiPktFilterCfg.paramsData[i].compareData[4],
15124 pwdiSetRcvPktFilterReqParamsType->
15125 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015127 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015128 pwdiSetRcvPktFilterReqParamsType->
15129 wdiPktFilterCfg.paramsData[i].dataMask[0],
15130 pwdiSetRcvPktFilterReqParamsType->
15131 wdiPktFilterCfg.paramsData[i].dataMask[1],
15132 pwdiSetRcvPktFilterReqParamsType->
15133 wdiPktFilterCfg.paramsData[i].dataMask[2],
15134 pwdiSetRcvPktFilterReqParamsType->
15135 wdiPktFilterCfg.paramsData[i].dataMask[3],
15136 pwdiSetRcvPktFilterReqParamsType->
15137 wdiPktFilterCfg.paramsData[i].dataMask[4],
15138 pwdiSetRcvPktFilterReqParamsType->
15139 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015140 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015141 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015142 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015143 /* Store Params pass it to WDI */
15144 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15145 pWdaParams->pWdaContext = pWDA;
15146 /* Store param pointer as passed in by caller */
15147 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015148 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015149 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015150 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015151 if(IS_WDI_STATUS_FAILURE(status))
15152 {
15153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15154 "Failure in SetFilter(),free all the memory,status %d ",status);
15155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15156 vos_mem_free(pWdaParams->wdaMsgParam);
15157 vos_mem_free(pWdaParams);
15158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015159 return CONVERT_WDI2VOS_STATUS(status) ;
15160}
Jeff Johnson295189b2012-06-20 16:38:30 -070015161/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015162 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015163 *
15164 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015165void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015166 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15167 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015168{
15169 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15170 tWDA_CbContext *pWDA;
15171 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15172 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15173 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15174 tANI_U8 i;
15175 vos_msg_t vosMsg;
15176
15177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015178 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015179 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15180
Jeff Johnsone7245742012-09-05 17:12:55 -070015181 if(NULL == pRcvFltPktMatchCntRsp)
15182 {
15183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015184 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015185 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015186 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015187 return ;
15188 }
15189
Jeff Johnson295189b2012-06-20 16:38:30 -070015190 if(NULL == pWdaParams)
15191 {
15192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015193 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015194 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015195 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015196 return ;
15197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015198 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15199 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015200 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15201 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15202
15203 /* Message Header */
15204 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15205 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15206
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015207 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015208
15209 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15210 {
15211 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15212 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15213 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015214 /* VOS message wrapper */
15215 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15216 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15217 vosMsg.bodyval = 0;
15218 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15219 {
15220 /* free the mem and return */
15221 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15222 }
15223
15224 vos_mem_free(pWdaParams->wdaMsgParam) ;
15225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15226 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015227
15228 return;
15229}
15230/*
15231 * FUNCTION: WDA_FilterMatchCountReqCallback
15232 * Free memory and send RSP back to SME.
15233 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15234 */
15235void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15236{
15237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15238 vos_msg_t vosMsg;
15239
15240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15241 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15242
15243 if(NULL == pWdaParams)
15244 {
15245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15246 "%s: pWdaParams received NULL", __func__);
15247 VOS_ASSERT(0);
15248 return;
15249 }
15250
15251 /* VOS message wrapper */
15252 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15253 vosMsg.bodyptr = NULL;
15254 vosMsg.bodyval = 0;
15255
15256 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15257 {
15258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15259 vos_mem_free(pWdaParams->wdaMsgParam);
15260 vos_mem_free(pWdaParams);
15261 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15262 }
15263
15264 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015265}
Jeff Johnson295189b2012-06-20 16:38:30 -070015266/*
15267 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15268 * Request to WDI to get PC Filter Match Count
15269 */
15270VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15271{
Jeff Johnson43971f52012-07-17 12:26:56 -070015272 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015273 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15274 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15275 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015277 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015278 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15279 {
15280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015281 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015282 VOS_ASSERT(0);
15283 return VOS_STATUS_E_NOMEM;
15284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015285 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15286 if(NULL == pWdaParams)
15287 {
15288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015289 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015290 VOS_ASSERT(0);
15291 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15292 return VOS_STATUS_E_NOMEM;
15293 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015294
Yue Ma7f44bbe2013-04-12 11:47:39 -070015295 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15296 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015297
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015298 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15299 pRcvFltPktMatchRsp->bssId,
15300 sizeof(wpt_macAddr));
15301
Jeff Johnson295189b2012-06-20 16:38:30 -070015302 /* Store Params pass it to WDI */
15303 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15304 pWdaParams->pWdaContext = pWDA;
15305 /* Store param pointer as passed in by caller */
15306 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015307 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015308 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015309 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015310 if(IS_WDI_STATUS_FAILURE(status))
15311 {
15312 /* failure returned by WDI API */
15313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15314 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15316 vos_mem_free(pWdaParams) ;
15317 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15318 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15319 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015320 return CONVERT_WDI2VOS_STATUS(status) ;
15321}
Jeff Johnson295189b2012-06-20 16:38:30 -070015322/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015323 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015324 *
15325 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015326void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015327 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15328 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015329{
15330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015332 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015333/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15334 if(NULL == pWdaParams)
15335 {
15336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015337 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015338 VOS_ASSERT(0) ;
15339 return ;
15340 }
15341
15342 vos_mem_free(pWdaParams->wdaMsgParam) ;
15343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15344 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015345 //print a msg, nothing else to do
15346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015347 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015348 return ;
15349}
Jeff Johnson295189b2012-06-20 16:38:30 -070015350/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015351 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15352 * Free memory.
15353 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15354 */
15355void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15356{
15357 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15358
15359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15360 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15361
15362 if(NULL == pWdaParams)
15363 {
15364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15365 "%s: Invalid pWdaParams pointer", __func__);
15366 VOS_ASSERT(0);
15367 return;
15368 }
15369
15370 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15371 {
15372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15373 vos_mem_free(pWdaParams->wdaMsgParam);
15374 vos_mem_free(pWdaParams);
15375 }
15376
15377 return;
15378}
15379/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015380 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
15381 * Request to WDI to clear Receive Filters
15382 */
15383VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
15384 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
15385{
Jeff Johnson43971f52012-07-17 12:26:56 -070015386 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015387 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
15388 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
15389 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015391 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015392 if(NULL == pwdiRcvFltPktClearReqParamsType)
15393 {
15394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015396 VOS_ASSERT(0);
15397 return VOS_STATUS_E_NOMEM;
15398 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15400 if(NULL == pWdaParams)
15401 {
15402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015404 VOS_ASSERT(0);
15405 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
15406 return VOS_STATUS_E_NOMEM;
15407 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015408 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
15409 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070015410 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
15411 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
15412 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
15413 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015414
Yue Ma7f44bbe2013-04-12 11:47:39 -070015415 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015416 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015417 /* Store Params pass it to WDI */
15418 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
15419 pWdaParams->pWdaContext = pWDA;
15420 /* Store param pointer as passed in by caller */
15421 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015422 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015423 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015424 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015425 if(IS_WDI_STATUS_FAILURE(status))
15426 {
15427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15428 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
15429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080015430 vos_mem_free(pWdaParams->wdaMsgParam);
15431 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015432 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015433 return CONVERT_WDI2VOS_STATUS(status) ;
15434}
15435#endif // WLAN_FEATURE_PACKET_FILTERING
15436
Jeff Johnson295189b2012-06-20 16:38:30 -070015437/*
15438 * FUNCTION: WDA_ProcessSetPowerParamsReq
15439 * Request to WDI to set power params
15440 */
15441VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
15442 tSirSetPowerParamsReq *pPowerParams)
15443{
Jeff Johnson43971f52012-07-17 12:26:56 -070015444 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015445 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
15446 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015447 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015449 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015450 if(NULL == pwdiSetPowerParamsReqInfo)
15451 {
15452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015453 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015454 VOS_ASSERT(0);
15455 return VOS_STATUS_E_NOMEM;
15456 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015457 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15458 if(NULL == pWdaParams)
15459 {
15460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015462 VOS_ASSERT(0);
15463 vos_mem_free(pwdiSetPowerParamsReqInfo);
15464 return VOS_STATUS_E_NOMEM;
15465 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015466
Jeff Johnson295189b2012-06-20 16:38:30 -070015467
15468 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15469 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015470 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15471 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015472 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15473 pPowerParams->uListenInterval;
15474 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15475 pPowerParams->uBcastMcastFilter;
15476 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15477 pPowerParams->uEnableBET;
15478 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15479 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015480 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15481 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015482 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15483 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015484
Jeff Johnson295189b2012-06-20 16:38:30 -070015485 /* Store Params pass it to WDI */
15486 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15487 pWdaParams->pWdaContext = pWDA;
15488 /* Store param pointer as passed in by caller */
15489 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015490 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015491 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015492 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015493 if(IS_WDI_STATUS_FAILURE(status))
15494 {
15495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15496 "Failure in Set power params REQ WDI API, free all the memory " );
15497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15498 vos_mem_free(pWdaParams->wdaMsgParam);
15499 pWdaParams->wdaWdiApiMsgParam = NULL;
15500 pWdaParams->wdaMsgParam = NULL;
15501 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015502 return CONVERT_WDI2VOS_STATUS(status) ;
15503}
15504
15505/*
15506 * FUNCTION: WDA_SetTmLevelRspCallback
15507 * Set TM Level response
15508 */
15509void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15510{
15511 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15512
15513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015514 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015515
15516 if(NULL == pWdaParams)
15517 {
15518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015519 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015520 VOS_ASSERT(0) ;
15521 return ;
15522 }
15523
15524 /* Dose not need to send notification to upper layer
15525 * Just free allocated resources */
15526 if( pWdaParams != NULL )
15527 {
15528 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15529 {
15530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15531 }
15532 vos_mem_free(pWdaParams->wdaMsgParam) ;
15533 vos_mem_free(pWdaParams) ;
15534 }
15535}
15536
15537/*
15538 * FUNCTION: WDA_ProcessSetTmLevelReq
15539 * Set TM Level request
15540 */
15541VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15542 tAniSetTmLevelReq *setTmLevelReq)
15543{
15544 WDI_Status status = WDI_STATUS_SUCCESS ;
15545 tWDA_ReqParams *pWdaParams ;
15546 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15547 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15548 sizeof(WDI_SetTmLevelReqType)) ;
15549 if(NULL == wdiSetTmLevelReq)
15550 {
15551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015553 VOS_ASSERT(0);
15554 return VOS_STATUS_E_NOMEM;
15555 }
15556
15557 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15558 if(NULL == pWdaParams)
15559 {
15560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015561 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015562 VOS_ASSERT(0);
15563 vos_mem_free(wdiSetTmLevelReq);
15564 return VOS_STATUS_E_NOMEM;
15565 }
15566
15567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015568 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015569
15570 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15571 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15572
15573 pWdaParams->pWdaContext = pWDA;
15574 pWdaParams->wdaMsgParam = setTmLevelReq;
15575 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15576
15577 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15578 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15579
15580 if(IS_WDI_STATUS_FAILURE(status))
15581 {
15582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015583 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015584 vos_mem_free(pWdaParams->wdaMsgParam) ;
15585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15586 vos_mem_free(pWdaParams) ;
15587 }
15588
15589 return CONVERT_WDI2VOS_STATUS(status) ;
15590}
15591
15592VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15593 tpTxControlParams pTxCtrlParam)
15594{
15595 VOS_STATUS wdaStatus;
15596
15597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015598 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015599 if( pTxCtrlParam == NULL )
15600 {
15601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015602 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015603 return VOS_STATUS_E_FAILURE;
15604 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015605 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15606 {
15607 wdaStatus = WDA_SuspendDataTx(pWDA);
15608 }
15609 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15610 {
15611 wdaStatus = WDA_ResumeDataTx(pWDA);
15612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015613 return wdaStatus;
15614}
15615
15616 /* FUNCTION WDA_featureCapsExchange
15617 * WDA API to invoke capability exchange between host and FW.
15618 */
15619void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15620{
15621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015622 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015623 WDI_featureCapsExchangeReq( NULL, pVosContext);
15624}
15625
Yathish9f22e662012-12-10 14:21:35 -080015626/* FUNCTION WDA_disableCapablityFeature
15627 * WDA API to diable Active mode offload in host.
15628 */
15629void WDA_disableCapablityFeature(tANI_U8 feature_index)
15630{
15631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15632 "%s:enter", __func__ );
15633 WDI_disableCapablityFeature(feature_index);
15634}
15635
Jeff Johnson295189b2012-06-20 16:38:30 -070015636 /* FUNCTION WDA_getHostWlanFeatCaps
15637 * Wrapper for WDI API, that will return if the feature (enum value).passed
15638 * to this API is supported or not in Host
15639 * return value
15640 * 0 - implies feature is NOT Supported
15641 * any non zero value - implies feature is SUPPORTED
15642 */
15643tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15644{
15645 return WDI_getHostWlanFeatCaps(featEnumValue);
15646}
15647
15648 /* FUNCTION WDA_getFwWlanFeatCaps
15649 * Wrapper for WDI API, that will return if the feature (enum value).passed
15650 * to this API is supported or not in FW
15651 * return value
15652 * 0 - implies feature is NOT Supported
15653 * any non zero value - implies feature is SUPPORTED
15654 */
15655tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15656{
15657 return WDI_getFwWlanFeatCaps(featEnumValue);
15658}
15659
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015660
Jeff Johnson295189b2012-06-20 16:38:30 -070015661/*
15662 * FUNCTION: WDA_shutdown
15663 * Shutdown WDA/WDI without handshaking with Riva.
15664 * Synchronous function.
15665 */
15666VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15667{
15668 WDI_Status wdiStatus;
15669 //tANI_U8 eventIdx = 0;
15670 VOS_STATUS status = VOS_STATUS_SUCCESS;
15671 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015672 if (NULL == pWDA)
15673 {
15674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015675 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015676 VOS_ASSERT(0);
15677 return VOS_STATUS_E_FAILURE;
15678 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015679 /* FTM mode stay START_STATE */
15680 if( (WDA_READY_STATE != pWDA->wdaState) &&
15681 (WDA_INIT_STATE != pWDA->wdaState) &&
15682 (WDA_START_STATE != pWDA->wdaState) )
15683 {
15684 VOS_ASSERT(0);
15685 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015686
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015687 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15688 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015689 {
15690 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015691 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015692 }
Leo Chang9d76f622013-08-23 16:34:52 -070015693 else
15694 {
15695 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15696 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015697
Jeff Johnson295189b2012-06-20 16:38:30 -070015698 /* call WDI shutdown */
15699 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015700 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15701 {
15702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15703 "error in WDA Stop" );
15704 status = VOS_STATUS_E_FAILURE;
15705 }
15706 /* WDI stop is synchrnous, shutdown is complete when it returns */
15707 pWDA->wdaState = WDA_STOP_STATE;
15708
Jeff Johnson295189b2012-06-20 16:38:30 -070015709 /* shutdown should perform the stop & close actions. */
15710 /* Destroy the event */
15711 status = vos_event_destroy(&pWDA->txFrameEvent);
15712 if(!VOS_IS_STATUS_SUCCESS(status))
15713 {
15714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015715 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015716 status = VOS_STATUS_E_FAILURE;
15717 }
15718 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15719 if(!VOS_IS_STATUS_SUCCESS(status))
15720 {
15721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015722 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015723 status = VOS_STATUS_E_FAILURE;
15724 }
15725 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15726 if(!VOS_IS_STATUS_SUCCESS(status))
15727 {
15728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015729 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015730 status = VOS_STATUS_E_FAILURE;
15731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015732 /* free WDA context */
15733 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15734 if ( !VOS_IS_STATUS_SUCCESS(status) )
15735 {
15736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15737 "error in WDA close " );
15738 status = VOS_STATUS_E_FAILURE;
15739 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015740 return status;
15741}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015742
Jeff Johnsone7245742012-09-05 17:12:55 -070015743/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015744 * FUNCTION: WDA_setNeedShutdown
15745 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015746 */
15747
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015748void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015749{
15750 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015751 if(pWDA == NULL)
15752 {
15753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15754 "Could not get the WDA Context pointer" );
15755 return;
15756 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015757 pWDA->needShutdown = TRUE;
15758}
15759/*
15760 * FUNCTION: WDA_needShutdown
15761 * WDA needs a shutdown
15762 */
15763
15764v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15765{
15766 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015767 if(pWDA == NULL)
15768 {
15769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15770 "Could not get the WDA Context pointer" );
15771 return 0;
15772 }
15773 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015774}
15775
Mohit Khanna4a70d262012-09-11 16:30:12 -070015776#ifdef WLAN_FEATURE_11AC
15777/*
15778 * FUNCTION: WDA_SetBeaconFilterReqCallback
15779 *
15780 */
15781void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15782{
15783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015785 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015786 if(NULL == pWdaParams)
15787 {
15788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015789 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015790 VOS_ASSERT(0) ;
15791 return ;
15792 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015793
Mohit Khanna4a70d262012-09-11 16:30:12 -070015794 vos_mem_free(pWdaParams->wdaMsgParam) ;
15795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15796 vos_mem_free(pWdaParams) ;
15797 /*
15798 * No respone required for SetBeaconFilter req so just free the request
15799 * param here
15800 */
15801
15802 return ;
15803}
15804
15805VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15806 tUpdateVHTOpMode *pData)
15807{
15808 WDI_Status status = WDI_STATUS_SUCCESS ;
15809 tWDA_ReqParams *pWdaParams ;
15810 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15811 sizeof(WDI_UpdateVHTOpMode)) ;
15812 if(NULL == wdiTemp)
15813 {
15814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015815 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015816 VOS_ASSERT(0);
15817 return VOS_STATUS_E_NOMEM;
15818 }
15819 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15820 if(NULL == pWdaParams)
15821 {
15822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015823 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015824 VOS_ASSERT(0);
15825 vos_mem_free(wdiTemp);
15826 return VOS_STATUS_E_NOMEM;
15827 }
15828
15829 wdiTemp->opMode = pData->opMode;
15830 wdiTemp->staId = pData->staId;
15831
15832 pWdaParams->pWdaContext = pWDA;
15833 /* Store Req pointer, as this will be used for response */
15834 pWdaParams->wdaMsgParam = (void *)pData;
15835 /* store Params pass it to WDI */
15836 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15837
15838 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15839
15840 if(IS_WDI_STATUS_FAILURE(status))
15841 {
15842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15843 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15845 vos_mem_free(pWdaParams->wdaMsgParam);
15846 vos_mem_free(pWdaParams);
15847 }
15848 return CONVERT_WDI2VOS_STATUS(status) ;
15849}
15850#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015851
15852/*==========================================================================
15853 FUNCTION WDA_TransportChannelDebug
15854
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015855 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015856 Display Transport Channel debugging information
15857 User may request to display DXE channel snapshot
15858 Or if host driver detects any abnormal stcuk may display
15859
15860 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015861 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015862 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053015863 debugFlags : Enable stall detect features
15864 defined by WPAL_DeviceDebugFlags
15865 These features may effect
15866 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015867
15868 RETURN VALUE
15869 NONE
15870
15871===========================================================================*/
15872void WDA_TransportChannelDebug
15873(
schang6295e542013-03-12 15:31:23 -070015874 tpAniSirGlobal pMac,
15875 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053015876 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015877)
15878{
Mihir Shete40a55652014-03-02 14:14:47 +053015879 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015880 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015881}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015882
15883/*==========================================================================
15884 FUNCTION WDA_SetEnableSSR
15885
15886 DESCRIPTION
15887 API to enable/disable SSR on WDI timeout
15888
15889 PARAMETERS
15890 enableSSR : enable/disable SSR
15891
15892 RETURN VALUE
15893 NONE
15894
15895===========================================================================*/
15896void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15897{
15898 WDI_SetEnableSSR(enableSSR);
15899}
Leo Chang9056f462013-08-01 19:21:11 -070015900
15901#ifdef FEATURE_WLAN_LPHB
15902/*
15903 * FUNCTION: WDA_LPHBconfRspCallback
15904 *
15905 */
15906void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15907{
15908 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15909
15910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15911 "<------ %s " ,__func__);
15912 if (NULL == pWdaParams)
15913 {
15914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15915 "%s: pWdaParams received NULL", __func__);
15916 VOS_ASSERT(0) ;
15917 return ;
15918 }
15919
15920 /* Do not need to send notification to upper layer
15921 * Just free allocated resources */
15922 if (pWdaParams != NULL)
15923 {
15924 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15925 {
15926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15927 }
15928 vos_mem_free(pWdaParams->wdaMsgParam) ;
15929 vos_mem_free(pWdaParams) ;
15930 }
15931
15932 return;
15933}
15934
15935/*
15936 * FUNCTION: WDA_ProcessLPHBConfReq
15937 *
15938 */
15939VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15940 tSirLPHBReq *pData)
15941{
15942 WDI_Status wdiStatus;
15943 tWDA_ReqParams *pWdaParams ;
15944
15945 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15946 "------> %s " , __func__);
15947
15948 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15949 if (NULL == pWdaParams)
15950 {
15951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15952 "%s: VOS MEM Alloc Failure", __func__);
15953 VOS_ASSERT(0);
15954 vos_mem_free(pData);
15955 return VOS_STATUS_E_NOMEM;
15956 }
15957
15958 pWdaParams->pWdaContext = pWDA;
15959 pWdaParams->wdaMsgParam = (void *)pData;
15960 pWdaParams->wdaWdiApiMsgParam = NULL;
15961
15962 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15963 if (WDI_STATUS_PENDING == wdiStatus)
15964 {
15965 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15966 "Pending received for %s:%d ", __func__, __LINE__);
15967 }
15968 else if (WDI_STATUS_SUCCESS != wdiStatus)
15969 {
15970 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15971 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15972 vos_mem_free(pWdaParams->wdaMsgParam);
15973 vos_mem_free(pWdaParams);
15974 }
15975
15976 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15977}
15978#endif /* FEATURE_WLAN_LPHB */
15979
c_hpothu92367912014-05-01 15:18:17 +053015980void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
15981 void* pUserData)
15982{
15983 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
15984
15985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15986 "<------ %s " ,__func__);
15987 if (NULL == pBcnMissRateInfo)
15988 {
15989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15990 "%s: pWdaParams received NULL", __func__);
15991 VOS_ASSERT(0) ;
15992 return ;
15993 }
15994 if (pBcnMissRateInfo->callback)
15995 {
15996 pBcnMissRateInfo->callback(status, bcnMissRate,
15997 pBcnMissRateInfo->data);
15998 }
15999 vos_mem_free(pUserData);
16000
16001 return;
16002}
16003
16004v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16005 tSirBcnMissRateReq *pData)
16006{
16007 WDI_Status wdiStatus;
16008 tSirBcnMissRateInfo *pBcnMissRateInfo;
16009
16010 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16011 "------> %s " , __func__);
16012
16013 pBcnMissRateInfo =
16014 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
16015 if (NULL == pBcnMissRateInfo)
16016 {
16017 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16018 "%s: VOS MEM Alloc Failure", __func__);
16019 VOS_ASSERT(0);
16020 vos_mem_free(pData);
16021 return;
16022 }
16023
16024 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
16025 pBcnMissRateInfo->data = pData->data;
16026
16027 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
16028 WDA_GetBcnMissRateCallback,
16029 pData->bssid);
16030 if (WDI_STATUS_PENDING == wdiStatus)
16031 {
16032 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16033 "Pending received for %s:%d ", __func__, __LINE__);
16034 }
16035 else if (WDI_STATUS_SUCCESS != wdiStatus)
16036 {
16037 if (pBcnMissRateInfo->callback)
16038 {
16039 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
16040 -1, pBcnMissRateInfo->data);
16041 }
16042 }
16043 vos_mem_free(pData);
16044}
Sunil Duttbd736ed2014-05-26 21:19:41 +053016045#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16046
16047/*==========================================================================
16048 FUNCTION WDA_LLStatsSetRspCallback
16049
16050 DESCRIPTION
16051 API to process set link layer statistics response from FW
16052
16053 PARAMETERS
16054 pRsp: Pointer to set link layer statistics response
16055 pUserData: Pointer to user data
16056
16057 RETURN VALUE
16058 NONE
16059
16060===========================================================================*/
16061void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
16062{
16063 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16064
16065
16066 if (NULL == pWdaParams)
16067 {
16068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16069 "%s: pWdaParams received NULL", __func__);
16070 VOS_ASSERT(0) ;
16071 return ;
16072 }
16073
16074 /* Do not need to send notification to upper layer
16075 * Just free allocated resources */
16076 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16077 {
16078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16079 }
16080 if (pWdaParams->wdaMsgParam != NULL)
16081 {
16082 vos_mem_free(pWdaParams->wdaMsgParam);
16083 }
16084 vos_mem_free(pWdaParams) ;
16085
16086 return;
16087}
16088
16089/*==========================================================================
16090 FUNCTION WDA_ProcessLLStatsSetReq
16091
16092 DESCRIPTION
16093 API to send Set Link Layer Stats request to WDI
16094
16095 PARAMETERS
16096 pWDA: Pointer to WDA context
16097 wdaRequest: Pointer to set Link Layer Stats req parameters
16098===========================================================================*/
16099VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
16100 tSirLLStatsSetReq *wdaRequest)
16101{
16102 WDI_Status status = WDI_STATUS_SUCCESS;
16103 tWDA_ReqParams *pWdaParams;
16104
16105 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
16106 if (NULL == pWdaParams)
16107 {
16108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16109 "%s: VOS MEM Alloc Failure", __func__);
16110 VOS_ASSERT(0);
16111 return VOS_STATUS_E_NOMEM;
16112 }
16113 pWdaParams->pWdaContext = pWDA;
16114 pWdaParams->wdaMsgParam = wdaRequest;
16115 pWdaParams->wdaWdiApiMsgParam = NULL;
16116
16117 status = WDI_LLStatsSetReq((void *)wdaRequest,
16118 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
16119 (void *)pWdaParams);
16120 if (IS_WDI_STATUS_FAILURE(status))
16121 {
16122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16123 "Failure to request. Free all the memory " );
16124 vos_mem_free(pWdaParams->wdaMsgParam);
16125 vos_mem_free(pWdaParams);
16126 }
16127 return CONVERT_WDI2VOS_STATUS(status);
16128}
16129
16130/*==========================================================================
16131 FUNCTION WDA_LLStatsGetRspCallback
16132
16133 DESCRIPTION
16134 API to process get link layer statistics response from FW
16135
16136 PARAMETERS
16137 pRsp: Pointer to get link layer statistics response
16138 pUserData: Pointer to user data
16139
16140 RETURN VALUE
16141 NONE
16142
16143===========================================================================*/
16144void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
16145{
16146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16147
16148 if (NULL == pWdaParams)
16149 {
16150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16151 "%s: pWdaParams received NULL", __func__);
16152 VOS_ASSERT(0) ;
16153 return ;
16154 }
16155
16156 /* Do not need to send notification to upper layer
16157 * Just free allocated resources */
16158 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16159 {
16160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16161 }
16162 if (pWdaParams->wdaMsgParam != NULL)
16163 {
16164 vos_mem_free(pWdaParams->wdaMsgParam);
16165 }
16166 vos_mem_free(pWdaParams) ;
16167
16168 return;
16169}
16170
16171/*==========================================================================
16172 FUNCTION WDA_ProcessLLStatsGetReq
16173
16174 DESCRIPTION
16175 API to send Get Link Layer Stats request to WDI
16176
16177 PARAMETERS
16178 pWDA: Pointer to WDA context
16179 wdaRequest: Pointer to get Link Layer Stats req parameters
16180===========================================================================*/
16181VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
16182 tSirLLStatsGetReq *wdaRequest)
16183{
16184 WDI_Status status = WDI_STATUS_SUCCESS;
16185 tWDA_ReqParams *pWdaParams;
16186
16187 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
16188 if (NULL == pWdaParams)
16189 {
16190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16191 "%s: VOS MEM Alloc Failure", __func__);
16192 VOS_ASSERT(0);
16193 return VOS_STATUS_E_NOMEM;
16194 }
16195 pWdaParams->pWdaContext = pWDA;
16196 pWdaParams->wdaMsgParam = wdaRequest;
16197 pWdaParams->wdaWdiApiMsgParam = NULL;
16198
16199 status = WDI_LLStatsGetReq((void *) wdaRequest,
16200 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
16201 (void *)pWdaParams);
16202 if (IS_WDI_STATUS_FAILURE(status))
16203 {
16204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16205 "Failure to request. Free all the memory " );
16206 vos_mem_free(pWdaParams->wdaMsgParam);
16207 vos_mem_free(pWdaParams);
16208 }
16209 return CONVERT_WDI2VOS_STATUS(status);
16210}
16211
16212/*==========================================================================
16213 FUNCTION WDA_LLStatsClearRspCallback
16214
16215 DESCRIPTION
16216 API to process clear link layer statistics response from FW
16217
16218 PARAMETERS
16219 pRsp: Pointer to clear link layer statistics response
16220 pUserData: Pointer to user data
16221
16222 RETURN VALUE
16223 NONE
16224
16225===========================================================================*/
16226void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
16227{
16228 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16229
16230
16231 if (NULL == pWdaParams)
16232 {
16233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16234 "%s: pWdaParams received NULL", __func__);
16235 VOS_ASSERT(0) ;
16236 return ;
16237 }
16238 /* Do not need to send notification to upper layer
16239 * Just free allocated resources */
16240 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16241 {
16242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16243 }
16244 if (pWdaParams->wdaMsgParam != NULL)
16245 {
16246 vos_mem_free(pWdaParams->wdaMsgParam);
16247 }
16248 vos_mem_free(pWdaParams) ;
16249 return;
16250}
16251
16252/*==========================================================================
16253 FUNCTION WDA_ProcessLLStatsClearReq
16254
16255 DESCRIPTION
16256 API to send Clear Link Layer Stats request to WDI
16257
16258 PARAMETERS
16259 pWDA: Pointer to WDA context
16260 wdaRequest: Pointer to earLink Layer Stats req
16261===========================================================================*/
16262VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
16263 tSirLLStatsClearReq *wdaRequest)
16264{
16265 WDI_Status status = WDI_STATUS_SUCCESS;
16266 tWDA_ReqParams *pWdaParams;
16267
16268 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
16269 if (NULL == pWdaParams)
16270 {
16271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16272 "%s: VOS MEM Alloc Failure", __func__);
16273 VOS_ASSERT(0);
16274 return VOS_STATUS_E_NOMEM;
16275 }
16276 pWdaParams->pWdaContext = pWDA;
16277 pWdaParams->wdaMsgParam = wdaRequest;
16278 pWdaParams->wdaWdiApiMsgParam = NULL;
16279
16280 status = WDI_LLStatsClearReq((void *) wdaRequest,
16281 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
16282 (void *)pWdaParams);
16283 if (IS_WDI_STATUS_FAILURE(status))
16284 {
16285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16286 "Failure to request. Free all the memory " );
16287 vos_mem_free(pWdaParams->wdaMsgParam);
16288 vos_mem_free(pWdaParams);
16289 }
16290 return CONVERT_WDI2VOS_STATUS(status);
16291}
16292
16293#endif /* WLAN_FEATURE_LINK_LAYER_STATS */