blob: 358a5f779c275f6d9cf46edae69fc63415fab280 [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"
63#include "wlan_qct_wda.h"
64#include "wlan_qct_wda_msg.h"
65#include "wlan_qct_wdi_cfg.h"
66#include "wlan_qct_wdi.h"
67#include "wlan_qct_wdi_ds.h"
68#include "wlan_hal_cfg.h"
69/**********************/
70#include "wniApi.h"
71#include "cfgApi.h"
72#include "limApi.h"
73#include "wlan_qct_tl.h"
74#include "wlan_qct_tli_ba.h"
75#include "limUtils.h"
76#include "btcApi.h"
77#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070078#include "pttMsgApi.h"
79#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070080/* Used MACRO's */
81/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080082#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070083#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
84#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
85#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
86#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define CONVERT_WDI2SIR_STATUS(x) \
88 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
89
90#define IS_WDI_STATUS_FAILURE(status) \
91 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070092#define CONVERT_WDI2VOS_STATUS(x) \
93 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
94
95/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070096#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_GET_BA_TXFLAG(a, b, c) \
99 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
100
101#define WDA_SET_BA_TXFLAG(a, b, c) \
102 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
103
104#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
105 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
107 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108/* timer related Macros */
109#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
110 tx_timer_create(a, b, c, d, e, f, g)
111#define WDA_START_TIMER(a) tx_timer_activate(a)
112#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
113#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700114#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115
116#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
117 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800122#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700125
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700126#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700127#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
128 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
129 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
130
131#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
132#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800133#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
134
Jeff Johnson295189b2012-06-20 16:38:30 -0700135/* extern declarations */
136extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700137extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
138
Jeff Johnson295189b2012-06-20 16:38:30 -0700139/* forward declarations */
140void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
141 void *pBodyptr, tANI_U32 bodyVal) ;
142VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
143 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700144VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
145VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
146
147extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
148 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
149void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
150 tANI_U32 *pConfig) ;
151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
211VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
212 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700213#ifdef WLAN_FEATURE_11AC
214VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
215 tUpdateVHTOpMode *pData);
216#endif
Leo Chang9056f462013-08-01 19:21:11 -0700217
218#ifdef FEATURE_WLAN_LPHB
219VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
220 tSirLPHBReq *pData);
221#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700222/*
223 * FUNCTION: WDA_open
224 * Allocate the WDA context
225 */
226VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
227 tMacOpenParameters *pMacParams )
228{
229 tWDA_CbContext *wdaContext;
230 VOS_STATUS status;
231 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700232 /* Allocate WDA context */
233 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
234 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
235 if(!VOS_IS_STATUS_SUCCESS(status))
236 {
237 return VOS_STATUS_E_NOMEM;
238 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700239 /*__asm int 3;*/
240 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
241
242 /* Initialize data structures */
243 wdaContext->pVosContext = pVosContext;
244 wdaContext->wdaState = WDA_INIT_STATE;
245 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
246
247 /* Initialize WDA-WDI synchronization event */
248 status = vos_event_init(&wdaContext->wdaWdiEvent);
249 if(!VOS_IS_STATUS_SUCCESS(status))
250 {
251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800252 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800253 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700254 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700255 /* Init Frame transfer event */
256 status = vos_event_init(&wdaContext->txFrameEvent);
257 if(!VOS_IS_STATUS_SUCCESS(status))
258 {
259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800260 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800261 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700262 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700263 status = vos_event_init(&wdaContext->suspendDataTxEvent);
264 if(!VOS_IS_STATUS_SUCCESS(status))
265 {
266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800267 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800268 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700270 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
271 if(!VOS_IS_STATUS_SUCCESS(status))
272 {
273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800274 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800275 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700278 wdaContext->driverMode = pMacParams->driverType;
279 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
280 &wdiDevCapability, pMacParams->driverType))
281 {
282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
283 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800284 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700285 }
286 else
287 {
288 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
289 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
290 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 /* update max STA in WDA used for BA */
292 wdaContext->wdaMaxSta = pMacParams->maxStation;
293 /* store the frameTransRequired flag in wdaContext, to send this to HAL
294 * in WDA_Start
295 */
296 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
297 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700298 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800299
300error:
301 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
302 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700303}
304
Jeff Johnson295189b2012-06-20 16:38:30 -0700305/*
306 * FUNCTION: WDA_preStart
307 * Trigger DAL-AL to start CFG download
308 */
309VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
310{
311 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
312 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700313 /*
314 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
315 */
316 wdaMsg.type = WNI_CFG_DNLD_REQ ;
317 wdaMsg.bodyptr = NULL;
318 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 /* post the message.. */
320 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
321 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
322 {
323 vosStatus = VOS_STATUS_E_BADMSG;
324 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 return( vosStatus );
326}
Jeff Johnson295189b2012-06-20 16:38:30 -0700327/*
328 * FUNCTION: WDA_wdiStartCallback
329 * Once WDI_Start is finished, WDI start callback will be called by WDI
330 * to indicate completion of WDI_Start.
331 */
332void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
333 void *pVosContext)
334{
335 tWDA_CbContext *wdaContext;
336 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700337 if (NULL == pVosContext)
338 {
339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700340 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 return;
342 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
344 if (NULL == wdaContext)
345 {
346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700347 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 return;
349 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700350 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
351 {
352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700353 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 }
355 else
356 {
357 wdaContext->wdaState = WDA_START_STATE;
358 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* extract and save version information from the Start Response */
360 wdaContext->wcnssWlanCompiledVersion.major =
361 wdiRspParams->wlanCompiledVersion.major;
362 wdaContext->wcnssWlanCompiledVersion.minor =
363 wdiRspParams->wlanCompiledVersion.minor;
364 wdaContext->wcnssWlanCompiledVersion.version =
365 wdiRspParams->wlanCompiledVersion.version;
366 wdaContext->wcnssWlanCompiledVersion.revision =
367 wdiRspParams->wlanCompiledVersion.revision;
368 wdaContext->wcnssWlanReportedVersion.major =
369 wdiRspParams->wlanReportedVersion.major;
370 wdaContext->wcnssWlanReportedVersion.minor =
371 wdiRspParams->wlanReportedVersion.minor;
372 wdaContext->wcnssWlanReportedVersion.version =
373 wdiRspParams->wlanReportedVersion.version;
374 wdaContext->wcnssWlanReportedVersion.revision =
375 wdiRspParams->wlanReportedVersion.revision;
376 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
377 wdiRspParams->wcnssSoftwareVersion,
378 sizeof(wdaContext->wcnssSoftwareVersionString));
379 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
380 wdiRspParams->wcnssHardwareVersion,
381 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700382 /* Notify WDA_start that WDI_Start has completed */
383 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700384 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700387 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 return;
390}
391
Jeff Johnson295189b2012-06-20 16:38:30 -0700392/*
393 * FUNCTION: WDA_start
394 * Prepare TLV configuration and call WDI_Start.
395 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700396VOS_STATUS WDA_start(v_PVOID_t pVosContext)
397{
398 tWDA_CbContext *wdaContext;
399 VOS_STATUS status;
400 WDI_Status wdiStatus;
401 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 if (NULL == pVosContext)
403 {
404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700405 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 return VOS_STATUS_E_FAILURE;
407 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700408 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
409 if (NULL == wdaContext)
410 {
411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700412 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 return VOS_STATUS_E_FAILURE;
414 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 /* Non-FTM mode, WDA status for START must be INIT
416 * FTM mode, WDA Status for START can be INIT or STOP */
417 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
418 (WDA_STOP_STATE != wdaContext->wdaState) )
419 {
420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
421 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700422 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 return VOS_STATUS_E_FAILURE;
424 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 /* initialize the wdiStartParam. Note that we can create this on
426 the stack since we won't exit until WDI_Start() completes or
427 times out */
428 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /* prepare the config TLV for the WDI */
431 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
432 if ( !VOS_IS_STATUS_SUCCESS(status) )
433 {
434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700435 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 return VOS_STATUS_E_FAILURE;
437 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 /* note from here onwards if an error occurs we must
439 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
441 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
442 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 /* initialize the WDA-WDI synchronization event */
444 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 /* call WDI start */
446 wdiStatus = WDI_Start(&wdiStartParam,
447 (WDI_StartRspCb)WDA_wdiStartCallback,
448 (v_VOID_t *)pVosContext);
449 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700452 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 vos_mem_free(wdiStartParam.pConfigBuffer);
454 return VOS_STATUS_E_FAILURE;
455 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* wait for WDI start to invoke our callback */
457 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
458 WDA_WDI_START_TIMEOUT );
459 if ( !VOS_IS_STATUS_SUCCESS(status) )
460 {
461 if ( VOS_STATUS_E_TIMEOUT == status )
462 {
463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700464 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 }
466 else
467 {
468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
469 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700470 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 }
472 vos_mem_free(wdiStartParam.pConfigBuffer);
473 return VOS_STATUS_E_FAILURE;
474 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* we no longer need the config TLV */
477 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* if we are not in the START state then WDI_Start() failed */
479 if (WDA_START_STATE != wdaContext->wdaState)
480 {
481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700482 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 return VOS_STATUS_E_FAILURE;
484 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* FTM mode does not need to monitor BA activity */
486 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
487 {
488 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800489 if(VOS_STATUS_SUCCESS == status)
490 {
491 wdaContext->wdaTimersCreated = VOS_TRUE;
492 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 }
Leo Chang9d76f622013-08-23 16:34:52 -0700494 else
495 {
496 vos_event_init(&wdaContext->ftmStopDoneEvent);
497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 return status;
499}
500
Jeff Johnson295189b2012-06-20 16:38:30 -0700501/*
502 * FUNCTION: WDA_prepareConfigTLV
503 * Function to prepare CFG for DAL(WDA)
504 */
505VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
506 WDI_StartReqParamsType *wdiStartParams )
507{
508 /* get pMac to acess CFG data base */
509 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
510 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
511 tHalCfg *tlvStruct = NULL ;
512 tANI_U8 *tlvStructStart = NULL ;
513 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
514 v_PVOID_t *configParam;
515 tANI_U32 configParamSize;
516 tANI_U32 *configDataValue;
517 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700518 tANI_U8 i;
519
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 if ((NULL == pMac)||(NULL == wdaContext))
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 VOS_ASSERT(0);
525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
528 WNI_CFG_STA_ID_LEN +
529 WNI_CFG_EDCA_WME_ACBK_LEN +
530 WNI_CFG_EDCA_WME_ACBE_LEN +
531 WNI_CFG_EDCA_WME_ACVI_LEN +
532 WNI_CFG_EDCA_WME_ACVO_LEN +
533 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* malloc memory for all configs in one shot */
535 configParam = vos_mem_malloc(configParamSize);
536
537 if(NULL == configParam )
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 VOS_ASSERT(0) ;
542 return VOS_STATUS_E_NOMEM;
543 }
544 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 tlvStruct = (tHalCfg *)configParam;
547 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* TODO: Remove Later */
549 /* QWLAN_HAL_CFG_STA_ID */
550 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
551 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
552 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
553 eSIR_SUCCESS)
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
556 "Failed to get value for WNI_CFG_STA_ID");
557 goto handle_failure;
558 }
559 tlvStruct->length = strLength ;
560 /* calculate the pad bytes to have the CFG in aligned format */
561 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
562 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
564 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
566 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
567 tlvStruct->length = sizeof(tANI_U32);
568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
569 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
570 != eSIR_SUCCESS)
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
573 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
574 goto handle_failure;
575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
577 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
579 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
580 tlvStruct->length = sizeof(tANI_U32);
581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
582 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
583 eSIR_SUCCESS)
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
587 goto handle_failure;
588 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
590 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
592 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
593 tlvStruct->length = sizeof(tANI_U32);
594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
595 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
596 != eSIR_SUCCESS)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
599 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
600 goto handle_failure;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length)) ;
604
605 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
606 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
610 configDataValue ) != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CAL_PERIOD */
619 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
623 != eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CAL_PERIOD");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_CAL_CONTROL */
632 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_CAL_CONTROL");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* QWLAN_HAL_CFG_PROXIMITY */
645 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
649 != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_PROXIMITY");
653 goto handle_failure;
654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
656 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
658 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
666 goto handle_failure;
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
669 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
671 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
675 eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
679 goto handle_failure;
680 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
684 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
688 configDataValue ) != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
697 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
710 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
723 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
731 goto handle_failure;
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
740 configDataValue ) != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
749 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
753 configDataValue ) != eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length));
761
762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
767 configDataValue ) != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
776 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
788
789 /* QWLAN_HAL_CFG_FIXED_RATE */
790 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_FIXED_RATE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length));
802
803 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
804 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
816
817 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
831 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
832 tlvStruct->length = sizeof(tANI_U32);
833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
834 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
835 configDataValue ) != eSIR_SUCCESS)
836 {
837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
838 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
839 goto handle_failure;
840 }
841 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
842 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
844 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
848 configDataValue ) != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
857 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
865 goto handle_failure;
866 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
868 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
882
883#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
884 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
885 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
886 tlvStruct->length = sizeof(tANI_U32);
887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
888 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
889 configDataValue ) != eSIR_SUCCESS)
890 {
891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
892 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
893 goto handle_failure;
894 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
896 + sizeof(tHalCfg) + tlvStruct->length);
897#endif
898 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
899 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
903 configDataValue ) != eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
912 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
913 tlvStruct->length = sizeof(tANI_U32);
914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
915 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
916 eSIR_SUCCESS)
917 {
918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
919 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
920 goto handle_failure;
921 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
923 + sizeof(tHalCfg) + tlvStruct->length);
924
925 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
926 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
927 tlvStruct->length = sizeof(tANI_U32);
928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
929 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
930 configDataValue ) != eSIR_SUCCESS)
931 {
932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
933 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
934 goto handle_failure;
935 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
937 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
939 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
940 tlvStruct->length = sizeof(tANI_U32);
941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
942 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
943 configDataValue ) != eSIR_SUCCESS)
944 {
945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
946 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
947 goto handle_failure;
948 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
950 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700951 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
952 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
953 tlvStruct->length = sizeof(tANI_U32);
954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
955 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
956 configDataValue ) != eSIR_SUCCESS)
957 {
958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
959 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
960 goto handle_failure;
961 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
963 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700964 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
965 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
966 tlvStruct->length = sizeof(tANI_U32);
967 configDataValue = (tANI_U32 *)(tlvStruct + 1);
968 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
969 configDataValue ) != eSIR_SUCCESS)
970 {
971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
972 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
973 goto handle_failure;
974 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
976 + sizeof(tHalCfg) + tlvStruct->length);
977
978 /* QWLAN_HAL_CFG_STATS_PERIOD */
979 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
980 tlvStruct->length = sizeof(tANI_U32);
981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
982 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
983 eSIR_SUCCESS)
984 {
985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
986 "Failed to get value for WNI_CFG_STATS_PERIOD");
987 goto handle_failure;
988 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
990 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700991 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
992 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
996 eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1000 goto handle_failure;
1001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1005 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1009 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1011 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1013 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1014 tlvStruct->length = sizeof(tANI_U32);
1015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1016 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1017 != eSIR_SUCCESS)
1018 {
1019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1020 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1021 goto handle_failure;
1022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1024 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001025 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1026 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1027 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1029 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1030 &strLength) != eSIR_SUCCESS)
1031 {
1032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1033 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1034 goto handle_failure;
1035 }
1036 tlvStruct->length = strLength;
1037 /* calculate the pad bytes to have the CFG in aligned format */
1038 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1039 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1043 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1044 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1047 &strLength) != eSIR_SUCCESS)
1048 {
1049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1050 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1051 goto handle_failure;
1052 }
1053 tlvStruct->length = strLength;
1054 /* calculate the pad bytes to have the CFG in aligned format */
1055 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1056 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1058 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001059 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1060 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1061 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1063 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1064 &strLength) != eSIR_SUCCESS)
1065 {
1066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1067 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1068 goto handle_failure;
1069 }
1070 tlvStruct->length = strLength;
1071 /* calculate the pad bytes to have the CFG in aligned format */
1072 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1073 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1075 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001076 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1077 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1078 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1079 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1080 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1081 &strLength) != eSIR_SUCCESS)
1082 {
1083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1084 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1085 goto handle_failure;
1086 }
1087 tlvStruct->length = strLength;
1088 /* calculate the pad bytes to have the CFG in aligned format */
1089 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1090 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1092 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1094 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1095 tlvStruct->length = sizeof(tANI_U32);
1096 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1097 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1098 != eSIR_SUCCESS)
1099 {
1100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1101 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1102 goto handle_failure;
1103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1105 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001106 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1107 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1108 tlvStruct->length = sizeof(tANI_U32);
1109 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1110 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1111 != eSIR_SUCCESS)
1112 {
1113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1114 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1115 goto handle_failure;
1116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1118 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1120 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1121 tlvStruct->length = sizeof(tANI_U32);
1122 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1123 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1124 != eSIR_SUCCESS)
1125 {
1126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1127 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1128 goto handle_failure;
1129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1131 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1133 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1134 tlvStruct->length = sizeof(tANI_U32);
1135 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1136 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1137 != eSIR_SUCCESS)
1138 {
1139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1140 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1141 goto handle_failure;
1142 }
1143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1144 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1146 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1147 tlvStruct->length = sizeof(tANI_U32);
1148 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1149 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1150 != eSIR_SUCCESS)
1151 {
1152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1153 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1154 goto handle_failure;
1155 }
1156 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1157 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1159 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1160 tlvStruct->length = sizeof(tANI_U32);
1161 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1162 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1163 != eSIR_SUCCESS)
1164 {
1165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1166 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1167 goto handle_failure;
1168 }
1169 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1170 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1172 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1173 tlvStruct->length = sizeof(tANI_U32);
1174 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1175 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1176 != eSIR_SUCCESS)
1177 {
1178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1179 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1180 goto handle_failure;
1181 }
1182 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1183 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001184 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1185 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1186 tlvStruct->length = sizeof(tANI_U32);
1187 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1188 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1189 != eSIR_SUCCESS)
1190 {
1191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1192 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1193 goto handle_failure;
1194 }
1195 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1196 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1198 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1199 tlvStruct->length = sizeof(tANI_U32);
1200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1201 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1202 != eSIR_SUCCESS)
1203 {
1204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1205 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1206 goto handle_failure;
1207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1211 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1219 goto handle_failure;
1220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1222 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1224 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1225 tlvStruct->length = sizeof(tANI_U32);
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1228 != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1232 goto handle_failure;
1233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1235 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001236 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1237 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1238 * into FW, so the parameters are added here.
1239 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1241 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1242 tlvStruct->length = sizeof(tANI_U32);
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1248 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1249 tlvStruct->length = sizeof(tANI_U32);
1250 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1251 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1255 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1256 tlvStruct->length = sizeof(tANI_U32);
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001261 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1262 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1266 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1267 + sizeof(tHalCfg) + tlvStruct->length) ;
1268
1269 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1271 tlvStruct->length = sizeof(tANI_U32);
1272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1273 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
1276
1277 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1278 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1279 tlvStruct->length = sizeof(tANI_U32);
1280 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1281 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1283 + sizeof(tHalCfg) + tlvStruct->length) ;
1284
1285 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
1292
1293 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1294 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
1300
1301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1358 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1362 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1363 + sizeof(tHalCfg) + tlvStruct->length) ;
1364
Wilson Tsaof8b37942013-09-06 10:49:00 -07001365 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1366 {
1367 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1368 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1369 tlvStruct->length = sizeof(tANI_U32);
1370 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1371 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1372 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1373 + sizeof(tHalCfg) + tlvStruct->length) ;
1374
1375 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1376 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1377 tlvStruct->length = sizeof(tANI_U32);
1378 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1379 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1381 + sizeof(tHalCfg) + tlvStruct->length) ;
1382
1383 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1384 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1385 tlvStruct->length = sizeof(tANI_U32);
1386 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1387 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1388 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1389 + sizeof(tHalCfg) + tlvStruct->length) ;
1390
1391 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1392 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1393 tlvStruct->length = sizeof(tANI_U32);
1394 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1395 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1396 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1397 + sizeof(tHalCfg) + tlvStruct->length) ;
1398 }
1399
1400 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1401 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1402 tlvStruct->length = sizeof(tANI_U32);
1403 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1404 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1405 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1406 + sizeof(tHalCfg) + tlvStruct->length) ;
1407
1408 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1409 {
1410 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1411 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1412 tlvStruct->length = sizeof(tANI_U32);
1413 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1414 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1415 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1416 + sizeof(tHalCfg) + tlvStruct->length) ;
1417 }
1418
1419 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1420 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1421 tlvStruct->length = sizeof(tANI_U32);
1422 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1423 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1424 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1425 + sizeof(tHalCfg) + tlvStruct->length) ;
1426
Jeff Johnson32d95a32012-09-10 13:15:23 -07001427 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001428 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1429 tlvStruct->length = sizeof(tANI_U32);
1430 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1431 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1432 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1433 wcnssCompiledApiVersion.minor,
1434 wcnssCompiledApiVersion.version,
1435 wcnssCompiledApiVersion.revision);
1436 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1437 + sizeof(tHalCfg) + tlvStruct->length) ;
1438
Jeff Johnsond13512a2012-07-17 11:42:19 -07001439 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1440 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1441 tlvStruct->length = sizeof(tANI_U32);
1442 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1443 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1444 configDataValue ) != eSIR_SUCCESS)
1445 {
1446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1447 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1448 goto handle_failure;
1449 }
1450
1451 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1452 + sizeof(tHalCfg) + tlvStruct->length) ;
1453 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1454 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1455 tlvStruct->length = sizeof(tANI_U32);
1456 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1457 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1458 configDataValue ) != eSIR_SUCCESS)
1459 {
1460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1461 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1462 goto handle_failure;
1463 }
1464
1465 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1466 + sizeof(tHalCfg) + tlvStruct->length) ;
1467
1468 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1469 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1470 tlvStruct->length = sizeof(tANI_U32);
1471 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1472 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1473 != eSIR_SUCCESS)
1474 {
1475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1476 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1477 goto handle_failure;
1478 }
1479
1480 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1481 + sizeof(tHalCfg) + tlvStruct->length) ;
1482
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001483 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1484 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1485 tlvStruct->length = sizeof(tANI_U32);
1486 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1487 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1488 != eSIR_SUCCESS)
1489 {
1490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1491 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1492 goto handle_failure;
1493 }
1494
1495 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1496 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001497#ifdef WLAN_SOFTAP_VSTA_FEATURE
1498 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1499 tlvStruct->length = sizeof(tANI_U32);
1500 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1501 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1502 != eSIR_SUCCESS)
1503 {
1504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1505 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1506 goto handle_failure;
1507 }
1508
1509 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1510 + sizeof(tHalCfg) + tlvStruct->length) ;
1511#endif
1512
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001513 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1514 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1515 tlvStruct->length = sizeof(tANI_U32);
1516 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1517
1518 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1519 != eSIR_SUCCESS)
1520 {
1521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1522 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1523 goto handle_failure;
1524 }
1525
1526 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1527 + sizeof(tHalCfg) + tlvStruct->length) ;
1528
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301529/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1530 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1531 tlvStruct->length = sizeof(tANI_U32);
1532 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1533 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1534 configDataValue ) != eSIR_SUCCESS)
1535 {
1536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1537 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1538 goto handle_failure;
1539 }
1540
1541 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1542 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301543#ifdef FEATURE_WLAN_TDLS
1544 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1545 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1546 tlvStruct->length = sizeof(tANI_U32);
1547 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1548 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1549 configDataValue ) != eSIR_SUCCESS)
1550 {
1551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1552 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1553 goto handle_failure;
1554 }
1555 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1556 + sizeof(tHalCfg) + tlvStruct->length) ;
1557
1558 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1559 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1560 tlvStruct->length = sizeof(tANI_U32);
1561 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1562 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1563 configDataValue ) != eSIR_SUCCESS)
1564 {
1565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1566 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1567 goto handle_failure;
1568 }
1569 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1570 + sizeof(tHalCfg) + tlvStruct->length) ;
1571 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1572 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1573 tlvStruct->length = sizeof(tANI_U32);
1574 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1575 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1576 configDataValue ) != eSIR_SUCCESS)
1577 {
1578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1579 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1580 goto handle_failure;
1581 }
1582 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1583 + sizeof(tHalCfg) + tlvStruct->length) ;
1584 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1585 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1586 tlvStruct->length = sizeof(tANI_U32);
1587 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1588 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1589 configDataValue ) != eSIR_SUCCESS)
1590 {
1591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1592 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1593 goto handle_failure;
1594 }
1595 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1596 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301597 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1598 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1599 tlvStruct->length = sizeof(tANI_U32);
1600 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1601 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1602 configDataValue ) != eSIR_SUCCESS)
1603 {
1604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1605 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1606 goto handle_failure;
1607 }
1608 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1609 + sizeof(tHalCfg) + tlvStruct->length) ;
1610
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301611#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301612
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001613 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1614 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1615 tlvStruct->length = sizeof(tANI_U32);
1616 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1617 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1618 configDataValue ) != eSIR_SUCCESS)
1619 {
1620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1621 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1622 goto handle_failure;
1623 }
1624
1625 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1626 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001627
1628 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1629 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1630 tlvStruct->length = sizeof(tANI_U32);
1631 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1632 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1633 != eSIR_SUCCESS)
1634 {
1635 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1636 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1637 goto handle_failure;
1638 }
1639 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1640 + sizeof(tHalCfg) + tlvStruct->length));
1641
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301642 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1643 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1644 tlvStruct->length = sizeof(tANI_U32);
1645 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1646 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1647 configDataValue ) != eSIR_SUCCESS)
1648 {
1649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1650 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1651 goto handle_failure;
1652 }
1653
1654 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1655 + sizeof(tHalCfg) + tlvStruct->length) ;
1656
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301657 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1658 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1659 tlvStruct->length = sizeof(tANI_U32);
1660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1661 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1662 configDataValue ) != eSIR_SUCCESS)
1663 {
1664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1665 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1666 goto handle_failure;
1667 }
1668 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1669 + sizeof(tHalCfg) + tlvStruct->length) ;
1670
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301671 /* QWLAN_HAL_CFG_ATH_DISABLE */
1672 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1673 tlvStruct->length = sizeof(tANI_U32);
1674 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1675 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1676 configDataValue ) != eSIR_SUCCESS)
1677 {
1678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1679 "Failed to get value for WNI_CFG_ATH_DISABLE");
1680 goto handle_failure;
1681 }
1682 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1683 + sizeof(tHalCfg) + tlvStruct->length) ;
1684
c_hpothu6d7dc922013-12-02 12:36:41 +05301685 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1686 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1687 tlvStruct->length = sizeof(tANI_U32);
1688 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1689 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1690 configDataValue ) != eSIR_SUCCESS)
1691 {
1692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1693 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1694 goto handle_failure;
1695 }
1696 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1697 + sizeof(tHalCfg) + tlvStruct->length) ;
1698
1699 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1700 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1701 tlvStruct->length = sizeof(tANI_U32);
1702 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1703 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1704 configDataValue ) != eSIR_SUCCESS)
1705 {
1706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1707 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1708 goto handle_failure;
1709 }
1710 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1711 + sizeof(tHalCfg) + tlvStruct->length) ;
1712
1713 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1714 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1715 tlvStruct->length = sizeof(tANI_U32);
1716 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1717 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1718 configDataValue ) != eSIR_SUCCESS)
1719 {
1720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1721 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1722 goto handle_failure;
1723 }
1724 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1725 + sizeof(tHalCfg) + tlvStruct->length) ;
1726
1727 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1728 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1729 tlvStruct->length = sizeof(tANI_U32);
1730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1731 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1732 configDataValue ) != eSIR_SUCCESS)
1733 {
1734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1735 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1736 goto handle_failure;
1737 }
1738 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1739 + sizeof(tHalCfg) + tlvStruct->length) ;
1740
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301741 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1742 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1743 tlvStruct->length = sizeof(tANI_U32);
1744 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1745 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1746 configDataValue ) != eSIR_SUCCESS)
1747 {
1748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1749 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1750 goto handle_failure;
1751 }
1752 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1753 + sizeof(tHalCfg) + tlvStruct->length) ;
1754
1755 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1756 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1757 tlvStruct->length = sizeof(tANI_U32);
1758 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1759 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1760 configDataValue ) != eSIR_SUCCESS)
1761 {
1762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1763 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1764 goto handle_failure;
1765 }
1766 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1767 + sizeof(tHalCfg) + tlvStruct->length) ;
1768
1769 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1770 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1771 tlvStruct->length = sizeof(tANI_U32);
1772 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1773 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1774 configDataValue ) != eSIR_SUCCESS)
1775 {
1776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1777 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1778 goto handle_failure;
1779 }
1780 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1781 + sizeof(tHalCfg) + tlvStruct->length) ;
1782
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001783 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1784 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1785 tlvStruct->length = sizeof(tANI_U32);
1786 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1787 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1788 configDataValue ) != eSIR_SUCCESS)
1789 {
1790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1791 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1792 goto handle_failure;
1793 }
1794 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1795 + sizeof(tHalCfg) + tlvStruct->length) ;
1796
Jeff Johnson295189b2012-06-20 16:38:30 -07001797 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001798#ifdef WLAN_DEBUG
1799 {
1800 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001801 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1802 "****** Dumping CFG TLV ***** ");
1803 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1804 {
1805 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1806 "%02x %02x %02x %02x %02x %02x %02x %02x",
1807 tlvStructStart[i],
1808 tlvStructStart[i+1],
1809 tlvStructStart[i+2],
1810 tlvStructStart[i+3],
1811 tlvStructStart[i+4],
1812 tlvStructStart[i+5],
1813 tlvStructStart[i+6],
1814 tlvStructStart[i+7]);
1815 }
1816 /* Dump the bytes in the last line*/
1817 for (; i < wdiStartParams->usConfigBufferLen; i++)
1818 {
1819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1820 "%02x ",tlvStructStart[i]);
1821 }
1822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1823 "**************************** ");
1824 }
1825#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001826 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001827handle_failure:
1828 vos_mem_free(configParam);
1829 return VOS_STATUS_E_FAILURE;
1830}
Jeff Johnson295189b2012-06-20 16:38:30 -07001831/*
1832 * FUNCTION: WDA_wdiCompleteCB
1833 * call the voss call back function
1834 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001835void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001836{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1838 tWDA_CbContext *wdaContext;
1839
1840 if(NULL == pWdaParams)
1841 {
1842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001843 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001844 VOS_ASSERT(0) ;
1845 return ;
1846 }
1847
1848 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1849
Jeff Johnson295189b2012-06-20 16:38:30 -07001850 if (NULL == wdaContext)
1851 {
1852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001853 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001854 return ;
1855 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001856
Jeff Johnson295189b2012-06-20 16:38:30 -07001857 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001858 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001859 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001862 vos_mem_free(pWdaParams);
1863
Jeff Johnson295189b2012-06-20 16:38:30 -07001864 if(WDI_STATUS_SUCCESS != status)
1865 {
1866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1867 "WDI stop callback returned failure" );
1868 VOS_ASSERT(0) ;
1869 }
1870 else
1871 {
1872 wdaContext->wdaState = WDA_STOP_STATE;
1873 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001874
Leo Chang9d76f622013-08-23 16:34:52 -07001875 /* FTM Driver stop procedure should be synced.
1876 * Stop and Close will happen on same context */
1877 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1878 {
1879 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1880 {
1881 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1882 "%s: FTM Stop Event Set Fail", __func__);
1883 VOS_ASSERT(0);
1884 }
1885 }
1886
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001888 vos_WDAComplete_cback(wdaContext->pVosContext);
1889
Jeff Johnson295189b2012-06-20 16:38:30 -07001890 return ;
1891}
Jeff Johnson295189b2012-06-20 16:38:30 -07001892/*
1893 * FUNCTION: WDA_stop
1894 * call WDI_stop
1895 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001896VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1897{
1898 WDI_Status wdiStatus;
1899 VOS_STATUS status = VOS_STATUS_SUCCESS;
1900 WDI_StopReqParamsType *wdiStopReq;
1901 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001902 tWDA_ReqParams *pWdaParams ;
1903
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 if (NULL == pWDA)
1905 {
1906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001907 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001908 VOS_ASSERT(0);
1909 return VOS_STATUS_E_FAILURE;
1910 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001911 if (pWDA->wdiFailed == true)
1912 {
1913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001914 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001915 return VOS_STATUS_E_ALREADY;
1916 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001917
Jeff Johnson295189b2012-06-20 16:38:30 -07001918 /* FTM mode stay START_STATE */
1919 if( (WDA_READY_STATE != pWDA->wdaState) &&
1920 (WDA_INIT_STATE != pWDA->wdaState) &&
1921 (WDA_START_STATE != pWDA->wdaState) )
1922 {
1923 VOS_ASSERT(0);
1924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001925 wdiStopReq = (WDI_StopReqParamsType *)
1926 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1927 if(NULL == wdiStopReq)
1928 {
1929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001931 VOS_ASSERT(0);
1932 return VOS_STATUS_E_NOMEM;
1933 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001934
Jeff Johnson295189b2012-06-20 16:38:30 -07001935 wdiStopReq->wdiStopReason = reason;
1936 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001937
1938 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1939 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001940 {
1941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 VOS_ASSERT(0);
1944 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001945 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001946 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001947
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001948 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1949 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 {
1951 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001952 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001953 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001954
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001955 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1956 pWdaParams->wdaMsgParam = NULL;
1957 pWdaParams->pWdaContext = pWDA;
1958
Jeff Johnson295189b2012-06-20 16:38:30 -07001959 /* call WDI stop */
1960 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001961 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1962
Jeff Johnson295189b2012-06-20 16:38:30 -07001963 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1964 {
1965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1966 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1968 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001969 status = VOS_STATUS_E_FAILURE;
1970 }
Leo Chang9d76f622013-08-23 16:34:52 -07001971
1972 /* FTM Driver stop procedure should be synced.
1973 * Stop and Close will happen on same context */
1974 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1975 {
1976 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1977 WDI_RESPONSE_TIMEOUT);
1978 if (status != VOS_STATUS_SUCCESS)
1979 {
1980 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1981 "%s: FTM Stop Timepoout", __func__);
1982 VOS_ASSERT(0);
1983 vos_event_reset(&pWDA->ftmStopDoneEvent);
1984 }
1985 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001986 return status;
1987}
Jeff Johnson295189b2012-06-20 16:38:30 -07001988/*
1989 * FUNCTION: WDA_close
1990 * call WDI_close and free the WDA context
1991 */
1992VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1993{
Jeff Johnson43971f52012-07-17 12:26:56 -07001994 VOS_STATUS status = VOS_STATUS_SUCCESS;
1995 WDI_Status wstatus;
1996 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001997 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001998 if (NULL == wdaContext)
1999 {
2000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002001 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002002 return VOS_STATUS_E_FAILURE;
2003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002004 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2005 (WDA_STOP_STATE != wdaContext->wdaState))
2006 {
2007 VOS_ASSERT(0);
2008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002010 wstatus = WDI_Close();
2011 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002012 {
2013 status = VOS_STATUS_E_FAILURE;
2014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002015 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002017 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2018 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 {
2020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002021 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002022 status = VOS_STATUS_E_FAILURE;
2023 }
2024
Jeff Johnson43971f52012-07-17 12:26:56 -07002025 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002026 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 {
2028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002029 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002030 status = VOS_STATUS_E_FAILURE;
2031 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002032 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002033 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 {
2035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002036 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002037 status = VOS_STATUS_E_FAILURE;
2038 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002039 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002040 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002041 {
2042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002043 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 status = VOS_STATUS_E_FAILURE;
2045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002047 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002048 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002049 {
2050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2051 "error in WDA close " );
2052 status = VOS_STATUS_E_FAILURE;
2053 }
2054 return status;
2055}
Jeff Johnson295189b2012-06-20 16:38:30 -07002056/*
2057 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2058 * returns 1 if the compiled version is greater than or equal to the input version
2059 */
2060
2061uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2062{
2063 VOS_STATUS status = VOS_STATUS_SUCCESS;
2064 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2065 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002066 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002067 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2068 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2069 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2070 (compiledVersion.revision >= revision)))
2071 return 1;
2072 else
2073 return 0;
2074}
Jeff Johnson295189b2012-06-20 16:38:30 -07002075/*
2076 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2077 * returns 1 if the compiled version is greater than or equal to the input version
2078 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002079uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2080{
2081 VOS_STATUS status = VOS_STATUS_SUCCESS;
2082 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2083 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002084 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002085 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2086 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2087 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2088 (reportedVersion.revision >= revision)))
2089 return 1;
2090 else
2091 return 0;
2092}
Jeff Johnson295189b2012-06-20 16:38:30 -07002093/*
2094 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2095 * Returns the version of the WCNSS WLAN API with which the HOST
2096 * device driver was compiled
2097 */
2098VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2099 tSirVersionType *pVersion)
2100{
2101 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002102 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002103 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002104 if ((NULL == pvosGCtx) || (NULL == pVersion))
2105 {
2106 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002107 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002108 VOS_ASSERT(0);
2109 return VOS_STATUS_E_FAILURE;
2110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002111 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2112 if (NULL == pWDA )
2113 {
2114 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002115 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 VOS_ASSERT(0);
2117 return VOS_STATUS_E_FAILURE;
2118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002119 *pVersion = pWDA->wcnssWlanCompiledVersion;
2120 return VOS_STATUS_SUCCESS;
2121}
Jeff Johnson295189b2012-06-20 16:38:30 -07002122/*
2123 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2124 * Returns the version of the WCNSS WLAN API with which the WCNSS
2125 * device driver was compiled
2126 */
2127VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2128 tSirVersionType *pVersion)
2129{
2130 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002131 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002132 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 if ((NULL == pvosGCtx) || (NULL == pVersion))
2134 {
2135 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002136 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 VOS_ASSERT(0);
2138 return VOS_STATUS_E_FAILURE;
2139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2141 if (NULL == pWDA )
2142 {
2143 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002144 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002145 VOS_ASSERT(0);
2146 return VOS_STATUS_E_FAILURE;
2147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002148 *pVersion = pWDA->wcnssWlanReportedVersion;
2149 return VOS_STATUS_SUCCESS;
2150}
Jeff Johnson295189b2012-06-20 16:38:30 -07002151/*
2152 * FUNCTION: WDA_GetWcnssSoftwareVersion
2153 * Returns the WCNSS Software version string
2154 */
2155VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2156 tANI_U8 *pVersion,
2157 tANI_U32 versionBufferSize)
2158{
2159 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002161 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 if ((NULL == pvosGCtx) || (NULL == pVersion))
2163 {
2164 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002165 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 VOS_ASSERT(0);
2167 return VOS_STATUS_E_FAILURE;
2168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2170 if (NULL == pWDA )
2171 {
2172 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002173 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 VOS_ASSERT(0);
2175 return VOS_STATUS_E_FAILURE;
2176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002177 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2178 return VOS_STATUS_SUCCESS;
2179}
Jeff Johnson295189b2012-06-20 16:38:30 -07002180/*
2181 * FUNCTION: WDA_GetWcnssHardwareVersion
2182 * Returns the WCNSS Hardware version string
2183 */
2184VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2185 tANI_U8 *pVersion,
2186 tANI_U32 versionBufferSize)
2187{
2188 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002190 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002191 if ((NULL == pvosGCtx) || (NULL == pVersion))
2192 {
2193 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002194 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002195 VOS_ASSERT(0);
2196 return VOS_STATUS_E_FAILURE;
2197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002198 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2199 if (NULL == pWDA )
2200 {
2201 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002202 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 VOS_ASSERT(0);
2204 return VOS_STATUS_E_FAILURE;
2205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2207 return VOS_STATUS_SUCCESS;
2208}
Jeff Johnson295189b2012-06-20 16:38:30 -07002209/*
2210 * FUNCTION: WDA_WniCfgDnld
2211 * Trigger CFG Download
2212 */
2213VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2214{
2215 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002217 v_VOID_t *pFileImage = NULL;
2218 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 v_VOID_t *pCfgBinary = NULL;
2220 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002221 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002222
Jeff Johnson295189b2012-06-20 16:38:30 -07002223 if (NULL == pMac )
2224 {
2225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002226 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 VOS_ASSERT(0);
2228 return VOS_STATUS_E_FAILURE;
2229 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002230 /* get the number of bytes in the CFG Binary... */
2231 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2232 &cbFileImageSize );
2233 if ( VOS_STATUS_E_NOMEM != vosStatus )
2234 {
2235 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2236 "Error obtaining binary size" );
2237 goto fail;
2238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 // malloc a buffer to read in the Configuration binary file.
2240 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 if ( NULL == pFileImage )
2242 {
2243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2244 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2245 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 vosStatus = VOS_STATUS_E_NOMEM;
2247 goto fail;
2248 }
2249
2250 /* Get the entire CFG file image... */
2251 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2252 &cbFileImageSize );
2253 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2254 {
2255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2256 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2257 cbFileImageSize );
2258 goto fail;
2259 }
2260
2261 /*
2262 * Validate the binary image. This function will return a pointer
2263 * and length where the CFG binary is located within the binary image file.
2264 */
2265 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2266 &pCfgBinary, &cbCfgBinarySize );
2267 if ( VOS_FALSE == bStatus )
2268 {
2269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2270 "Error: Cannot find STA CFG in binary image file" );
2271 vosStatus = VOS_STATUS_E_FAILURE;
2272 goto fail;
2273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002274 /*
2275 * TODO: call the config download function
2276 * for now calling the existing cfg download API
2277 */
2278 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002279 vosStatus = VOS_STATUS_SUCCESS;
2280
2281 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002282
2283fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002284 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 return vosStatus;
2286}
Jeff Johnson295189b2012-06-20 16:38:30 -07002287/* -----------------------------------------------------------------
2288 * WDI interface
2289 * -----------------------------------------------------------------
2290 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002291/*
2292 * FUNCTION: WDA_suspendDataTxCallback
2293 * call back function called from TL after suspend Transmission
2294 */
2295VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2296 v_U8_t* ucSTAId,
2297 VOS_STATUS vosStatus)
2298{
2299 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002301 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 if (NULL == pWDA )
2303 {
2304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002305 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 VOS_ASSERT(0);
2307 return VOS_STATUS_E_FAILURE;
2308 }
2309 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2310 {
2311 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2312 }
2313 else
2314 {
2315 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 /* Trigger the event to bring the WDA TL suspend function to come
2318 * out of wait*/
2319 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2320 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2321 {
2322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002323 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 /* If TL suspended had timedout before this callback was called, resume back
2326 * TL.*/
2327 if (pWDA->txSuspendTimedOut)
2328 {
2329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002330 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002331 WDA_ResumeDataTx(pWDA);
2332 pWDA->txSuspendTimedOut = FALSE;
2333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 return VOS_STATUS_SUCCESS;
2335}
Jeff Johnson295189b2012-06-20 16:38:30 -07002336/*
2337 * FUNCTION: WDA_suspendDataTx
2338 * Update TL to suspend the data Transmission
2339 */
2340VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2341{
2342 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2343 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002344
2345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002346 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002348 if (pWDA->txSuspendTimedOut)
2349 {
2350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002351 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002352 return status;
2353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 /* Reset the event to be not signalled */
2355 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2356 if(!VOS_IS_STATUS_SUCCESS(status))
2357 {
2358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002359 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002360 return VOS_STATUS_E_FAILURE;
2361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002363 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002364 WDA_SuspendDataTxCallback);
2365 if(status != VOS_STATUS_SUCCESS)
2366 {
2367 return status;
2368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002369 /* Wait for the event to be set by the TL, to get the response of
2370 * suspending the TX queues, this event should be set by the Callback
2371 * function called by TL*/
2372 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2373 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2374 if(!VOS_IS_STATUS_SUCCESS(status))
2375 {
2376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2377 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002378 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002379 /* Set this flag to true when TL suspend times out, so that when TL
2380 * suspend eventually happens and calls the callback, TL can be resumed
2381 * right away by looking at this flag when true.*/
2382 pWDA->txSuspendTimedOut = TRUE;
2383 }
2384 else
2385 {
2386 pWDA->txSuspendTimedOut = FALSE;
2387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2389 {
2390 status = VOS_STATUS_SUCCESS;
2391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 return status;
2393}
Jeff Johnson295189b2012-06-20 16:38:30 -07002394/*
2395 * FUNCTION: WDA_resumeDataTx
2396 * Update TL to resume the data Transmission
2397 */
2398VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2399{
2400 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002401
2402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002403 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002404
2405 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 return status;
2407}
Jeff Johnson295189b2012-06-20 16:38:30 -07002408/*
2409 * FUNCTION: WDA_InitScanReqCallback
2410 * Trigger Init SCAN callback
2411 */
2412void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2413{
2414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2415 tWDA_CbContext *pWDA;
2416 tInitScanParams *pWDA_ScanParam ;
2417 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002419 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 if(NULL == pWdaParams)
2421 {
2422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002423 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 VOS_ASSERT(0) ;
2425 return ;
2426 }
2427 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2428 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 if(NULL == pWDA_ScanParam)
2430 {
2431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002432 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002433 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2435 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 return ;
2437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 if(WDI_STATUS_SUCCESS != wdiStatus)
2439 {
2440 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 if(VOS_STATUS_SUCCESS != status)
2442 {
2443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002444 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002445 }
2446 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002447 /* free WDI command buffer */
2448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002450
Jeff Johnson295189b2012-06-20 16:38:30 -07002451
2452 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002453 /* without converting the Status to Failure or Success Just
2454 pass the same status to lim */
2455 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 /* send SCAN RSP message back to PE */
2457 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 return ;
2459}
2460
2461/*
2462 * FUNCTION: WDA_ProcessInitScanReq
2463 * Trigger Init SCAN in DAL
2464 */
2465VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2466 tInitScanParams *initScanParams)
2467{
2468 WDI_Status status = WDI_STATUS_SUCCESS ;
2469 WDI_InitScanReqParamsType *wdiInitScanParam =
2470 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2471 sizeof(WDI_InitScanReqParamsType)) ;
2472 tWDA_ReqParams *pWdaParams;
2473 tANI_U8 i = 0;
2474
2475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002476 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 if(NULL == wdiInitScanParam)
2478 {
2479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002480 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 VOS_ASSERT(0);
2482 return VOS_STATUS_E_NOMEM;
2483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2485 if(NULL == pWdaParams)
2486 {
2487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 VOS_ASSERT(0);
2490 vos_mem_free(wdiInitScanParam);
2491 return VOS_STATUS_E_NOMEM;
2492 }
2493
2494 /* Copy init Scan params to WDI structure */
2495 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2496 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2497 sizeof(tSirMacAddr)) ;
2498 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2499 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2500 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2502 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002503 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2504 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2506 {
2507 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2508 initScanParams->scanEntry.bssIdx[i] ;
2509 }
2510
2511 /* if Frame length, copy macMgmtHdr or WDI structure */
2512 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2513 {
2514 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2515 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2516 }
2517 wdiInitScanParam->wdiReqStatusCB = NULL ;
2518
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 /* Store Init Req pointer, as this will be used for response */
2520 pWdaParams->pWdaContext = pWDA;
2521 pWdaParams->wdaMsgParam = initScanParams;
2522 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 /* first try to suspend TX */
2524 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002525 if(WDI_STATUS_SUCCESS != status)
2526 {
2527 goto handleWdiFailure;
2528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 /* call DAL API to pass init scan request to DAL */
2530 status = WDI_InitScanReq(wdiInitScanParam,
2531 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 if(IS_WDI_STATUS_FAILURE(status))
2533 {
2534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2535 "error in WDA Init Scan, Resume Tx " );
2536 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 VOS_ASSERT(0) ;
2538
2539 goto handleWdiFailure;
2540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002542handleWdiFailure:
2543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2544 "Failure in WDI Api, free all the memory " );
2545 /* free WDI command buffer */
2546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2547 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 /* send Failure to PE */
2549 initScanParams->status = eSIR_FAILURE ;
2550 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002551 return CONVERT_WDI2VOS_STATUS(status) ;
2552}
2553
Jeff Johnson295189b2012-06-20 16:38:30 -07002554/*
2555 * FUNCTION: WDA_StartScanReqCallback
2556 * send Start SCAN RSP back to PE
2557 */
2558void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2559 void* pUserData)
2560{
2561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2562 tWDA_CbContext *pWDA;
2563 tStartScanParams *pWDA_ScanParam;
2564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002565 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 if(NULL == pWdaParams)
2567 {
2568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002569 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 VOS_ASSERT(0) ;
2571 return ;
2572 }
2573 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2574 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 if(NULL == pWDA_ScanParam)
2576 {
2577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002578 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002580 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 return ;
2582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002586 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002588 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 return ;
2590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2592 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002593
Jeff Johnson295189b2012-06-20 16:38:30 -07002594
2595 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002596 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002597 /* send SCAN RSP message back to PE */
2598 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 return ;
2600}
2601
Jeff Johnson295189b2012-06-20 16:38:30 -07002602/*
2603 * FUNCTION: WDA_ProcessStartScanReq
2604 * Trigger start SCAN in WDI
2605 */
2606VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2607 tStartScanParams *startScanParams)
2608{
2609 WDI_Status status = WDI_STATUS_SUCCESS;
2610 WDI_StartScanReqParamsType *wdiStartScanParams =
2611 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2612 sizeof(WDI_StartScanReqParamsType)) ;
2613 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002615 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 if(NULL == wdiStartScanParams)
2617 {
2618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002619 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 VOS_ASSERT(0);
2621 return VOS_STATUS_E_NOMEM;
2622 }
2623 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2624 if(NULL == pWdaParams)
2625 {
2626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002627 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002628 VOS_ASSERT(0);
2629 vos_mem_free(wdiStartScanParams);
2630 return VOS_STATUS_E_NOMEM;
2631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 /* Copy init Scan params to WDI structure */
2633 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2634 wdiStartScanParams->wdiReqStatusCB = NULL ;
2635
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 /* Store Init Req pointer, as this will be used for response */
2637 /* store Params pass it to WDI */
2638 pWdaParams->pWdaContext = pWDA;
2639 pWdaParams->wdaMsgParam = startScanParams;
2640 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 /* call DAL API to pass init scan request to DAL */
2642 status = WDI_StartScanReq(wdiStartScanParams,
2643 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 /* failure returned by WDI API */
2645 if(IS_WDI_STATUS_FAILURE(status))
2646 {
2647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2648 "Failure in Start Scan WDI API, free all the memory "
2649 "It should be due to previous abort scan." );
2650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2651 vos_mem_free(pWdaParams) ;
2652 startScanParams->status = eSIR_FAILURE ;
2653 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 return CONVERT_WDI2VOS_STATUS(status) ;
2656}
Jeff Johnson295189b2012-06-20 16:38:30 -07002657/*
2658 * FUNCTION: WDA_EndScanReqCallback
2659 * END SCAN callback
2660 */
2661void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2662{
2663 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2664 tWDA_CbContext *pWDA;
2665 tEndScanParams *endScanParam;
2666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002667 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 if(NULL == pWdaParams)
2669 {
2670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002671 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 VOS_ASSERT(0) ;
2673 return ;
2674 }
2675 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2676 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 if(NULL == endScanParam)
2678 {
2679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002680 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2683 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 return ;
2685 }
2686
2687 /* Free WDI command buffer */
2688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2689 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002691 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 /* send response back to PE */
2693 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2694 return ;
2695}
2696
Jeff Johnson295189b2012-06-20 16:38:30 -07002697/*
2698 * FUNCTION: WDA_ProcessEndScanReq
2699 * Trigger END SCAN in WDI
2700 */
2701VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2702 tEndScanParams *endScanParams)
2703{
2704 WDI_Status status = WDI_STATUS_SUCCESS;
2705 WDI_EndScanReqParamsType *wdiEndScanParams =
2706 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2707 sizeof(WDI_EndScanReqParamsType)) ;
2708 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002710 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 if(NULL == wdiEndScanParams)
2712 {
2713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002714 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002715 VOS_ASSERT(0);
2716 return VOS_STATUS_E_NOMEM;
2717 }
2718 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2719 if(NULL == pWdaParams)
2720 {
2721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002722 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002723 VOS_ASSERT(0);
2724 vos_mem_free(wdiEndScanParams);
2725 return VOS_STATUS_E_NOMEM;
2726 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 /* Copy init Scan params to WDI structure */
2728 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2729 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 /* Store Init Req pointer, as this will be used for response */
2731 /* store Params pass it to WDI */
2732 pWdaParams->pWdaContext = pWDA;
2733 pWdaParams->wdaMsgParam = endScanParams;
2734 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 /* call DAL API to pass init scan request to DAL */
2736 status = WDI_EndScanReq(wdiEndScanParams,
2737 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 if(IS_WDI_STATUS_FAILURE(status))
2739 {
2740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2741 "Failure in End Scan WDI API, free all the memory "
2742 "It should be due to previous abort scan." );
2743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2744 vos_mem_free(pWdaParams) ;
2745 endScanParams->status = eSIR_FAILURE ;
2746 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002748 return CONVERT_WDI2VOS_STATUS(status) ;
2749}
Jeff Johnson295189b2012-06-20 16:38:30 -07002750/*
2751 * FUNCTION: WDA_FinishScanReqCallback
2752 * Trigger Finish SCAN callback
2753 */
2754void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2755{
2756 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2757 tWDA_CbContext *pWDA;
2758 tFinishScanParams *finishScanParam;
2759 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002761 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 if(NULL == pWdaParams)
2763 {
2764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002765 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002766 VOS_ASSERT(0) ;
2767 return ;
2768 }
2769
2770 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2771 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 if(NULL == finishScanParam)
2773 {
2774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002775 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2778 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 return ;
2780 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2782 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 /*
2784 * Now Resume TX, if we reached here means, TX is already suspended, we
2785 * have to resume it unconditionaly
2786 */
2787 status = WDA_ResumeDataTx(pWDA) ;
2788
2789 if(VOS_STATUS_SUCCESS != status)
2790 {
2791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002792 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002794 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2796 return ;
2797}
Jeff Johnson295189b2012-06-20 16:38:30 -07002798/*
2799 * FUNCTION: WDA_ProcessFinshScanReq
2800 * Trigger Finish SCAN in WDI
2801 */
2802VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2803 tFinishScanParams *finishScanParams)
2804{
2805 WDI_Status status = WDI_STATUS_SUCCESS;
2806 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2807 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2808 sizeof(WDI_FinishScanReqParamsType)) ;
2809 tWDA_ReqParams *pWdaParams ;
2810 tANI_U8 i = 0;
2811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002812 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 if(NULL == wdiFinishScanParams)
2814 {
2815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002816 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 VOS_ASSERT(0);
2818 return VOS_STATUS_E_NOMEM;
2819 }
2820 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2821 if(NULL == pWdaParams)
2822 {
2823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002824 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 VOS_ASSERT(0);
2826 vos_mem_free(wdiFinishScanParams);
2827 return VOS_STATUS_E_NOMEM;
2828 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 /* Copy init Scan params to WDI structure */
2830 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2831 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2832 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2834 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2835 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2836 finishScanParams->frameLength ;
2837 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2838 finishScanParams->currentOperChannel ;
2839 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2840 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2841 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2843 {
2844 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2845 finishScanParams->scanEntry.bssIdx[i] ;
2846 }
2847
2848
Jeff Johnson295189b2012-06-20 16:38:30 -07002849 /* if Frame length, copy macMgmtHdr ro WDI structure */
2850 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2851 {
2852 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2853 &finishScanParams->macMgmtHdr,
2854 sizeof(WDI_MacMgmtHdr)) ;
2855 }
2856 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 /* Store Init Req pointer, as this will be used for response */
2858 /* store Params pass it to WDI */
2859 pWdaParams->pWdaContext = pWDA;
2860 pWdaParams->wdaMsgParam = finishScanParams;
2861 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 /* call DAL API to pass init scan request to DAL */
2863 status = WDI_FinishScanReq(wdiFinishScanParams,
2864 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002865
Jeff Johnson295189b2012-06-20 16:38:30 -07002866
2867 /*
2868 * WDI API returns failure..
2869 */
2870 if(IS_WDI_STATUS_FAILURE( status))
2871 {
2872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2873 "Failure in Finish Scan WDI API, free all the memory " );
2874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2875 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 finishScanParams->status = eSIR_FAILURE ;
2877 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 return CONVERT_WDI2VOS_STATUS(status) ;
2880}
Jeff Johnson295189b2012-06-20 16:38:30 -07002881/*---------------------------------------------------------------------
2882 * ASSOC API's
2883 *---------------------------------------------------------------------
2884 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002885/*
2886 * FUNCTION: WDA_JoinReqCallback
2887 * Trigger Init SCAN callback
2888 */
2889void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2890{
2891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2892 tWDA_CbContext *pWDA;
2893 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 if(NULL == pWdaParams)
2897 {
2898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002899 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 VOS_ASSERT(0) ;
2901 return ;
2902 }
2903 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2904 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2906 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 /* reset macBSSID */
2908 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 /* reset macSTASelf */
2910 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002911 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 return ;
2914}
Jeff Johnson295189b2012-06-20 16:38:30 -07002915/*
2916 * FUNCTION: WDA_ProcessJoinReq
2917 * Trigger Join REQ in WDI
2918 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002919VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2920 tSwitchChannelParams* joinReqParam)
2921{
2922 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 WDI_JoinReqParamsType *wdiJoinReqParam =
2924 (WDI_JoinReqParamsType *)vos_mem_malloc(
2925 sizeof(WDI_JoinReqParamsType)) ;
2926 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002928 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 if(NULL == wdiJoinReqParam)
2930 {
2931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002932 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002934 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 return VOS_STATUS_E_NOMEM;
2936 }
2937 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2938 if(NULL == pWdaParams)
2939 {
2940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 VOS_ASSERT(0);
2943 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002944 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 return VOS_STATUS_E_NOMEM;
2946 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002947
2948 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2949 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2950 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2951 {
2952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2953 "%s: received join request when BSSID or self-STA is NULL "
2954 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002955 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002956 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2957 VOS_ASSERT(0);
2958 vos_mem_free(wdiJoinReqParam);
2959 vos_mem_free(pWdaParams);
2960 joinReqParam->status = eSIR_FAILURE ;
2961 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2962 return VOS_STATUS_E_INVAL;
2963 }
2964
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 /* copy the BSSID for pWDA */
2966 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2967 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2969 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2971 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002972#ifdef WLAN_FEATURE_VOWIFI
2973 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2974 joinReqParam->maxTxPower ;
2975#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2977 joinReqParam->localPowerConstraint ;
2978#endif
2979 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2980 joinReqParam->secondaryChannelOffset ;
2981 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2982
2983 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 /* Store Init Req pointer, as this will be used for response */
2985 /* store Params pass it to WDI */
2986 pWdaParams->pWdaContext = pWDA;
2987 pWdaParams->wdaMsgParam = joinReqParam;
2988 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 status = WDI_JoinReq(wdiJoinReqParam,
2990 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 if(IS_WDI_STATUS_FAILURE(status))
2992 {
2993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2994 "Failure in Join WDI API, free all the memory " );
2995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2996 vos_mem_free(pWdaParams) ;
2997 joinReqParam->status = eSIR_FAILURE ;
2998 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 return CONVERT_WDI2VOS_STATUS(status) ;
3001}
Jeff Johnson295189b2012-06-20 16:38:30 -07003002/*
3003 * FUNCTION: WDA_SwitchChannelReqCallback
3004 * send Switch channel RSP back to PE
3005 */
3006void WDA_SwitchChannelReqCallback(
3007 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3008{
3009 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3010 tWDA_CbContext *pWDA;
3011 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003013 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 if(NULL == pWdaParams)
3015 {
3016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003017 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003018 VOS_ASSERT(0) ;
3019 return ;
3020 }
3021 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3022 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3023
3024#ifdef WLAN_FEATURE_VOWIFI
3025 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3026#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3028 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003030 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 return ;
3033}
Jeff Johnson295189b2012-06-20 16:38:30 -07003034/*
3035 * FUNCTION: WDA_ProcessChannelSwitchReq
3036 * Request to WDI to switch channel REQ params.
3037 */
3038VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3039 tSwitchChannelParams *pSwitchChanParams)
3040{
3041 WDI_Status status = WDI_STATUS_SUCCESS ;
3042 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3043 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3044 sizeof(WDI_SwitchChReqParamsType)) ;
3045 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003047 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 if(NULL == wdiSwitchChanParam)
3049 {
3050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003051 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 VOS_ASSERT(0);
3053 return VOS_STATUS_E_NOMEM;
3054 }
3055 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3056 if(NULL == pWdaParams)
3057 {
3058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003059 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 VOS_ASSERT(0);
3061 vos_mem_free(wdiSwitchChanParam);
3062 return VOS_STATUS_E_NOMEM;
3063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3065#ifndef WLAN_FEATURE_VOWIFI
3066 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3067 pSwitchChanParams->localPowerConstraint;
3068#endif
3069 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3070 pSwitchChanParams->secondaryChannelOffset;
3071 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 /* Store req pointer, as this will be used for response */
3073 /* store Params pass it to WDI */
3074 pWdaParams->pWdaContext = pWDA;
3075 pWdaParams->wdaMsgParam = pSwitchChanParams;
3076 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077#ifdef WLAN_FEATURE_VOWIFI
3078 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3079 = pSwitchChanParams->maxTxPower;
3080 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3081 pSwitchChanParams ->selfStaMacAddr,
3082 sizeof(tSirMacAddr));
3083#endif
3084 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3085 pSwitchChanParams->bssId,
3086 sizeof(tSirMacAddr));
3087
3088 status = WDI_SwitchChReq(wdiSwitchChanParam,
3089 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 if(IS_WDI_STATUS_FAILURE(status))
3091 {
3092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3093 "Failure in process channel switch Req WDI API, free all the memory " );
3094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3095 vos_mem_free(pWdaParams) ;
3096 pSwitchChanParams->status = eSIR_FAILURE ;
3097 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 return CONVERT_WDI2VOS_STATUS(status) ;
3100}
Jeff Johnson295189b2012-06-20 16:38:30 -07003101/*
3102 * FUNCTION: WDA_ConfigBssReqCallback
3103 * config BSS Req Callback, called by WDI
3104 */
3105void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3106 ,void* pUserData)
3107{
3108 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3109 tWDA_CbContext *pWDA;
3110 tAddBssParams *configBssReqParam;
3111 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003113 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 if(NULL == pWdaParams)
3115 {
3116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003117 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 VOS_ASSERT(0) ;
3119 return ;
3120 }
3121 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3122 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3123 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003125 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3127 {
3128 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3129 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3131 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3132 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3133
3134 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3135 {
3136 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3137 {
3138 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3139 staConfigBssParam->staType = STA_ENTRY_BSSID;
3140 }
3141 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3142 (staConfigBssParam->staType == STA_ENTRY_SELF))
3143 {
3144 /* This is the 1st add BSS Req for the BTAMP STA */
3145 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3146 staConfigBssParam->staType = STA_ENTRY_BSSID;
3147 }
3148 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3149 (staConfigBssParam->staType == STA_ENTRY_PEER))
3150 {
3151 /* This is the 2nd ADD BSS Request that is sent
3152 * on the BTAMP STA side. The Sta type is
3153 * set to STA_ENTRY_PEER here.*/
3154 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3155 }
3156 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3157 (staConfigBssParam->staType == STA_ENTRY_SELF))
3158 {
3159 /* statype is already set by PE.
3160 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3161 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3162 staConfigBssParam->staType = STA_ENTRY_BSSID;
3163 }
3164 else
3165 {
3166 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3167 staConfigBssParam->staType = STA_ENTRY_PEER;
3168 }
3169 }
3170 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3171 {
3172 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3173 staConfigBssParam->staType = STA_ENTRY_SELF;
3174 }
3175 else
3176 {
3177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3178 "Invalid operation mode specified");
3179 VOS_ASSERT(0);
3180 }
3181
3182 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3187 sizeof(tSirMacAddr));
3188 staConfigBssParam->txChannelWidthSet =
3189 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3191 staConfigBssParam->htCapable)
3192 {
3193 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3194 wdiConfigBssRsp->ucBSSIdx;
3195 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3196 WDA_VALID_STA_INDEX ;
3197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3199 wdiConfigBssRsp->ucBSSIdx,
3200 wdiConfigBssRsp->ucSTAIdx))
3201 {
3202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003203 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003204 VOS_ASSERT(0) ;
3205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3207 {
3208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003209 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 VOS_ASSERT(0) ;
3211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003212#ifdef WLAN_FEATURE_VOWIFI
3213 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3214#endif
3215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3217 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 return ;
3220}
Jeff Johnson295189b2012-06-20 16:38:30 -07003221/*
3222 * FUNCTION: WDA_UpdateEdcaParamsForAC
3223 * Update WDI EDCA params with PE edca params
3224 */
3225void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3226 WDI_EdcaParamRecord *wdiEdcaParam,
3227 tSirMacEdcaParamRecord *macEdcaParam)
3228{
3229 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3230 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3231 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3232 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3233 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3234 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3235}
Jeff Johnson295189b2012-06-20 16:38:30 -07003236/*
3237 * FUNCTION: WDA_ProcessConfigBssReq
3238 * Configure BSS before starting Assoc with AP
3239 */
3240VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3241 tAddBssParams* configBssReqParam)
3242{
3243 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303244 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003245 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003247 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303248 if (NULL == configBssReqParam)
3249 {
3250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3251 "%s: configBssReqParam is NULL", __func__);
3252 return VOS_STATUS_E_INVAL;
3253 }
3254
3255 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3256 sizeof(WDI_ConfigBSSReqParamsType)) ;
3257
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 if(NULL == wdiConfigBssReqParam)
3259 {
3260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003261 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 VOS_ASSERT(0);
3263 return VOS_STATUS_E_NOMEM;
3264 }
3265 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3266 if(NULL == pWdaParams)
3267 {
3268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 VOS_ASSERT(0);
3271 vos_mem_free(wdiConfigBssReqParam);
3272 return VOS_STATUS_E_NOMEM;
3273 }
Kiran4a17ebe2013-01-31 10:43:43 -08003274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3275 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003277 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3278 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003279 /* Store Init Req pointer, as this will be used for response */
3280 /* store Params pass it to WDI */
3281 pWdaParams->pWdaContext = pWDA;
3282 pWdaParams->wdaMsgParam = configBssReqParam;
3283 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3285 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 if(IS_WDI_STATUS_FAILURE(status))
3287 {
3288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3289 "Failure in Config BSS WDI API, free all the memory " );
3290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3291 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 return CONVERT_WDI2VOS_STATUS(status) ;
3296}
Jeff Johnson295189b2012-06-20 16:38:30 -07003297#ifdef ENABLE_HAL_COMBINED_MESSAGES
3298/*
3299 * FUNCTION: WDA_PostAssocReqCallback
3300 * Post ASSOC req callback, send RSP back to PE
3301 */
3302void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3303 void* pUserData)
3304{
3305 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3306 tPostAssocParams *postAssocReqParam =
3307 (tPostAssocParams *)pWDA->wdaMsgParam ;
3308 /*STA context within the BSS Params*/
3309 tAddStaParams *staPostAssocParam =
3310 &postAssocReqParam->addBssParams.staContext ;
3311 /*STA Params for self STA*/
3312 tAddStaParams *selfStaPostAssocParam =
3313 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003317 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3319 {
3320 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3321 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3322 sizeof(tSirMacAddr)) ;
3323 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3324 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3325 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3327 }
3328 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3329 pWDA->wdaWdiApiMsgParam = NULL;
3330 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 return ;
3333}
Jeff Johnson295189b2012-06-20 16:38:30 -07003334/*
3335 * FUNCTION: WDA_ProcessPostAssocReq
3336 * Trigger POST ASSOC processing in WDI
3337 */
3338VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3339 tPostAssocParams *postAssocReqParam)
3340{
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 WDI_Status status = WDI_STATUS_SUCCESS ;
3342
3343 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3344 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3345 sizeof(WDI_PostAssocReqParamsType)) ;
3346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003347 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003348
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 if(NULL == wdiPostAssocReqParam)
3350 {
3351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003352 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 VOS_ASSERT(0);
3354 return VOS_STATUS_E_NOMEM;
3355 }
3356
3357 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3358 {
3359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003360 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 VOS_ASSERT(0);
3362 return VOS_STATUS_E_FAILURE;
3363 }
3364
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 /* update BSS params into WDI structure */
3366 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3367 &postAssocReqParam->addBssParams) ;
3368 /* update STA params into WDI structure */
3369 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3370 &postAssocReqParam->addStaParams) ;
3371
3372 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3373 postAssocReqParam->addBssParams.highPerformance;
3374 WDA_UpdateEdcaParamsForAC(pWDA,
3375 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3376 &postAssocReqParam->addBssParams.acbe);
3377 WDA_UpdateEdcaParamsForAC(pWDA,
3378 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3379 &postAssocReqParam->addBssParams.acbk);
3380 WDA_UpdateEdcaParamsForAC(pWDA,
3381 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3382 &postAssocReqParam->addBssParams.acvi);
3383 WDA_UpdateEdcaParamsForAC(pWDA,
3384 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3385 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 /* Store Init Req pointer, as this will be used for response */
3387 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 /* store Params pass it to WDI */
3389 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3391 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 if(IS_WDI_STATUS_FAILURE(status))
3393 {
3394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3395 "Failure in Post Assoc WDI API, free all the memory " );
3396 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3397 pWDA->wdaWdiApiMsgParam = NULL;
3398 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 return CONVERT_WDI2VOS_STATUS(status) ;
3403}
3404#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003405/*
3406 * FUNCTION: WDA_AddStaReqCallback
3407 * ADD STA req callback, send RSP back to PE
3408 */
3409void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3410 void* pUserData)
3411{
3412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3413 tWDA_CbContext *pWDA;
3414 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 if(NULL == pWdaParams)
3418 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 VOS_ASSERT(0) ;
3421 return ;
3422 }
3423 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3424 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003425 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003426 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003427 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3428 {
3429 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3430 /*TODO: UMAC structure doesn't have these fields*/
3431 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3432 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3433 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3434 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3435 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3436 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003437#ifdef FEATURE_WLAN_TDLS
3438 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3439 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3440#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003441 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003442#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 {
3444 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3445 wdiConfigStaRsp->ucBssIdx;
3446 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3447 WDA_VALID_STA_INDEX ;
3448 }
3449 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3450 {
3451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003452 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 VOS_ASSERT(0) ;
3454 return ;
3455 }
3456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3458 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003459 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 return ;
3461}
Jeff Johnson295189b2012-06-20 16:38:30 -07003462/*
3463 * FUNCTION: WDA_ConfigStaReq
3464 * Trigger Config STA processing in WDI
3465 */
3466VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3467 tAddStaParams *addStaReqParam)
3468{
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3471 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3472 sizeof(WDI_ConfigSTAReqParamsType)) ;
3473 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003475 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 if(NULL == wdiConfigStaReqParam)
3477 {
3478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003480 VOS_ASSERT(0);
3481 return VOS_STATUS_E_NOMEM;
3482 }
3483 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3484 if(NULL == pWdaParams)
3485 {
3486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003487 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 VOS_ASSERT(0);
3489 vos_mem_free(wdiConfigStaReqParam);
3490 return VOS_STATUS_E_NOMEM;
3491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003492 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 /* update STA params into WDI structure */
3494 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3495 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 /* Store Init Req pointer, as this will be used for response */
3497 /* store Params pass it to WDI */
3498 pWdaParams->pWdaContext = pWDA;
3499 pWdaParams->wdaMsgParam = addStaReqParam;
3500 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3502 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 if(IS_WDI_STATUS_FAILURE(status))
3504 {
3505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3506 "Failure in Config STA WDI API, free all the memory " );
3507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3508 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3511 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 return CONVERT_WDI2VOS_STATUS(status) ;
3513}
Jeff Johnson295189b2012-06-20 16:38:30 -07003514/*
3515 * FUNCTION: WDA_DelBSSReqCallback
3516 * Dens DEL BSS RSP back to PE
3517 */
3518void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3519 void* pUserData)
3520{
3521 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3522 tWDA_CbContext *pWDA;
3523 tDeleteBssParams *delBssReqParam;
3524 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003526 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 if(NULL == pWdaParams)
3528 {
3529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003530 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 VOS_ASSERT(0) ;
3532 return ;
3533 }
3534 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3535 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003536 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3538 {
3539 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3540 sizeof(tSirMacAddr)) ;
3541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3543 {
3544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003545 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003546 VOS_ASSERT(0) ;
3547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3549 {
3550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003551 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 VOS_ASSERT(0) ;
3553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3555 {
3556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003557 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 VOS_ASSERT(0) ;
3559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3561 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 /* reset the the system role*/
3563 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3564
3565 /* Reset the BA related information */
3566 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3567 {
3568 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3569 {
3570 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3571 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3572 /* Reset framesTxed counters here */
3573 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3574 {
3575 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3576 }
3577 }
3578 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003580 return ;
3581}
3582
Jeff Johnson295189b2012-06-20 16:38:30 -07003583/*
3584 * FUNCTION: WDA_ProcessDelBssReq
3585 * Init DEL BSS req with WDI
3586 */
3587VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3588 tDeleteBssParams *delBssParam)
3589{
3590 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3592 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3593 sizeof(WDI_DelBSSReqParamsType)) ;
3594 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003596 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 if(NULL == wdiDelBssReqParam)
3598 {
3599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 VOS_ASSERT(0);
3602 return VOS_STATUS_E_NOMEM;
3603 }
3604 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3605 if(NULL == pWdaParams)
3606 {
3607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003609 VOS_ASSERT(0);
3610 vos_mem_free(wdiDelBssReqParam);
3611 return VOS_STATUS_E_NOMEM;
3612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003613 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3614 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3615
3616 /* Store Init Req pointer, as this will be used for response */
3617 /* store Params pass it to WDI */
3618 pWdaParams->pWdaContext = pWDA;
3619 pWdaParams->wdaMsgParam = delBssParam;
3620 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 status = WDI_DelBSSReq(wdiDelBssReqParam,
3622 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003623 if(IS_WDI_STATUS_FAILURE(status))
3624 {
3625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3626 "Failure in Del BSS WDI API, free all the memory " );
3627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3628 vos_mem_free(pWdaParams) ;
3629 delBssParam->status = eSIR_FAILURE ;
3630 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 return CONVERT_WDI2VOS_STATUS(status) ;
3633}
Jeff Johnson295189b2012-06-20 16:38:30 -07003634/*
3635 * FUNCTION: WDA_DelSTAReqCallback
3636 * Dens DEL STA RSP back to PE
3637 */
3638void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3639 void* pUserData)
3640{
3641 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3642 tWDA_CbContext *pWDA;
3643 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003645 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003646 if(NULL == pWdaParams)
3647 {
3648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003649 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 VOS_ASSERT(0) ;
3651 return ;
3652 }
3653 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3654 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003655 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3657 {
3658 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3659 {
3660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003661 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 VOS_ASSERT(0) ;
3663 }
3664 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3665 }
3666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3667 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003668 /*Reset the BA information corresponding to this STAIdx */
3669 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3670 WDA_INVALID_STA_INDEX;
3671 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3672
3673 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 return ;
3675}
Jeff Johnson295189b2012-06-20 16:38:30 -07003676/*
3677 * FUNCTION: WDA_ProcessDelStaReq
3678 * Init DEL STA req with WDI
3679 */
3680VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3681 tDeleteStaParams *delStaParam)
3682{
3683 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3685 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3686 sizeof(WDI_DelSTAReqParamsType)) ;
3687 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003689 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 if(NULL == wdiDelStaReqParam)
3691 {
3692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003693 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 VOS_ASSERT(0);
3695 return VOS_STATUS_E_NOMEM;
3696 }
3697 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3698 if(NULL == pWdaParams)
3699 {
3700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003701 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003702 VOS_ASSERT(0);
3703 vos_mem_free(wdiDelStaReqParam);
3704 return VOS_STATUS_E_NOMEM;
3705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003706 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3707 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 /* Store Init Req pointer, as this will be used for response */
3709 /* store Params pass it to WDI */
3710 pWdaParams->pWdaContext = pWDA;
3711 pWdaParams->wdaMsgParam = delStaParam;
3712 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003713 status = WDI_DelSTAReq(wdiDelStaReqParam,
3714 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003715 if(IS_WDI_STATUS_FAILURE(status))
3716 {
3717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3718 "Failure in Del STA WDI API, free all the memory status = %d",
3719 status );
3720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3721 vos_mem_free(pWdaParams) ;
3722 delStaParam->status = eSIR_FAILURE ;
3723 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3724 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 return CONVERT_WDI2VOS_STATUS(status) ;
3726}
Jeff Johnson295189b2012-06-20 16:38:30 -07003727void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3728{
3729 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3730 tWDA_CbContext *pWDA;
3731 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003733 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003734 if(NULL == pWdaParams)
3735 {
3736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003737 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 VOS_ASSERT(0) ;
3739 return ;
3740 }
3741 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3742 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3744 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3746 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3747 pwdiAddSTASelfRsp->macSelfSta,
3748 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 return ;
3751}
Jeff Johnson295189b2012-06-20 16:38:30 -07003752/*
3753 * FUNCTION: WDA_ProcessAddStaSelfReq
3754 *
3755 */
3756VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3757{
3758 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003759 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3761 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3762 sizeof(WDI_AddSTASelfReqParamsType)) ;
3763 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003765 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 if( NULL == wdiAddStaSelfReq )
3767 {
3768 VOS_ASSERT( 0 );
3769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003770 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 return( VOS_STATUS_E_NOMEM );
3772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003773 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003774 if( NULL == pWdaParams )
3775 {
3776 VOS_ASSERT( 0 );
3777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003778 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 vos_mem_free(wdiAddStaSelfReq) ;
3780 return( VOS_STATUS_E_NOMEM );
3781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003783 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003784 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003785 /* Store Init Req pointer, as this will be used for response */
3786 /* store Params pass it to WDI */
3787 pWdaParams->pWdaContext = pWDA;
3788 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3789 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003790 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003791
Jeff Johnson43971f52012-07-17 12:26:56 -07003792 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 {
3794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3795 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003796 wstatus );
3797 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3799 vos_mem_free(pWdaParams) ;
3800 pAddStaSelfReq->status = eSIR_FAILURE ;
3801 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3802 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003803 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003804}
Jeff Johnson295189b2012-06-20 16:38:30 -07003805/*
3806 * FUNCTION: WDA_DelSTASelfRespCallback
3807 *
3808 */
3809void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3810 wdiDelStaSelfRspParams , void* pUserData)
3811{
3812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3813 tWDA_CbContext *pWDA;
3814 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003816 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003817 if (NULL == pWdaParams)
3818 {
3819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003820 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 VOS_ASSERT(0);
3822 return;
3823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003824 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3825 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003826 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003827 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003828
3829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3830 vos_mem_free(pWdaParams) ;
3831
3832 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003833 return ;
3834}
Jeff Johnson295189b2012-06-20 16:38:30 -07003835/*
3836 * FUNCTION: WDA_DelSTASelfReqCallback
3837 *
3838 */
3839void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3840 void* pUserData)
3841{
3842 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3843 tWDA_CbContext *pWDA;
3844 tDelStaSelfParams *delStaSelfParams;
3845
3846 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303847 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003848 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003849
3850 if (NULL == pWdaParams)
3851 {
3852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003853 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003854 VOS_ASSERT(0);
3855 return;
3856 }
3857
3858 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3859 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3860
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003861 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003862
3863 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3864 {
3865 VOS_ASSERT(0);
3866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3867 vos_mem_free(pWdaParams) ;
3868 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3869 }
3870
3871 return ;
3872}
3873
3874/*
3875 * FUNCTION: WDA_DelSTASelfReq
3876 * Trigger Config STA processing in WDI
3877 */
3878VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3879 tDelStaSelfParams* pDelStaSelfReqParam)
3880{
3881 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003882 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 tWDA_ReqParams *pWdaParams = NULL;
3884 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3885 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3886 sizeof(WDI_DelSTASelfReqParamsType)) ;
3887
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003889 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 if( NULL == wdiDelStaSelfReq )
3891 {
3892 VOS_ASSERT( 0 );
3893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003894 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 return( VOS_STATUS_E_NOMEM );
3896 }
3897
3898 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3899 if( NULL == pWdaParams )
3900 {
3901 VOS_ASSERT( 0 );
3902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003903 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 vos_mem_free(wdiDelStaSelfReq) ;
3905 return( VOS_STATUS_E_NOMEM );
3906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 pWdaParams->pWdaContext = pWDA;
3908 /* Store param pointer as passed in by caller */
3909 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3910 /* store Params pass it to WDI */
3911 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003912 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3913 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3914
3915 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3916 wdiDelStaSelfReq->pUserData = pWdaParams;
3917
Jeff Johnson43971f52012-07-17 12:26:56 -07003918 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3920
Jeff Johnson43971f52012-07-17 12:26:56 -07003921 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 {
3923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3924 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3925 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003926 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3928 vos_mem_free(pWdaParams) ;
3929 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3930 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3931 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003932 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003933}
3934
Jeff Johnson295189b2012-06-20 16:38:30 -07003935/*
3936 * FUNCTION: WDA_SendMsg
3937 * Send Message back to PE
3938 */
3939void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3940 void *pBodyptr, tANI_U32 bodyVal)
3941{
3942 tSirMsgQ msg = {0} ;
3943 tANI_U32 status = VOS_STATUS_SUCCESS ;
3944 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 msg.type = msgType;
3946 msg.bodyval = bodyVal;
3947 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003949 if (VOS_STATUS_SUCCESS != status)
3950 {
3951 if(NULL != pBodyptr)
3952 {
3953 vos_mem_free(pBodyptr);
3954 }
3955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003956 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003957 VOS_ASSERT(0) ;
3958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003959 return ;
3960}
Jeff Johnson295189b2012-06-20 16:38:30 -07003961/*
3962 * FUNCTION: WDA_UpdateBSSParams
3963 * Translated WDA/PE BSS info into WDI BSS info..
3964 */
3965void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3966 WDI_ConfigBSSReqInfoType *wdiBssParams,
3967 tAddBssParams *wdaBssParams)
3968{
3969 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 /* copy bssReq Params to WDI structure */
3971 vos_mem_copy(wdiBssParams->macBSSID,
3972 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3973 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3974 sizeof(tSirMacAddr)) ;
3975 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3976 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3977 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 wdiBssParams->ucShortSlotTimeSupported =
3979 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003980 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3981 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3982 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3983 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3984 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3985
3986 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3987 wdiBssParams->ucTXOPProtectionFullSupport =
3988 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3990 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3993 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3994 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3995 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3996
Chet Lanctot186b5732013-03-18 10:26:30 -07003997 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3998
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 /* copy SSID into WDI structure */
4000 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4001 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4002 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4004 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004005 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004006#ifdef WLAN_FEATURE_VOWIFI
4007 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4008#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011#ifdef WLAN_FEATURE_VOWIFI_11R
4012 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 if(wdiBssParams->bExtSetStaKeyParamValid)
4014 {
4015 /* copy set STA key params to WDI structure */
4016 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4017 wdaBssParams->extSetStaKeyParam.staIdx;
4018 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4019 wdaBssParams->extSetStaKeyParam.encType;
4020 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4021 wdaBssParams->extSetStaKeyParam.wepType;
4022 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4023 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4025 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004026 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4028 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4029 {
4030 WDA_GetWepKeysFromCfg( pWDA,
4031 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4032 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4033 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4034 }
4035 else
4036 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4038 keyIndex++)
4039 {
4040 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4041 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4042 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4043 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4044 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4045 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4047 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4048 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4049 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4050 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4051 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4052 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4053 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4056 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 }
4058 }
4059 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4060 }
4061 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4062 {
4063 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4064 sizeof(wdaBssParams->extSetStaKeyParam) );
4065 }
4066#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004067#ifdef WLAN_FEATURE_11AC
4068 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4069 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4070#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004071
4072 return ;
4073}
Jeff Johnson295189b2012-06-20 16:38:30 -07004074/*
4075 * FUNCTION: WDA_UpdateSTAParams
4076 * Translated WDA/PE BSS info into WDI BSS info..
4077 */
4078void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4079 WDI_ConfigStaReqInfoType *wdiStaParams,
4080 tAddStaParams *wdaStaParams)
4081{
4082 tANI_U8 i = 0;
4083 /* Update STA params */
4084 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4085 sizeof(tSirMacAddr)) ;
4086 wdiStaParams->usAssocId = wdaStaParams->assocId;
4087 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004088 wdiStaParams->staIdx = wdaStaParams->staIdx;
4089
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 wdiStaParams->ucShortPreambleSupported =
4091 wdaStaParams->shortPreambleSupported;
4092 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4093 sizeof(tSirMacAddr)) ;
4094 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4095
4096 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4097
4098 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4099 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4100 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4101 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4102 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4103 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4104 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4105
4106 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4107 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004108 wdiStaParams->wdiSupportedRates.opRateMode =
4109 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4111 {
4112 wdiStaParams->wdiSupportedRates.llbRates[i] =
4113 wdaStaParams->supportedRates.llbRates[i];
4114 }
4115 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4116 {
4117 wdiStaParams->wdiSupportedRates.llaRates[i] =
4118 wdaStaParams->supportedRates.llaRates[i];
4119 }
4120 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4121 {
4122 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4123 wdaStaParams->supportedRates.aniLegacyRates[i];
4124 }
4125 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4126 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004127#ifdef WLAN_FEATURE_11AC
4128 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4129 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4130 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4131 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4132#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4134 {
4135 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4136 wdaStaParams->supportedRates.supportedMCSSet[i];
4137 }
4138 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4139 wdaStaParams->supportedRates.rxHighestDataRate;
4140
4141 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4142
4143 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4144
4145 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4146 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4147 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4148
4149 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4150 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4151 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4152 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004154#ifdef WLAN_FEATURE_11AC
4155 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4156 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004157 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004158#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004159 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4160 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 return ;
4162}
Jeff Johnson295189b2012-06-20 16:38:30 -07004163/*
4164 * -------------------------------------------------------------------------
4165 * CFG update to WDI
4166 * -------------------------------------------------------------------------
4167 */
4168
4169 /*
4170 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4171 * Convert the WNI CFG ID to HAL CFG ID
4172 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004173static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004174{
4175 switch(wniCfgId)
4176 {
4177 case WNI_CFG_STA_ID:
4178 return QWLAN_HAL_CFG_STA_ID;
4179 case WNI_CFG_CURRENT_TX_ANTENNA:
4180 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4181 case WNI_CFG_CURRENT_RX_ANTENNA:
4182 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4183 case WNI_CFG_LOW_GAIN_OVERRIDE:
4184 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4185 case WNI_CFG_POWER_STATE_PER_CHAIN:
4186 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4187 case WNI_CFG_CAL_PERIOD:
4188 return QWLAN_HAL_CFG_CAL_PERIOD;
4189 case WNI_CFG_CAL_CONTROL:
4190 return QWLAN_HAL_CFG_CAL_CONTROL;
4191 case WNI_CFG_PROXIMITY:
4192 return QWLAN_HAL_CFG_PROXIMITY;
4193 case WNI_CFG_NETWORK_DENSITY:
4194 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4195 case WNI_CFG_MAX_MEDIUM_TIME:
4196 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4197 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4198 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4199 case WNI_CFG_RTS_THRESHOLD:
4200 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4201 case WNI_CFG_SHORT_RETRY_LIMIT:
4202 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4203 case WNI_CFG_LONG_RETRY_LIMIT:
4204 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4205 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4206 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4207 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4208 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4209 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4210 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4211 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4212 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4213 case WNI_CFG_FIXED_RATE:
4214 return QWLAN_HAL_CFG_FIXED_RATE;
4215 case WNI_CFG_RETRYRATE_POLICY:
4216 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4217 case WNI_CFG_RETRYRATE_SECONDARY:
4218 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4219 case WNI_CFG_RETRYRATE_TERTIARY:
4220 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4221 case WNI_CFG_FORCE_POLICY_PROTECTION:
4222 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4223 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4224 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4225 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4226 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4227 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4228 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4229 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4230 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4231 case WNI_CFG_MAX_BA_SESSIONS:
4232 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4233 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4234 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4235 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4236 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4237 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4238 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4239 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4240 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4241 case WNI_CFG_STATS_PERIOD:
4242 return QWLAN_HAL_CFG_STATS_PERIOD;
4243 case WNI_CFG_CFP_MAX_DURATION:
4244 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4245#if 0 /*This is not part of CFG*/
4246 case WNI_CFG_FRAME_TRANS_ENABLED:
4247 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4248#endif
4249 case WNI_CFG_DTIM_PERIOD:
4250 return QWLAN_HAL_CFG_DTIM_PERIOD;
4251 case WNI_CFG_EDCA_WME_ACBK:
4252 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4253 case WNI_CFG_EDCA_WME_ACBE:
4254 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4255 case WNI_CFG_EDCA_WME_ACVI:
4256 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4257 case WNI_CFG_EDCA_WME_ACVO:
4258 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4259#if 0
4260 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4261 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4262 case WNI_CFG_TELE_BCN_TRANS_LI:
4263 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4264 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4265 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4266 case WNI_CFG_TELE_BCN_MAX_LI:
4267 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4268 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4269 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4270#endif
4271 case WNI_CFG_ENABLE_CLOSE_LOOP:
4272 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004273 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4274 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 default:
4276 {
4277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004278 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004279 wniCfgId);
4280 return VOS_STATUS_E_INVAL;
4281 }
4282 }
4283}
Jeff Johnson295189b2012-06-20 16:38:30 -07004284/*
4285 * FUNCTION: WDA_UpdateCfgCallback
4286 *
4287 */
4288void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4289{
4290 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4291 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4292 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004294 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004295 /*
4296 * currently there is no response message is expected between PE and
4297 * WDA, Failure return from WDI is a ASSERT condition
4298 */
4299 if(WDI_STATUS_SUCCESS != wdiStatus)
4300 {
4301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004302 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4304 }
4305
4306 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4307 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4308 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 return ;
4310}
Jeff Johnson295189b2012-06-20 16:38:30 -07004311/*
4312 * FUNCTION: WDA_UpdateCfg
4313 *
4314 */
4315VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4316{
4317
4318 WDI_Status status = WDI_STATUS_SUCCESS ;
4319 tANI_U32 val =0;
4320 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4321 tHalCfg *configData;
4322 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4323 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004325 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 if (NULL == pMac )
4327 {
4328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004329 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 return VOS_STATUS_E_FAILURE;
4331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004332 if(WDA_START_STATE != pWDA->wdaState)
4333 {
4334 return VOS_STATUS_E_FAILURE;
4335 }
4336
4337 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4338 {
4339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004340 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004341 VOS_ASSERT(0);
4342 return VOS_STATUS_E_FAILURE;
4343 }
4344
4345 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4346 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 if(NULL == wdiCfgReqParam)
4348 {
4349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 VOS_ASSERT(0);
4352 return VOS_STATUS_E_NOMEM;
4353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4355 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 if(NULL == wdiCfgReqParam->pConfigBuffer)
4357 {
4358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 vos_mem_free(wdiCfgReqParam);
4361 VOS_ASSERT(0);
4362 return VOS_STATUS_E_NOMEM;
4363 }
4364
4365 /*convert the WNI CFG Id to HAL CFG Id*/
4366 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4367 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4368
4369 /*TODO: revisit this for handling string parameters */
4370 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4371 &val) != eSIR_SUCCESS)
4372 {
4373 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004374 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004375 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4376 vos_mem_free(wdiCfgReqParam);
4377 return eSIR_FAILURE;
4378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004379 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4380 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4381 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4382 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4383 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4384
4385 /* store Params pass it to WDI */
4386 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004387#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4388 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4389 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 if(IS_WDI_STATUS_FAILURE(status))
4391 {
4392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4393 "Failure in Update CFG WDI API, free all the memory " );
4394 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4395 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4396 pWDA->wdaWdiCfgApiMsgParam = NULL;
4397 /* Failure is not expected */
4398 VOS_ASSERT(0) ;
4399 }
4400#else
4401 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4402 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4403 pWDA->wdaWdiCfgApiMsgParam = NULL;
4404#endif
4405 return CONVERT_WDI2VOS_STATUS(status) ;
4406}
4407
Jeff Johnson295189b2012-06-20 16:38:30 -07004408VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4409 v_U8_t *pDefaultKeyId,
4410 v_U8_t *pNumKeys,
4411 WDI_KeysType *pWdiKeys )
4412{
4413 v_U32_t i, j, defKeyId = 0;
4414 v_U32_t val = SIR_MAC_KEY_LENGTH;
4415 VOS_STATUS status = WDI_STATUS_SUCCESS;
4416 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004417 if (NULL == pMac )
4418 {
4419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004420 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 return VOS_STATUS_E_FAILURE;
4422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4424 &defKeyId ))
4425 {
4426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4427 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4428 }
4429
4430 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004431 /* Need to extract ALL of the configured WEP Keys */
4432 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4433 {
4434 val = SIR_MAC_KEY_LENGTH;
4435 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4436 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4437 pWdiKeys[j].key,
4438 &val ))
4439 {
4440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004441 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 }
4443 else
4444 {
4445 pWdiKeys[j].keyId = (tANI_U8) i;
4446 /*
4447 * Actually, a DC (Don't Care) because
4448 * this is determined (and set) by PE/MLME
4449 */
4450 pWdiKeys[j].unicast = 0;
4451 /*
4452 * Another DC (Don't Care)
4453 */
4454 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4455 /* Another DC (Don't Care). Unused for WEP */
4456 pWdiKeys[j].paeRole = 0;
4457 /* Determined from wlan_cfgGetStr() above.*/
4458 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 j++;
4460 *pNumKeys = (tANI_U8) j;
4461 }
4462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004463 return status;
4464}
Jeff Johnson295189b2012-06-20 16:38:30 -07004465/*
4466 * FUNCTION: WDA_SetBssKeyReqCallback
4467 * send SET BSS key RSP back to PE
4468 */
4469void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4470{
4471 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4472 tWDA_CbContext *pWDA;
4473 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004475 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004476 if(NULL == pWdaParams)
4477 {
4478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004479 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 VOS_ASSERT(0) ;
4481 return ;
4482 }
4483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4484 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4486 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004487 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 return ;
4490}
Jeff Johnson295189b2012-06-20 16:38:30 -07004491/*
4492 * FUNCTION: WDA_ProcessSetBssKeyReq
4493 * Request to WDI for programming the BSS key( key for
4494 * broadcast/multicast frames Encryption)
4495 */
4496VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4497 tSetBssKeyParams *setBssKeyParams )
4498{
4499 WDI_Status status = WDI_STATUS_SUCCESS ;
4500 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4501 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4502 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4503 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 if(NULL == wdiSetBssKeyParam)
4508 {
4509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 VOS_ASSERT(0);
4512 return VOS_STATUS_E_NOMEM;
4513 }
4514 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4515 if(NULL == pWdaParams)
4516 {
4517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 VOS_ASSERT(0);
4520 vos_mem_free(wdiSetBssKeyParam);
4521 return VOS_STATUS_E_NOMEM;
4522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 /* copy set BSS params to WDI structure */
4525 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4526 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4527 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 if(setBssKeyParams->encType != eSIR_ED_NONE)
4529 {
4530 if( setBssKeyParams->numKeys == 0 &&
4531 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4532 setBssKeyParams->encType == eSIR_ED_WEP104))
4533 {
4534 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4536 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4537 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4538 }
4539 else
4540 {
4541 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4542 {
4543 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4544 setBssKeyParams->key[keyIndex].keyId;
4545 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4546 setBssKeyParams->key[keyIndex].unicast;
4547 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4548 setBssKeyParams->key[keyIndex].keyDirection;
4549 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4550 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4551 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4552 setBssKeyParams->key[keyIndex].paeRole;
4553 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4554 setBssKeyParams->key[keyIndex].keyLength;
4555 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4556 setBssKeyParams->key[keyIndex].key,
4557 SIR_MAC_MAX_KEY_LENGTH);
4558 }
4559 }
4560 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4562 setBssKeyParams->singleTidRc;
4563 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 /* Store set key pointer, as this will be used for response */
4565 /* store Params pass it to WDI */
4566 pWdaParams->pWdaContext = pWDA;
4567 pWdaParams->wdaMsgParam = setBssKeyParams;
4568 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4570 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4571
4572 if(IS_WDI_STATUS_FAILURE(status))
4573 {
4574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4575 "Failure in Set BSS Key Req WDI API, free all the memory " );
4576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4577 vos_mem_free(pWdaParams) ;
4578 setBssKeyParams->status = eSIR_FAILURE ;
4579 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 return CONVERT_WDI2VOS_STATUS(status) ;
4582}
Jeff Johnson295189b2012-06-20 16:38:30 -07004583/*
4584 * FUNCTION: WDA_RemoveBssKeyReqCallback
4585 * send SET BSS key RSP back to PE
4586 */
4587void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4588{
4589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4590 tWDA_CbContext *pWDA;
4591 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004593 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004594 if(NULL == pWdaParams)
4595 {
4596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004597 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 VOS_ASSERT(0) ;
4599 return ;
4600 }
4601 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4602 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4604 vos_mem_free(pWdaParams) ;
4605
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004606 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004607 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 return ;
4609}
Jeff Johnson295189b2012-06-20 16:38:30 -07004610/*
4611 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4612 * Request to WDI to remove the BSS key( key for broadcast/multicast
4613 * frames Encryption)
4614 */
4615VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4616 tRemoveBssKeyParams *removeBssKeyParams )
4617{
4618 WDI_Status status = WDI_STATUS_SUCCESS ;
4619 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4620 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4621 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4622 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004624 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 if(NULL == wdiRemoveBssKeyParam)
4626 {
4627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004628 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004629 VOS_ASSERT(0);
4630 return VOS_STATUS_E_NOMEM;
4631 }
4632 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4633 if(NULL == pWdaParams)
4634 {
4635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004636 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004637 VOS_ASSERT(0);
4638 vos_mem_free(wdiRemoveBssKeyParam);
4639 return VOS_STATUS_E_NOMEM;
4640 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004641 /* copy Remove BSS key params to WDI structure*/
4642 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4643 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4644 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4645 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4646 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 /* Store remove key pointer, as this will be used for response */
4648 /* store Params pass it to WDI */
4649 pWdaParams->pWdaContext = pWDA;
4650 pWdaParams->wdaMsgParam = removeBssKeyParams;
4651 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004652 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4653 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004654 if(IS_WDI_STATUS_FAILURE(status))
4655 {
4656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4657 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4659 vos_mem_free(pWdaParams) ;
4660 removeBssKeyParams->status = eSIR_FAILURE ;
4661 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004663 return CONVERT_WDI2VOS_STATUS(status) ;
4664}
Jeff Johnson295189b2012-06-20 16:38:30 -07004665/*
4666 * FUNCTION: WDA_SetBssKeyReqCallback
4667 * send SET BSS key RSP back to PE
4668 */
4669void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4670{
4671 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4672 tWDA_CbContext *pWDA;
4673 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004675 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 if(NULL == pWdaParams)
4677 {
4678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004679 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 VOS_ASSERT(0) ;
4681 return ;
4682 }
4683 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4684 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4686 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004687 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004688 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004689 return ;
4690}
Jeff Johnson295189b2012-06-20 16:38:30 -07004691/*
4692 * FUNCTION: WDA_ProcessSetStaKeyReq
4693 * Request to WDI for programming the STA key( key for Unicast frames
4694 * Encryption)
4695 */
4696VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4697 tSetStaKeyParams *setStaKeyParams )
4698{
4699 WDI_Status status = WDI_STATUS_SUCCESS ;
4700 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4701 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4702 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4703 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004706 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 if(NULL == wdiSetStaKeyParam)
4708 {
4709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004710 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 VOS_ASSERT(0);
4712 return VOS_STATUS_E_NOMEM;
4713 }
4714 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4715 if(NULL == pWdaParams)
4716 {
4717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004719 VOS_ASSERT(0);
4720 vos_mem_free(wdiSetStaKeyParam);
4721 return VOS_STATUS_E_NOMEM;
4722 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004723 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004724 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 /* copy set STA key params to WDI structure */
4726 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4727 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4728 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4729 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 if(setStaKeyParams->encType != eSIR_ED_NONE)
4731 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004732 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004733 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4734 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4735 {
4736 WDA_GetWepKeysFromCfg( pWDA,
4737 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4738 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4739 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4740 }
4741 else
4742 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004743 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4744 keyIndex++)
4745 {
4746 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4747 setStaKeyParams->key[keyIndex].keyId;
4748 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4749 setStaKeyParams->key[keyIndex].unicast;
4750 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4751 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004752 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4753 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4754 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4755 setStaKeyParams->key[keyIndex].paeRole;
4756 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4757 setStaKeyParams->key[keyIndex].keyLength;
4758 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4759 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4760 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4761 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4762 {
4763 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4764 }
4765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4767 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 }
4769 }
4770 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4771 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004772 /* Store set key pointer, as this will be used for response */
4773 /* store Params pass it to WDI */
4774 pWdaParams->pWdaContext = pWDA;
4775 pWdaParams->wdaMsgParam = setStaKeyParams;
4776 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4778 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 if(IS_WDI_STATUS_FAILURE(status))
4780 {
4781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4782 "Failure in set STA Key Req WDI API, free all the memory " );
4783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4784 vos_mem_free(pWdaParams) ;
4785 setStaKeyParams->status = eSIR_FAILURE ;
4786 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004788 return CONVERT_WDI2VOS_STATUS(status) ;
4789}
Jeff Johnson295189b2012-06-20 16:38:30 -07004790/*
4791 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4792 * send SET Bcast STA key RSP back to PE
4793 */
4794void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4795{
4796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4797 tWDA_CbContext *pWDA;
4798 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004800 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004801 if(NULL == pWdaParams)
4802 {
4803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004804 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 VOS_ASSERT(0) ;
4806 return ;
4807 }
4808 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4809 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4811 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004812 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004813 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004814 return ;
4815}
4816
Jeff Johnson295189b2012-06-20 16:38:30 -07004817/*
4818 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4819 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4820 * Encryption)
4821 */
4822VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4823 tSetStaKeyParams *setStaKeyParams )
4824{
4825 WDI_Status status = WDI_STATUS_SUCCESS ;
4826 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4827 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4828 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4829 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004830 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004832 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004833 if(NULL == wdiSetStaKeyParam)
4834 {
4835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 VOS_ASSERT(0);
4838 return VOS_STATUS_E_NOMEM;
4839 }
4840 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4841 if(NULL == pWdaParams)
4842 {
4843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004845 VOS_ASSERT(0);
4846 vos_mem_free(wdiSetStaKeyParam);
4847 return VOS_STATUS_E_NOMEM;
4848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004850 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 /* copy set STA key params to WDI structure */
4852 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4853 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4854 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4855 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 if(setStaKeyParams->encType != eSIR_ED_NONE)
4857 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004858 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4859 keyIndex++)
4860 {
4861 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4862 setStaKeyParams->key[keyIndex].keyId;
4863 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4864 setStaKeyParams->key[keyIndex].unicast;
4865 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4866 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4868 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4869 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4870 setStaKeyParams->key[keyIndex].paeRole;
4871 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4872 setStaKeyParams->key[keyIndex].keyLength;
4873 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4874 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4877 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 }
4879 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 /* Store set key pointer, as this will be used for response */
4881 /* store Params pass it to WDI */
4882 pWdaParams->pWdaContext = pWDA;
4883 pWdaParams->wdaMsgParam = setStaKeyParams;
4884 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4886 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 if(IS_WDI_STATUS_FAILURE(status))
4888 {
4889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4890 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4892 vos_mem_free(pWdaParams) ;
4893 setStaKeyParams->status = eSIR_FAILURE ;
4894 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 return CONVERT_WDI2VOS_STATUS(status) ;
4897}
Jeff Johnson295189b2012-06-20 16:38:30 -07004898/*
4899 * FUNCTION: WDA_RemoveStaKeyReqCallback
4900 * send SET BSS key RSP back to PE
4901 */
4902void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4903{
4904 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4905 tWDA_CbContext *pWDA;
4906 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004908 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 if(NULL == pWdaParams)
4910 {
4911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004912 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 VOS_ASSERT(0) ;
4914 return ;
4915 }
4916 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4917 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4919 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004920 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 return ;
4923}
4924
Jeff Johnson295189b2012-06-20 16:38:30 -07004925/*
4926 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4927 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4928 */
4929VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4930 tRemoveStaKeyParams *removeStaKeyParams )
4931{
4932 WDI_Status status = WDI_STATUS_SUCCESS ;
4933 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4934 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4935 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4936 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004938 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 if(NULL == wdiRemoveStaKeyParam)
4940 {
4941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 VOS_ASSERT(0);
4944 return VOS_STATUS_E_NOMEM;
4945 }
4946 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4947 if(NULL == pWdaParams)
4948 {
4949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 VOS_ASSERT(0);
4952 vos_mem_free(wdiRemoveStaKeyParam);
4953 return VOS_STATUS_E_NOMEM;
4954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 /* copy remove STA key params to WDI structure*/
4956 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4957 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4958 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4959 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4960 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 /* Store remove key pointer, as this will be used for response */
4962 /* store Params pass it to WDI */
4963 pWdaParams->pWdaContext = pWDA;
4964 pWdaParams->wdaMsgParam = removeStaKeyParams;
4965 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4967 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 if(IS_WDI_STATUS_FAILURE(status))
4969 {
4970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4971 "Failure in remove STA Key Req WDI API, free all the memory " );
4972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4973 vos_mem_free(pWdaParams) ;
4974 removeStaKeyParams->status = eSIR_FAILURE ;
4975 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 return CONVERT_WDI2VOS_STATUS(status) ;
4978}
Jeff Johnson295189b2012-06-20 16:38:30 -07004979/*
4980 * FUNCTION: WDA_IsHandleSetLinkStateReq
4981 * Update the WDA state and return the status to handle this message or not
4982 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004983WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4984 tWDA_CbContext *pWDA,
4985 tLinkStateParams *linkStateParams)
4986{
4987 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 switch(linkStateParams->state)
4989 {
4990 case eSIR_LINK_PREASSOC_STATE:
4991 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4992 /*
4993 * set the WDA state to PRE ASSOC
4994 * copy the BSSID into pWDA to use it in join request and return,
4995 * No need to handle these messages.
4996 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004997 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4998 {
4999 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005000 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005001 }
5002 else
5003 {
5004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005005 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005006 VOS_ASSERT(0);
5007 }
5008
5009 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5010 {
5011 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005013 }
5014 else
5015 {
5016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005017 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005018 VOS_ASSERT(0);
5019 }
5020
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5022 *channel and after ) so reset the WDA state to ready when the second
5023 * time UMAC issue the link state with PREASSOC
5024 */
5025 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5026 {
5027 /* RESET WDA state back to WDA_READY_STATE */
5028 pWDA->wdaState = WDA_READY_STATE;
5029 }
5030 else
5031 {
5032 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5033 }
5034 //populate linkState info in WDACbCtxt
5035 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005036 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 default:
5038 if(pWDA->wdaState != WDA_READY_STATE)
5039 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005040 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5041 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5042 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5043 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5044 *the ASSERT in WDA_Stop during module unload.*/
5045 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5046 {
5047 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005048 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005049 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005050 else
5051 {
5052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005053 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005054 status = WDA_IGNORE_SET_LINK_STATE;
5055 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005056 }
5057 break;
5058 }
5059
5060 return status;
5061}
Jeff Johnson295189b2012-06-20 16:38:30 -07005062/*
5063 * FUNCTION: WDA_SetLinkStateCallback
5064 * call back function for set link state from WDI
5065 */
5066void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5067{
5068 tWDA_CbContext *pWDA;
5069 tLinkStateParams *linkStateParams;
5070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005072 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 if(NULL == pWdaParams)
5074 {
5075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005076 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 VOS_ASSERT(0) ;
5078 return ;
5079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005080 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005081 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 /*
5083 * In STA mode start the BA activity check timer after association
5084 * and in AP mode start BA activity check timer after BSS start */
5085 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5086 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005087 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5088 ((status == WDI_STATUS_SUCCESS) &&
5089 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005090 {
5091 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005093 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005094 /*
5095 * No respone required for WDA_SET_LINK_STATE so free the request
5096 * param here
5097 */
5098 if( pWdaParams != NULL )
5099 {
5100 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5101 {
5102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5103 }
5104 vos_mem_free(pWdaParams);
5105 }
5106 return ;
5107}
Jeff Johnson295189b2012-06-20 16:38:30 -07005108/*
5109 * FUNCTION: WDA_ProcessSetLinkState
5110 * Request to WDI to set the link status.
5111 */
5112VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5113 tLinkStateParams *linkStateParams)
5114{
5115 WDI_Status status = WDI_STATUS_SUCCESS ;
5116 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5117 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5118 sizeof(WDI_SetLinkReqParamsType)) ;
5119 tWDA_ReqParams *pWdaParams ;
5120 tpAniSirGlobal pMac;
5121 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5122
5123 if(NULL == pMac)
5124 {
5125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005126 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005128 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 return VOS_STATUS_E_FAILURE;
5130 }
5131
5132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005133 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005134 if(NULL == wdiSetLinkStateParam)
5135 {
5136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005138 VOS_ASSERT(0);
5139 return VOS_STATUS_E_NOMEM;
5140 }
5141 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5142 if(NULL == pWdaParams)
5143 {
5144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005146 VOS_ASSERT(0);
5147 vos_mem_free(wdiSetLinkStateParam);
5148 return VOS_STATUS_E_NOMEM;
5149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 if(WDA_IGNORE_SET_LINK_STATE ==
5151 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5152 {
5153 status = WDI_STATUS_E_FAILURE;
5154 }
5155 else
5156 {
5157 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5158 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5160 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005161 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5162 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 pWdaParams->pWdaContext = pWDA;
5164 /* Store remove key pointer, as this will be used for response */
5165 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 /* store Params pass it to WDI */
5167 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5168 /* Stop Timer only other than GO role and concurrent session */
5169 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005170 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005171 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5172 {
5173 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5176 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005177 if(IS_WDI_STATUS_FAILURE(status))
5178 {
5179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5180 "Failure in set link state Req WDI API, free all the memory " );
5181 }
5182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 if(IS_WDI_STATUS_FAILURE(status))
5184 {
5185 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005186 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 vos_mem_free(pWdaParams);
5188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005189 return CONVERT_WDI2VOS_STATUS(status) ;
5190}
Jeff Johnson295189b2012-06-20 16:38:30 -07005191/*
5192 * FUNCTION: WDA_GetStatsReqParamsCallback
5193 * send the response to PE with Stats received from WDI
5194 */
5195void WDA_GetStatsReqParamsCallback(
5196 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5197 void* pUserData)
5198{
5199 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5200 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5201
5202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005203 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005204 pGetPEStatsRspParams =
5205 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5206 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5207
5208 if(NULL == pGetPEStatsRspParams)
5209 {
5210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 VOS_ASSERT(0);
5213 return;
5214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5216 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5217 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5218 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005219
5220 //Fill the Session Id Properly in PE
5221 pGetPEStatsRspParams->sessionId = 0;
5222 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005223 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005224 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5225 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 vos_mem_copy( pGetPEStatsRspParams + 1,
5227 wdiGetStatsRsp + 1,
5228 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005229 /* send response to UMAC*/
5230 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5231
5232 return;
5233}
5234
Jeff Johnson295189b2012-06-20 16:38:30 -07005235/*
5236 * FUNCTION: WDA_ProcessGetStatsReq
5237 * Request to WDI to get the statistics
5238 */
5239VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5240 tAniGetPEStatsReq *pGetStatsParams)
5241{
5242 WDI_Status status = WDI_STATUS_SUCCESS ;
5243 WDI_GetStatsReqParamsType wdiGetStatsParam;
5244 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005246 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5248 pGetStatsParams->staId;
5249 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5250 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005251 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 status = WDI_GetStatsReq(&wdiGetStatsParam,
5253 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 if(IS_WDI_STATUS_FAILURE(status))
5255 {
5256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5257 "Failure in Get Stats Req WDI API, free all the memory " );
5258 pGetPEStatsRspParams =
5259 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5260 if(NULL == pGetPEStatsRspParams)
5261 {
5262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005265 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005266 return VOS_STATUS_E_NOMEM;
5267 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005268 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5269 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5270 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5271 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5272 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5273 (void *)pGetPEStatsRspParams, 0) ;
5274 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 /* Free the request message */
5276 vos_mem_free(pGetStatsParams);
5277 return CONVERT_WDI2VOS_STATUS(status);
5278}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005279
5280#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5281/*
5282 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5283 * send the response to PE with roam Rssi received from WDI
5284 */
5285void WDA_GetRoamRssiReqParamsCallback(
5286 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5287 void* pUserData)
5288{
5289 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5290 tWDA_CbContext *pWDA = NULL;
5291 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5292 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5294 "<------ %s " ,__func__);
5295 if(NULL == pWdaParams)
5296 {
5297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5298 "%s: pWdaParams received NULL", __func__);
5299 VOS_ASSERT(0) ;
5300 return ;
5301 }
5302 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5303 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5304
5305 if(NULL == pGetRoamRssiReqParams)
5306 {
5307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5308 "%s: pGetRoamRssiReqParams received NULL", __func__);
5309 VOS_ASSERT(0);
5310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5311 vos_mem_free(pWdaParams);
5312 return ;
5313 }
5314 pGetRoamRssiRspParams =
5315 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5316
5317 if(NULL == pGetRoamRssiRspParams)
5318 {
5319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5320 "%s: VOS MEM Alloc Failure", __func__);
5321 VOS_ASSERT(0);
5322 return;
5323 }
5324 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5325 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005326 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005327 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5328 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5329
5330 /* Assign get roam rssi req (backup) in to the response */
5331 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5332
5333 /* free WDI command buffer */
5334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5335 vos_mem_free(pWdaParams) ;
5336
5337 /* send response to UMAC*/
5338 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5339
5340 return;
5341}
5342
5343
5344
5345/*
5346 * FUNCTION: WDA_ProcessGetRoamRssiReq
5347 * Request to WDI to get the statistics
5348 */
5349VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5350 tAniGetRssiReq *pGetRoamRssiParams)
5351{
5352 WDI_Status status = WDI_STATUS_SUCCESS ;
5353 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5354 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5355 tWDA_ReqParams *pWdaParams = NULL;
5356
5357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5358 "------> %s " ,__func__);
5359 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5360 pGetRoamRssiParams->staId;
5361 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5362
5363 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5364 if(NULL == pWdaParams)
5365 {
5366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5367 "%s: VOS MEM Alloc Failure", __func__);
5368 VOS_ASSERT(0);
5369 return VOS_STATUS_E_NOMEM;
5370 }
5371
5372 /* Store Init Req pointer, as this will be used for response */
5373 pWdaParams->pWdaContext = pWDA;
5374
5375 /* Take Get roam Rssi req backup as it stores the callback to be called after
5376 receiving the response */
5377 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5378 pWdaParams->wdaWdiApiMsgParam = NULL;
5379
5380 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5381 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5382 if(IS_WDI_STATUS_FAILURE(status))
5383 {
5384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5385 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5386 pGetRoamRssiRspParams =
5387 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5388 if(NULL == pGetRoamRssiRspParams)
5389 {
5390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5391 "%s: VOS MEM Alloc Failure", __func__);
5392 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305393 vos_mem_free(pGetRoamRssiParams);
5394 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005395 return VOS_STATUS_E_NOMEM;
5396 }
5397 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5398 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5399 pGetRoamRssiRspParams->rssi = 0;
5400 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5401 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5402 (void *)pGetRoamRssiRspParams, 0) ;
5403 }
5404 return CONVERT_WDI2VOS_STATUS(status);
5405}
5406#endif
5407
5408
Jeff Johnson295189b2012-06-20 16:38:30 -07005409/*
5410 * FUNCTION: WDA_UpdateEDCAParamCallback
5411 * call back function for Update EDCA params from WDI
5412 */
5413void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5414{
5415 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5416 tEdcaParams *pEdcaParams;
5417
5418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005419 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 if(NULL == pWdaParams)
5421 {
5422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005423 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005424 VOS_ASSERT(0) ;
5425 return ;
5426 }
5427 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5429 vos_mem_free(pWdaParams);
5430 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 return ;
5432}
Jeff Johnson295189b2012-06-20 16:38:30 -07005433/*
5434 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5435 * Request to WDI to Update the EDCA params.
5436 */
5437VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5438 tEdcaParams *pEdcaParams)
5439{
5440 WDI_Status status = WDI_STATUS_SUCCESS ;
5441 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5442 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5443 sizeof(WDI_UpdateEDCAParamsType)) ;
5444 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005446 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 if(NULL == wdiEdcaParam)
5448 {
5449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005450 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005451 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005452 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 return VOS_STATUS_E_NOMEM;
5454 }
5455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5456 if(NULL == pWdaParams)
5457 {
5458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 VOS_ASSERT(0);
5461 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005462 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 return VOS_STATUS_E_NOMEM;
5464 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005466 /*
5467 Since firmware is not using highperformance flag, we have removed
5468 this flag from wdiEDCAInfo structure to match sizeof the structure
5469 between host and firmware.In future if we are planning to use
5470 highperformance flag then Please define this flag in wdiEDCAInfo
5471 structure, update it here and send it to firmware. i.e.
5472 Following is the original line which we removed as part of the fix
5473 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5474 pEdcaParams->highPerformance;
5475 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5477 &pEdcaParams->acbe);
5478 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5479 &pEdcaParams->acbk);
5480 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5481 &pEdcaParams->acvi);
5482 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5483 &pEdcaParams->acvo);
5484 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 pWdaParams->pWdaContext = pWDA;
5486 /* Store remove key pointer, as this will be used for response */
5487 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 /* store Params pass it to WDI */
5489 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5491 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 if(IS_WDI_STATUS_FAILURE(status))
5493 {
5494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5495 "Failure in Update EDCA Params WDI API, free all the memory " );
5496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5497 vos_mem_free(pWdaParams);
5498 vos_mem_free(pEdcaParams);
5499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 return CONVERT_WDI2VOS_STATUS(status) ;
5501}
Jeff Johnson295189b2012-06-20 16:38:30 -07005502/*
5503 * FUNCTION: WDA_AddBAReqCallback
5504 * send ADD BA RSP back to PE
5505 */
5506void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5507 void* pUserData)
5508{
5509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5510 tWDA_CbContext *pWDA;
5511 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005513 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 if(NULL == pWdaParams)
5515 {
5516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005517 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005518 VOS_ASSERT(0) ;
5519 return ;
5520 }
5521 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5522 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5524 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005525 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005527 return ;
5528}
5529
Jeff Johnson295189b2012-06-20 16:38:30 -07005530/*
5531 * FUNCTION: WDA_ProcessAddBAReq
5532 * Request to WDI to Update the ADDBA REQ params.
5533 */
5534VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5535 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5536{
Jeff Johnson43971f52012-07-17 12:26:56 -07005537 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5539 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5540 sizeof(WDI_AddBAReqParamsType)) ;
5541 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005543 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 if(NULL == wdiAddBAReqParam)
5545 {
5546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 VOS_ASSERT(0);
5549 return VOS_STATUS_E_NOMEM;
5550 }
5551 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5552 if(NULL == pWdaParams)
5553 {
5554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005555 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005556 VOS_ASSERT(0);
5557 vos_mem_free(wdiAddBAReqParam);
5558 return VOS_STATUS_E_NOMEM;
5559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 do
5561 {
5562 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 wdiAddBaInfo->ucSTAIdx = staIdx ;
5564 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5565 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 } while(0) ;
5567 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 pWdaParams->pWdaContext = pWDA;
5569 /* store Params pass it to WDI */
5570 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5571 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005572 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5573 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005574
Jeff Johnson43971f52012-07-17 12:26:56 -07005575 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 {
5577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005578 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5579 status = CONVERT_WDI2VOS_STATUS(wstatus);
5580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 vos_mem_free(pWdaParams);
5582 pAddBAReqParams->status = eSIR_FAILURE;
5583 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5584 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005585 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005586}
Jeff Johnson295189b2012-06-20 16:38:30 -07005587/*
5588 * FUNCTION: WDA_AddBASessionReqCallback
5589 * send ADD BA SESSION RSP back to PE/(or TL)
5590 */
5591void WDA_AddBASessionReqCallback(
5592 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5593{
5594 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5595 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5596 tWDA_CbContext *pWDA;
5597 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005599 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005600 if(NULL == pWdaParams)
5601 {
5602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005603 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005604 VOS_ASSERT(0) ;
5605 return ;
5606 }
5607 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5608 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 if( NULL == pAddBAReqParams )
5610 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005612 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5615 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005616 return ;
5617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5619 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 /*
5621 * if WDA in update TL state, update TL with BA session parama and send
5622 * another request to HAL(/WDI) (ADD_BA_REQ)
5623 */
5624
5625 if((VOS_STATUS_SUCCESS ==
5626 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5627 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5628 {
5629 /* Update TL with BA info received from HAL/WDI */
5630 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5631 wdiAddBaSession->usBaSessionID,
5632 wdiAddBaSession->ucSTAIdx,
5633 wdiAddBaSession->ucBaTID,
5634 wdiAddBaSession->ucBaBufferSize,
5635 wdiAddBaSession->ucWinSize,
5636 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5638 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5639 }
5640 else
5641 {
5642 pAddBAReqParams->status =
5643 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5644
5645 /* Setting Flag to indicate that Set BA is success */
5646 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5647 {
5648 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5649 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5650 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005654 /*Reset the WDA state to READY */
5655 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005656 return ;
5657}
5658
Jeff Johnson295189b2012-06-20 16:38:30 -07005659/*
5660 * FUNCTION: WDA_ProcessAddBASessionReq
5661 * Request to WDI to Update the ADDBA REQ params.
5662 */
5663VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5664 tAddBAParams *pAddBAReqParams)
5665{
5666 WDI_Status status = WDI_STATUS_SUCCESS ;
5667 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5668 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5669 sizeof(WDI_AddBASessionReqParamsType)) ;
5670 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005671 WLANTL_STAStateType tlSTAState = 0;
5672
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 == wdiAddBASessionReqParam)
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);
5680 return VOS_STATUS_E_NOMEM;
5681 }
5682 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5683 if(NULL == pWdaParams)
5684 {
5685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 VOS_ASSERT(0);
5688 vos_mem_free(wdiAddBASessionReqParam);
5689 return VOS_STATUS_E_NOMEM;
5690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 /*
5692 * Populate ADD BA parameters and pass these paarmeters to WDI.
5693 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5694 * the state to track if these is BA recipient case or BA initiator
5695 * case.
5696 */
5697 do
5698 {
5699 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5700 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5701 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5702 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5703 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5704 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5705 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005706 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005707 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5708 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5709 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5710 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5711 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005712 /* check the BA direction and update state accordingly */
5713 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5714 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5715 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5716
5717 }while(0) ;
5718 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005719 pWdaParams->pWdaContext = pWDA;
5720 /* Store ADD BA pointer, as this will be used for response */
5721 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5722 /* store Params pass it to WDI */
5723 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005724
5725 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5726 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5727 */
5728 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5729 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5730 {
5731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005732 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005733 status = WDI_STATUS_E_NOT_ALLOWED;
5734 pAddBAReqParams->status =
5735 CONVERT_WDI2SIR_STATUS(status) ;
5736 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5737 /*Reset the WDA state to READY */
5738 pWDA->wdaState = WDA_READY_STATE;
5739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5740 vos_mem_free(pWdaParams);
5741
5742 return CONVERT_WDI2VOS_STATUS(status) ;
5743 }
5744
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5746 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 if(IS_WDI_STATUS_FAILURE(status))
5748 {
5749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005750 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005752 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005753 pAddBAReqParams->status =
5754 CONVERT_WDI2SIR_STATUS(status) ;
5755 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005756 /*Reset the WDA state to READY */
5757 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 vos_mem_free(pWdaParams);
5760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005762}
Jeff Johnson295189b2012-06-20 16:38:30 -07005763/*
5764 * FUNCTION: WDA_DelBANotifyTL
5765 * send DEL BA IND to TL
5766 */
5767void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5768 tDelBAParams *pDelBAReqParams)
5769{
5770 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5771 //tSirMsgQ msg;
5772 vos_msg_t vosMsg;
5773 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005774 if(NULL == pDelBAInd)
5775 {
5776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005777 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005778 VOS_ASSERT(0) ;
5779 return;
5780 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005781 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5782 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5783 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5784 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005785
Jeff Johnson295189b2012-06-20 16:38:30 -07005786
5787 vosMsg.type = WDA_DELETEBA_IND;
5788 vosMsg.bodyptr = pDelBAInd;
5789 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5790 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5791 {
5792 vosStatus = VOS_STATUS_E_BADMSG;
5793 }
5794}
Jeff Johnson295189b2012-06-20 16:38:30 -07005795/*
5796 * FUNCTION: WDA_DelBAReqCallback
5797 * send DEL BA RSP back to PE
5798 */
5799void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5800{
5801 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5802 tWDA_CbContext *pWDA;
5803 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005805 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005806 if(NULL == pWdaParams)
5807 {
5808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005809 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005810 VOS_ASSERT(0) ;
5811 return ;
5812 }
5813 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5814 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 /* Notify TL about DEL BA in case of recipinet */
5816 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5817 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5818 {
5819 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005821 /*
5822 * No respone required for WDA_DELBA_IND so just free the request
5823 * param here
5824 */
5825 vos_mem_free(pDelBAReqParams);
5826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5827 vos_mem_free(pWdaParams);
5828 return ;
5829}
5830
Jeff Johnson295189b2012-06-20 16:38:30 -07005831/*
5832 * FUNCTION: WDA_ProcessDelBAReq
5833 * Request to WDI to Update the DELBA REQ params.
5834 */
5835VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5836 tDelBAParams *pDelBAReqParams)
5837{
5838 WDI_Status status = WDI_STATUS_SUCCESS ;
5839 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5840 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5841 sizeof(WDI_DelBAReqParamsType)) ;
5842 tWDA_ReqParams *pWdaParams ;
5843 tANI_U16 staIdx = 0;
5844 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005846 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005847 if(NULL == wdiDelBAReqParam)
5848 {
5849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005851 VOS_ASSERT(0);
5852 return VOS_STATUS_E_NOMEM;
5853 }
5854 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5855 if(NULL == pWdaParams)
5856 {
5857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005859 VOS_ASSERT(0);
5860 vos_mem_free(wdiDelBAReqParam);
5861 return VOS_STATUS_E_NOMEM;
5862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5864 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5865 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5866 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005867 pWdaParams->pWdaContext = pWDA;
5868 /* Store DEL BA pointer, as this will be used for response */
5869 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 /* store Params pass it to WDI */
5871 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5873 * maintained in WDA, so that WDA can retry for another BA session
5874 */
5875 staIdx = pDelBAReqParams->staIdx;
5876 tid = pDelBAReqParams->baTID;
5877 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 status = WDI_DelBAReq(wdiDelBAReqParam,
5879 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 if(IS_WDI_STATUS_FAILURE(status))
5881 {
5882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5883 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5885 vos_mem_free(pWdaParams->wdaMsgParam);
5886 vos_mem_free(pWdaParams);
5887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005888 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005889}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08005890
5891/*
5892 * FUNCTION: WDA_UpdateChReqCallback
5893 *
5894 */
5895void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
5896{
5897 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5898 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam =
5899 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
5900 WDI_UpdateChannelReqType *pwdiUpdateChanReqType =
5901 &pwdiUpdateChReqParam->wdiUpdateChanParams;
5902 WDI_UpdateChannelReqinfoType *pChanInfoType =
5903 pwdiUpdateChanReqType->pchanParam;
5904 tSirUpdateChanList *pChanList =
5905 (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
5906
5907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5908 "<------ %s " ,__func__);
5909 if(NULL == pWdaParams)
5910 {
5911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5912 "%s: pWdaParams received NULL", __func__);
5913 VOS_ASSERT(0);
5914 return;
5915 }
5916
5917 /*
5918 * currently there is no response message is expected between PE and
5919 * WDA, Failure return from WDI is a ASSERT condition
5920 */
5921 vos_mem_free(pChanInfoType);
5922 vos_mem_free(pChanList);
5923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5924 vos_mem_free(pWdaParams);
5925
5926 return;
5927}
5928
5929/*
5930 * FUNCTION: WDA_ProcessUpdateChannelList
5931 * Request to WDI to Update the ChannelList params.
5932 */
5933VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
5934 tSirUpdateChanList *pChanList)
5935{
5936 WDI_Status status = WDI_STATUS_SUCCESS;
5937 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
5938 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
5939 WDI_UpdateChannelReqinfoType *pChanInfoType;
5940 tWDA_ReqParams *pWdaParams;
5941 wpt_uint8 i;
5942
5943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5944 "------> %s " ,__func__);
5945 if(NULL == pChanList)
5946 {
5947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5948 "%s: NULL pChanList", __func__);
5949 VOS_ASSERT(0);
5950 return VOS_STATUS_E_INVAL;
5951 }
5952
5953 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
5954 {
5955 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5956 "Update channel list capability Not Supported");
5957 vos_mem_free(pChanList);
5958 return VOS_STATUS_E_INVAL;
5959 }
5960
5961 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
5962 sizeof(WDI_UpdateChReqParamsType));
5963 if(NULL == pwdiUpdateChReqParam)
5964 {
5965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5966 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
5967 __func__);
5968 VOS_ASSERT(0);
5969 vos_mem_free(pChanList);
5970 return VOS_STATUS_E_NOMEM;
5971 }
5972 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
5973 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
5974 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
5975 pChanList->numChan);
5976 if(NULL == pChanInfoType)
5977 {
5978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5979 "%s: VOS MEM Alloc Failure", __func__);
5980 VOS_ASSERT(0);
5981 vos_mem_free(pChanList);
5982 vos_mem_free(pwdiUpdateChReqParam);
5983 return VOS_STATUS_E_NOMEM;
5984 }
5985 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
5986 * pChanList->numChan);
5987 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
5988
5989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
5990 if(NULL == pWdaParams)
5991 {
5992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5993 "%s: VOS MEM Alloc Failure", __func__);
5994 VOS_ASSERT(0);
5995 vos_mem_free(pChanList);
5996 vos_mem_free(pChanInfoType);
5997 vos_mem_free(pwdiUpdateChReqParam);
5998 return VOS_STATUS_E_NOMEM;
5999 }
6000 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6001
6002 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6003 {
6004 pChanInfoType->mhz =
6005 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6006
6007 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6008 pChanInfoType->band_center_freq2 = 0;
6009
6010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6011 "chan[%d] = %u", i, pChanInfoType->mhz);
6012 if (pChanList->chanParam[i].dfsSet)
6013 {
6014 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6016 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6017 pChanList->chanParam[i].dfsSet);
6018 }
6019
6020 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6021 {
6022 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6023 }
6024 else
6025 {
6026 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6027 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6028 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6029 }
6030
6031 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6032 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6033
6034 pChanInfoType++;
6035 }
6036
6037 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6038 pWdaParams->pWdaContext = pWDA;
6039 pWdaParams->wdaMsgParam = (void *)pChanList;
6040 /* store Params pass it to WDI */
6041 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6042 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6043 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6044 if(IS_WDI_STATUS_FAILURE(status))
6045 {
6046 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6047 "Failure in Update Channel REQ Params WDI API, free all the memory");
6048 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6049 vos_mem_free(pwdiUpdateChReqParam);
6050 vos_mem_free(pWdaParams->wdaMsgParam);
6051 vos_mem_free(pWdaParams);
6052 }
6053 return CONVERT_WDI2VOS_STATUS(status);
6054}
6055
Jeff Johnson295189b2012-06-20 16:38:30 -07006056/*
6057 * FUNCTION: WDA_AddTSReqCallback
6058 * send ADD TS RSP back to PE
6059 */
6060void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6061{
6062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6063 tWDA_CbContext *pWDA;
6064 tAddTsParams *pAddTsReqParams;
6065
6066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006067 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 if(NULL == pWdaParams)
6069 {
6070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006071 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 VOS_ASSERT(0) ;
6073 return ;
6074 }
6075 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6076 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6078 vos_mem_free(pWdaParams);
6079
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006080 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006081 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 return ;
6083}
6084
Jeff Johnson295189b2012-06-20 16:38:30 -07006085/*
6086 * FUNCTION: WDA_ProcessAddTSReq
6087 * Request to WDI to Update the ADD TS REQ params.
6088 */
6089VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6090 tAddTsParams *pAddTsReqParams)
6091{
6092 WDI_Status status = WDI_STATUS_SUCCESS ;
6093 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6094 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6095 sizeof(WDI_AddTSReqParamsType)) ;
6096 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 if(NULL == wdiAddTSReqParam)
6100 {
6101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 VOS_ASSERT(0);
6104 return VOS_STATUS_E_NOMEM;
6105 }
6106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6107 if(NULL == pWdaParams)
6108 {
6109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 VOS_ASSERT(0);
6112 vos_mem_free(wdiAddTSReqParam);
6113 return VOS_STATUS_E_NOMEM;
6114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6116 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 //TS IE
6118 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6119 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6120 pAddTsReqParams->tspec.length;
6121
6122 //TS IE : TS INFO : TRAFFIC
6123 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6124 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6125 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6126 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6127 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6128 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6129 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6130 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6131 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6132 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6133 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6134 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6135 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6136 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6137 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6138 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6139
6140 //TS IE : TS INFO : SCHEDULE
6141 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6142 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6143 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6144 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 //TS IE
6146 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6147 pAddTsReqParams->tspec.nomMsduSz;
6148 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6149 pAddTsReqParams->tspec.maxMsduSz;
6150 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6151 pAddTsReqParams->tspec.minSvcInterval;
6152 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6153 pAddTsReqParams->tspec.maxSvcInterval;
6154 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6155 pAddTsReqParams->tspec.inactInterval;
6156 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6157 pAddTsReqParams->tspec.suspendInterval;
6158 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6159 pAddTsReqParams->tspec.svcStartTime;
6160 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6161 pAddTsReqParams->tspec.minDataRate;
6162 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6163 pAddTsReqParams->tspec.meanDataRate;
6164 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6165 pAddTsReqParams->tspec.peakDataRate;
6166 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6167 pAddTsReqParams->tspec.maxBurstSz;
6168 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6169 pAddTsReqParams->tspec.delayBound;
6170 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6171 pAddTsReqParams->tspec.minPhyRate;
6172 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6173 pAddTsReqParams->tspec.surplusBw;
6174 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6175 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006176 /* TODO: tAddTsParams doesn't have the following fields */
6177#if 0
6178 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6179 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6180 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6181 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6182#endif
6183 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6184
6185 pWdaParams->pWdaContext = pWDA;
6186 /* Store ADD TS pointer, as this will be used for response */
6187 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 /* store Params pass it to WDI */
6189 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006190 status = WDI_AddTSReq(wdiAddTSReqParam,
6191 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006192 if(IS_WDI_STATUS_FAILURE(status))
6193 {
6194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6195 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6197 vos_mem_free(pWdaParams);
6198 pAddTsReqParams->status = eSIR_FAILURE ;
6199 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006201 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006202}
6203
Jeff Johnson295189b2012-06-20 16:38:30 -07006204/*
6205 * FUNCTION: WDA_DelTSReqCallback
6206 * send DEL TS RSP back to PE
6207 */
6208void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6209{
6210 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006212 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6214 vos_mem_free(pWdaParams->wdaMsgParam) ;
6215 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006216 /*
6217 * No respone required for WDA_DEL_TS_REQ so just free the request
6218 * param here
6219 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006220 return ;
6221}
6222
Jeff Johnson295189b2012-06-20 16:38:30 -07006223/*
6224 * FUNCTION: WDA_ProcessDelTSReq
6225 * Request to WDI to Update the DELTS REQ params.
6226 */
6227VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6228 tDelTsParams *pDelTSReqParams)
6229{
6230 WDI_Status status = WDI_STATUS_SUCCESS ;
6231 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6232 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6233 sizeof(WDI_DelTSReqParamsType)) ;
6234 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006236 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 if(NULL == wdiDelTSReqParam)
6238 {
6239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006240 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 VOS_ASSERT(0);
6242 return VOS_STATUS_E_NOMEM;
6243 }
6244 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6245 if(NULL == pWdaParams)
6246 {
6247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006249 VOS_ASSERT(0);
6250 vos_mem_free(wdiDelTSReqParam);
6251 return VOS_STATUS_E_NOMEM;
6252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6254 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6255 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6256 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6257 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 pWdaParams->pWdaContext = pWDA;
6259 /* Store DEL TS pointer, as this will be used for response */
6260 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 /* store Params pass it to WDI */
6262 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006263 status = WDI_DelTSReq(wdiDelTSReqParam,
6264 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006265 if(IS_WDI_STATUS_FAILURE(status))
6266 {
6267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6268 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6270 vos_mem_free(pWdaParams->wdaMsgParam);
6271 vos_mem_free(pWdaParams);
6272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006274}
Jeff Johnson295189b2012-06-20 16:38:30 -07006275/*
6276 * FUNCTION: WDA_UpdateBeaconParamsCallback
6277 * Free the memory. No need to send any response to PE in this case
6278 */
6279void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6280{
6281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006283 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 if(NULL == pWdaParams)
6285 {
6286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006287 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006288 VOS_ASSERT(0) ;
6289 return ;
6290 }
6291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6292 vos_mem_free(pWdaParams->wdaMsgParam) ;
6293 vos_mem_free(pWdaParams);
6294 /*
6295 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6296 * param here
6297 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 return ;
6299}
Jeff Johnson295189b2012-06-20 16:38:30 -07006300/*
6301 * FUNCTION: WDA_ProcessUpdateBeaconParams
6302 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6303 */
6304VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6305 tUpdateBeaconParams *pUpdateBeaconParams)
6306{
6307 WDI_Status status = WDI_STATUS_SUCCESS ;
6308 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6309 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6310 sizeof(WDI_UpdateBeaconParamsType)) ;
6311 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006313 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 if(NULL == wdiUpdateBeaconParams)
6315 {
6316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 VOS_ASSERT(0);
6319 return VOS_STATUS_E_NOMEM;
6320 }
6321 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6322 if(NULL == pWdaParams)
6323 {
6324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006325 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 VOS_ASSERT(0);
6327 vos_mem_free(wdiUpdateBeaconParams);
6328 return VOS_STATUS_E_NOMEM;
6329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6331 pUpdateBeaconParams->bssIdx;
6332 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6333 pUpdateBeaconParams->fShortPreamble;
6334 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6335 pUpdateBeaconParams->fShortSlotTime;
6336 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6337 pUpdateBeaconParams->beaconInterval;
6338 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6339 pUpdateBeaconParams->llaCoexist;
6340 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6341 pUpdateBeaconParams->llbCoexist;
6342 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6343 pUpdateBeaconParams->llgCoexist;
6344 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6345 pUpdateBeaconParams->ht20MhzCoexist;
6346 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6347 pUpdateBeaconParams->llnNonGFCoexist;
6348 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6349 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6350 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6351 pUpdateBeaconParams->fRIFSMode;
6352 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6353 pUpdateBeaconParams->paramChangeBitmap;
6354 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6355
6356 pWdaParams->pWdaContext = pWDA;
6357 /* Store UpdateBeacon Req pointer, as this will be used for response */
6358 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006359 /* store Params pass it to WDI */
6360 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6362 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6363 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 if(IS_WDI_STATUS_FAILURE(status))
6365 {
6366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6367 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6369 vos_mem_free(pWdaParams->wdaMsgParam);
6370 vos_mem_free(pWdaParams);
6371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006372 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006373}
Jeff Johnson295189b2012-06-20 16:38:30 -07006374#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006375/*
6376 * FUNCTION: WDA_TSMStatsReqCallback
6377 * send TSM Stats RSP back to PE
6378 */
6379void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6380{
6381 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6382 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006383 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6384 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006385
6386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006387 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006388 if(NULL == pWdaParams)
6389 {
6390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006391 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 VOS_ASSERT(0) ;
6393 return ;
6394 }
6395 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006396 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6397
6398 if(NULL == pGetTsmStatsReqParams)
6399 {
6400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6401 "%s: pGetTsmStatsReqParams received NULL", __func__);
6402 VOS_ASSERT(0);
6403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6404 vos_mem_free(pWdaParams);
6405 return;
6406 }
6407
6408 pTsmRspParams =
6409 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 if( NULL == pTsmRspParams )
6411 {
6412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006413 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006414 VOS_ASSERT( 0 );
6415 return ;
6416 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006417 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6418 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6419 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6420
Jeff Johnson295189b2012-06-20 16:38:30 -07006421 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6422 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6423 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6424 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6425 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6426 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6427 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6428 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6429 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6430 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006431
6432 /* Assign get tsm stats req req (backup) in to the response */
6433 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6434
6435 /* free WDI command buffer */
6436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6437 vos_mem_free(pWdaParams);
6438
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 return ;
6441}
6442
6443
Jeff Johnson295189b2012-06-20 16:38:30 -07006444/*
6445 * FUNCTION: WDA_ProcessTsmStatsReq
6446 * Request to WDI to get the TSM Stats params.
6447 */
6448VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006449 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006450{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006451 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006453 tWDA_ReqParams *pWdaParams = NULL;
6454 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6455
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006457 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006458 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6459 sizeof(WDI_TSMStatsReqParamsType));
6460 if(NULL == wdiTSMReqParam)
6461 {
6462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006463 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 VOS_ASSERT(0);
6465 return VOS_STATUS_E_NOMEM;
6466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6468 if(NULL == pWdaParams)
6469 {
6470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006472 VOS_ASSERT(0);
6473 vos_mem_free(wdiTSMReqParam);
6474 return VOS_STATUS_E_NOMEM;
6475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6477 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6478 pTsmStats->bssId,
6479 sizeof(wpt_macAddr));
6480 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6481
6482 pWdaParams->pWdaContext = pWDA;
6483 /* Store TSM Stats pointer, as this will be used for response */
6484 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006485 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 status = WDI_TSMStatsReq(wdiTSMReqParam,
6487 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 if(IS_WDI_STATUS_FAILURE(status))
6489 {
6490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6491 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006492 vos_mem_free(pWdaParams);
6493
6494 pGetTsmStatsRspParams =
6495 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6496 if(NULL == pGetTsmStatsRspParams)
6497 {
6498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6499 "%s: VOS MEM Alloc Failure", __func__);
6500 VOS_ASSERT(0);
6501 vos_mem_free(pTsmStats);
6502 return VOS_STATUS_E_NOMEM;
6503 }
6504 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6505 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6506 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6507
6508 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006510 return CONVERT_WDI2VOS_STATUS(status) ;
6511}
6512#endif
6513/*
6514 * FUNCTION: WDA_SendBeaconParamsCallback
6515 * No need to send any response to PE in this case
6516 */
6517void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6518{
6519
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006521 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006522 return ;
6523}
Jeff Johnson295189b2012-06-20 16:38:30 -07006524/*
6525 * FUNCTION: WDA_ProcessSendBeacon
6526 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6527 * start beacon trasmission
6528 */
6529VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6530 tSendbeaconParams *pSendbeaconParams)
6531{
6532 WDI_Status status = WDI_STATUS_SUCCESS ;
6533 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006535 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006536 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6537 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6538 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6539 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006540 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6541 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306542 /* p2pIeOffset should be atleast greater than timIeOffset */
6543 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6544 (pSendbeaconParams->p2pIeOffset <
6545 pSendbeaconParams->timIeOffset))
6546 {
6547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6548 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6549 VOS_ASSERT( 0 );
6550 return WDI_STATUS_E_FAILURE;
6551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6553 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006554 /* Copy the beacon template to local buffer */
6555 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6556 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6557 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6558
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6560 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006561 if(IS_WDI_STATUS_FAILURE(status))
6562 {
6563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6564 "Failure in SEND BEACON REQ Params WDI API" );
6565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 vos_mem_free(pSendbeaconParams);
6567 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006568}
Jeff Johnson295189b2012-06-20 16:38:30 -07006569/*
6570 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6571 * No need to send any response to PE in this case
6572 */
6573void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6574{
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006576 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006577 return ;
6578}
6579
Jeff Johnson295189b2012-06-20 16:38:30 -07006580/*
6581 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6582 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6583 * send probe response
6584 */
6585VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6586 tSendProbeRespParams *pSendProbeRspParams)
6587{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006588 WDI_Status status = WDI_STATUS_SUCCESS;
6589 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6590 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006592 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006593
6594 if (!wdiSendProbeRspParam)
6595 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6596
Jeff Johnson295189b2012-06-20 16:38:30 -07006597 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006598 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006599 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006600 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006601 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 /* Copy the Probe Response template to local buffer */
6603 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006604 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006605 pSendProbeRspParams->pProbeRespTemplate,
6606 pSendProbeRspParams->probeRespTemplateLen);
6607 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006608 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6610 WDI_PROBE_REQ_BITMAP_IE_LEN);
6611
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006612 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006613
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006614 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006615 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 if(IS_WDI_STATUS_FAILURE(status))
6617 {
6618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6619 "Failure in SEND Probe RSP Params WDI API" );
6620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006622 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006624}
Jeff Johnson295189b2012-06-20 16:38:30 -07006625#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6626/*
6627 * FUNCTION: WDA_SetMaxTxPowerCallBack
6628 * send the response to PE with power value received from WDI
6629 */
6630void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6631 void* pUserData)
6632{
6633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6634 tWDA_CbContext *pWDA = NULL;
6635 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6636
6637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006638 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006639 if(NULL == pWdaParams)
6640 {
6641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006642 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006643 VOS_ASSERT(0) ;
6644 return ;
6645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006646 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6647 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006648 if( NULL == pMaxTxPowerParams )
6649 {
6650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006651 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006652 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6654 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006655 return ;
6656 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006657
Jeff Johnson295189b2012-06-20 16:38:30 -07006658
6659 /*need to free memory for the pointers used in the
6660 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6662 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006663 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006664
Jeff Johnson295189b2012-06-20 16:38:30 -07006665
6666 /* send response to UMAC*/
6667 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6668
6669 return;
6670}
Jeff Johnson295189b2012-06-20 16:38:30 -07006671/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006672 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006673 * Request to WDI to send set Max Tx Power Request
6674 */
6675 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6676 tMaxTxPowerParams *MaxTxPowerParams)
6677{
6678 WDI_Status status = WDI_STATUS_SUCCESS;
6679 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6680 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006681
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006683 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006684
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6686 sizeof(WDI_SetMaxTxPowerParamsType));
6687 if(NULL == wdiSetMaxTxPowerParams)
6688 {
6689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006690 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 VOS_ASSERT(0);
6692 return VOS_STATUS_E_NOMEM;
6693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006694 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6695 if(NULL == pWdaParams)
6696 {
6697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006698 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 vos_mem_free(wdiSetMaxTxPowerParams);
6700 VOS_ASSERT(0);
6701 return VOS_STATUS_E_NOMEM;
6702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 /* Copy.Max.Tx.Power Params to WDI structure */
6704 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6705 MaxTxPowerParams->bssId,
6706 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6708 MaxTxPowerParams->selfStaMacAddr,
6709 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6711 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006713 pWdaParams->pWdaContext = pWDA;
6714 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 /* store Params pass it to WDI */
6716 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6718 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 if(IS_WDI_STATUS_FAILURE(status))
6720 {
6721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6722 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6724 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006725 /* send response to UMAC*/
6726 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 }
6728 return CONVERT_WDI2VOS_STATUS(status);
6729
6730}
Jeff Johnson295189b2012-06-20 16:38:30 -07006731#endif
schang86c22c42013-03-13 18:41:24 -07006732
6733/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006734 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6735 * send the response to PE with power value received from WDI
6736 */
6737void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6738 *pwdiSetMaxTxPowerPerBandRsp,
6739 void* pUserData)
6740{
6741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6742 tWDA_CbContext *pWDA = NULL;
6743 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6744
6745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6746 "<------ %s ", __func__);
6747 if (NULL == pWdaParams)
6748 {
6749 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6750 "%s: pWdaParams received NULL", __func__);
6751 VOS_ASSERT(0);
6752 return ;
6753 }
6754 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6755 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6756 if ( NULL == pMxTxPwrPerBandParams )
6757 {
6758 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6759 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6760 VOS_ASSERT(0);
6761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6762 vos_mem_free(pWdaParams);
6763 return;
6764 }
6765
6766 /*need to free memory for the pointers used in the
6767 WDA Process.Set Max Tx Power Req function*/
6768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6769 vos_mem_free(pWdaParams);
6770 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6771
6772 /* send response to UMAC*/
6773 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6774 pMxTxPwrPerBandParams, 0);
6775
6776 return;
6777}
6778
6779/*
6780 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6781 * Request to WDI to send set Max Tx Power Per band Request
6782 */
6783 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6784 tMaxTxPowerPerBandParams
6785 *MaxTxPowerPerBandParams)
6786{
6787 WDI_Status status = WDI_STATUS_SUCCESS;
6788 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6789 tWDA_ReqParams *pWdaParams = NULL;
6790
6791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6792 "------> %s ", __func__);
6793
6794 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6795 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6796
6797 if (NULL == wdiSetMxTxPwrPerBandParams)
6798 {
6799 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6800 "%s: VOS MEM Alloc Failure", __func__);
6801 VOS_ASSERT(0);
6802 return VOS_STATUS_E_NOMEM;
6803 }
6804 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6805 if (NULL == pWdaParams)
6806 {
6807 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6808 "%s: VOS MEM Alloc Failure", __func__);
6809 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6810 VOS_ASSERT(0);
6811 return VOS_STATUS_E_NOMEM;
6812 }
6813 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6814 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6815 MaxTxPowerPerBandParams->bandInfo;
6816 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6817 MaxTxPowerPerBandParams->power;
6818 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6819 pWdaParams->pWdaContext = pWDA;
6820 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6821 /* store Params pass it to WDI */
6822 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6823 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6824 WDA_SetMaxTxPowerPerBandCallBack,
6825 pWdaParams);
6826 if (IS_WDI_STATUS_FAILURE(status))
6827 {
6828 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6829 "Failure in SET MAX TX Power REQ Params WDI API,"
6830 " free all the memory");
6831 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6832 vos_mem_free(pWdaParams);
6833 /* send response to UMAC*/
6834 WDA_SendMsg(pWDA,
6835 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6836 MaxTxPowerPerBandParams, 0);
6837 }
6838 return CONVERT_WDI2VOS_STATUS(status);
6839}
6840
6841/*
schang86c22c42013-03-13 18:41:24 -07006842 * FUNCTION: WDA_SetTxPowerCallBack
6843 * send the response to PE with power value received from WDI
6844 */
6845void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6846 void* pUserData)
6847{
6848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6849 tWDA_CbContext *pWDA = NULL;
6850 tSirSetTxPowerReq *pTxPowerParams = NULL;
6851
6852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6853 "<------ %s ", __func__);
6854 if(NULL == pWdaParams)
6855 {
6856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6857 "%s: pWdaParams received NULL", __func__);
6858 VOS_ASSERT(0) ;
6859 return ;
6860 }
6861 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6862 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6863 if(NULL == pTxPowerParams)
6864 {
6865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6866 "%s: pTxPowerParams received NULL " ,__func__);
6867 VOS_ASSERT(0);
6868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6869 vos_mem_free(pWdaParams);
6870 return ;
6871 }
6872
6873 /*need to free memory for the pointers used in the
6874 WDA Process.Set Max Tx Power Req function*/
6875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6876 vos_mem_free(pWdaParams);
6877
6878 /* send response to UMAC*/
6879 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6880 return;
6881}
6882
6883/*
6884 * FUNCTION: WDA_ProcessSetTxPowerReq
6885 * Request to WDI to send set Tx Power Request
6886 */
6887 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6888 tSirSetTxPowerReq *txPowerParams)
6889{
6890 WDI_Status status = WDI_STATUS_SUCCESS;
6891 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6892 tWDA_ReqParams *pWdaParams = NULL;
6893
6894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6895 "------> %s ", __func__);
6896
6897 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6898 sizeof(WDI_SetTxPowerParamsType));
6899 if(NULL == wdiSetTxPowerParams)
6900 {
6901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6902 "%s: VOS MEM Alloc Failure", __func__);
6903 VOS_ASSERT(0);
6904 return VOS_STATUS_E_NOMEM;
6905 }
6906 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6907 if(NULL == pWdaParams)
6908 {
6909 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6910 "%s: VOS MEM Alloc Failure", __func__);
6911 vos_mem_free(wdiSetTxPowerParams);
6912 VOS_ASSERT(0);
6913 return VOS_STATUS_E_NOMEM;
6914 }
6915 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6916 txPowerParams->bssIdx;
6917 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6918 txPowerParams->mwPower;
6919 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6920 pWdaParams->pWdaContext = pWDA;
6921 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6922 /* store Params pass it to WDI */
6923 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6924 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6925 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6926 if(IS_WDI_STATUS_FAILURE(status))
6927 {
6928 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6929 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6931 vos_mem_free(pWdaParams);
6932 /* send response to UMAC*/
6933 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6934 }
6935 return CONVERT_WDI2VOS_STATUS(status);
6936}
6937
Jeff Johnson295189b2012-06-20 16:38:30 -07006938/*
6939 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6940 * Free the memory. No need to send any response to PE in this case
6941 */
6942void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6943{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006944 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6945
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006947 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006948
6949 if(NULL == pWdaParams)
6950 {
6951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006952 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006953 VOS_ASSERT(0) ;
6954 return ;
6955 }
6956
6957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6958 vos_mem_free(pWdaParams->wdaMsgParam) ;
6959 vos_mem_free(pWdaParams);
6960
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 /*
6962 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6963 * so just free the request param here
6964 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 return ;
6966}
6967
Jeff Johnson295189b2012-06-20 16:38:30 -07006968/*
6969 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6970 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6971 */
6972VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6973 tP2pPsParams *pP2pPsConfigParams)
6974{
6975 WDI_Status status = WDI_STATUS_SUCCESS ;
6976 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6977 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6978 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006979 tWDA_ReqParams *pWdaParams = NULL;
6980
Jeff Johnson295189b2012-06-20 16:38:30 -07006981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006982 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 if(NULL == wdiSetP2PGONOAReqParam)
6984 {
6985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 VOS_ASSERT(0);
6988 return VOS_STATUS_E_NOMEM;
6989 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006990
6991 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6992 if(NULL == pWdaParams)
6993 {
6994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006995 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006996 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006997 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006998 VOS_ASSERT(0);
6999 return VOS_STATUS_E_NOMEM;
7000 }
7001
Jeff Johnson295189b2012-06-20 16:38:30 -07007002 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7003 pP2pPsConfigParams->opp_ps;
7004 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7005 pP2pPsConfigParams->ctWindow;
7006 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7007 pP2pPsConfigParams->count;
7008 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7009 pP2pPsConfigParams->duration;
7010 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7011 pP2pPsConfigParams->interval;
7012 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7013 pP2pPsConfigParams->single_noa_duration;
7014 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7015 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007016
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7018 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007019 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7020
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007022 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7023 pWdaParams->pWdaContext = pWDA;
7024
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007026 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7027
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 if(IS_WDI_STATUS_FAILURE(status))
7029 {
7030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7031 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7033 vos_mem_free(pWdaParams->wdaMsgParam);
7034 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007036 return CONVERT_WDI2VOS_STATUS(status);
7037
Jeff Johnson295189b2012-06-20 16:38:30 -07007038}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307039
7040#ifdef FEATURE_WLAN_TDLS
7041/*
7042 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7043 * Free the memory. No need to send any response to PE in this case
7044 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307045void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7046 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307047{
7048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7049 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307050 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307051
7052
7053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7054 "<------ %s " ,__func__);
7055 if(NULL == pWdaParams)
7056 {
7057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7058 "%s: pWdaParams received NULL", __func__);
7059 VOS_ASSERT(0) ;
7060 return ;
7061 }
7062 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7063
7064 if(NULL == pWdaParams)
7065 {
7066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7067 "%s: pWdaParams received NULL", __func__);
7068 VOS_ASSERT(0) ;
7069 return ;
7070 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307071 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7072 if( NULL == pTdlsLinkEstablishParams )
7073 {
7074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7075 "%s: pTdlsLinkEstablishParams "
7076 "received NULL " ,__func__);
7077 VOS_ASSERT(0);
7078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7079 vos_mem_free(pWdaParams);
7080 return ;
7081 }
7082 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7083 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307085 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307086 /* send response to UMAC*/
7087 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7088
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307089 return ;
7090}
7091
7092VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7093 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7094{
7095 WDI_Status status = WDI_STATUS_SUCCESS ;
7096 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7097 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7098 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7099 tWDA_ReqParams *pWdaParams = NULL;
7100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7101 "------> %s " ,__func__);
7102 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7103 {
7104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7105 "%s: VOS MEM Alloc Failure", __func__);
7106 VOS_ASSERT(0);
7107 return VOS_STATUS_E_NOMEM;
7108 }
7109 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7110 if(NULL == pWdaParams)
7111 {
7112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7113 "%s: VOS MEM Alloc Failure", __func__);
7114 vos_mem_free(pTdlsLinkEstablishParams);
7115 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7116 VOS_ASSERT(0);
7117 return VOS_STATUS_E_NOMEM;
7118 }
7119 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307120 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307121 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307122 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307123 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307124 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307125 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307126 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307127 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307128 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307129 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7130 pTdlsLinkEstablishParams->isOffChannelSupported;
7131
7132 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7133 pTdlsLinkEstablishParams->validChannels,
7134 pTdlsLinkEstablishParams->validChannelsLen);
7135
7136 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7137 pTdlsLinkEstablishParams->validChannelsLen;
7138
7139 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7140 pTdlsLinkEstablishParams->validOperClasses,
7141 pTdlsLinkEstablishParams->validOperClassesLen);
7142 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7143 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307144
7145 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7146 /* Store msg pointer from PE, as this will be used for response */
7147 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7148 /* store Params pass it to WDI */
7149 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7150 pWdaParams->pWdaContext = pWDA;
7151
7152 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7153 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7154 WDA_SetTDLSLinkEstablishReqParamsCallback,
7155 pWdaParams);
7156 if(IS_WDI_STATUS_FAILURE(status))
7157 {
7158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7159 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7161 vos_mem_free(pWdaParams->wdaMsgParam);
7162 vos_mem_free(pWdaParams);
7163 }
7164 return CONVERT_WDI2VOS_STATUS(status);
7165}
7166#endif
7167
7168
Jeff Johnson295189b2012-06-20 16:38:30 -07007169#ifdef WLAN_FEATURE_VOWIFI_11R
7170/*
7171 * FUNCTION: WDA_AggrAddTSReqCallback
7172 * send ADD AGGREGATED TS RSP back to PE
7173 */
7174void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7175{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007176 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7177 tWDA_CbContext *pWDA;
7178 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007181 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007182 if(NULL == pWdaParams)
7183 {
7184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007185 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007186 VOS_ASSERT(0) ;
7187 return ;
7188 }
7189
7190 pWDA = pWdaParams->pWdaContext;
7191 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007192
7193 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7194 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007195 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007198
7199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7200 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 return ;
7202}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007203/*
7204 * FUNCTION: WDA_ProcessAddTSReq
7205 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7206 */
7207VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7208 tAggrAddTsParams *pAggrAddTsReqParams)
7209{
7210 WDI_Status status = WDI_STATUS_SUCCESS ;
7211 int i;
7212 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007213 tWDA_ReqParams *pWdaParams = NULL;
7214
7215
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007217 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007218 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7219 sizeof(WDI_AggrAddTSReqParamsType)) ;
7220 if(NULL == wdiAggrAddTSReqParam)
7221 {
7222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 VOS_ASSERT(0);
7225 return VOS_STATUS_E_NOMEM;
7226 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007227
7228
7229 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7230 if(NULL == pWdaParams)
7231 {
7232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007233 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007234 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007235 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007236 VOS_ASSERT(0);
7237 return VOS_STATUS_E_NOMEM;
7238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007239 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7240 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7241 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007242 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7243 {
7244 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7245 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7246 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007247 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7248 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7249 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7250 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7251 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7252 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7253 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7254 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7255 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7256 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7257 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7258 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7259 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7260 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7261 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7262 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7264 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7266 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7267 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7268 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7269 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7270 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7271 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7272 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7273 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7274 pAggrAddTsReqParams->tspec[i].inactInterval;
7275 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7276 pAggrAddTsReqParams->tspec[i].suspendInterval;
7277 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7278 pAggrAddTsReqParams->tspec[i].svcStartTime;
7279 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7280 pAggrAddTsReqParams->tspec[i].minDataRate;
7281 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7282 pAggrAddTsReqParams->tspec[i].meanDataRate;
7283 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7284 pAggrAddTsReqParams->tspec[i].peakDataRate;
7285 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7286 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7287 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7288 pAggrAddTsReqParams->tspec[i].delayBound;
7289 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7290 pAggrAddTsReqParams->tspec[i].minPhyRate;
7291 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7292 pAggrAddTsReqParams->tspec[i].surplusBw;
7293 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7294 pAggrAddTsReqParams->tspec[i].mediumTime;
7295 }
7296
7297 /* TODO: tAggrAddTsParams doesn't have the following fields */
7298#if 0
7299 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7300 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7301 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7302 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7303#endif
7304 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7305
7306 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007307 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007308 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007309 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7310
7311 pWdaParams->pWdaContext = pWDA;
7312
Jeff Johnson295189b2012-06-20 16:38:30 -07007313 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007314 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7315
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 if(IS_WDI_STATUS_FAILURE(status))
7317 {
7318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7319 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7321 vos_mem_free(pWdaParams);
7322
7323 /* send the failure response back to PE*/
7324 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7325 {
7326 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7327 }
7328
7329 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7330 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007332 return CONVERT_WDI2VOS_STATUS(status) ;
7333}
7334#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007335/*
7336 * FUNCTION: WDA_EnterImpsReqCallback
7337 * send Enter IMPS RSP back to PE
7338 */
7339void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
7340{
7341 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007343 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007344 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 return ;
7346}
Jeff Johnson295189b2012-06-20 16:38:30 -07007347/*
7348 * FUNCTION: WDA_ProcessEnterImpsReq
7349 * Request to WDI to Enter IMPS power state.
7350 */
7351VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7352{
7353 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007355 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007356 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007357 if(IS_WDI_STATUS_FAILURE(status))
7358 {
7359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7360 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007361 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 return CONVERT_WDI2VOS_STATUS(status) ;
7364}
Jeff Johnson295189b2012-06-20 16:38:30 -07007365/*
7366 * FUNCTION: WDA_ExitImpsReqCallback
7367 * send Exit IMPS RSP back to PE
7368 */
7369void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7370{
7371 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007373 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007374 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007375 return ;
7376}
Jeff Johnson295189b2012-06-20 16:38:30 -07007377/*
7378 * FUNCTION: WDA_ProcessExitImpsReq
7379 * Request to WDI to Exit IMPS power state.
7380 */
7381VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7382{
7383 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007385 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007386 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 if(IS_WDI_STATUS_FAILURE(status))
7388 {
7389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7390 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007391 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007392 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007393 return CONVERT_WDI2VOS_STATUS(status) ;
7394}
Jeff Johnson295189b2012-06-20 16:38:30 -07007395/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007396 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007397 * send Enter BMPS RSP back to PE
7398 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007399void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007400{
7401 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7402 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007403 tEnterBmpsParams *pEnterBmpsRspParams;
7404
Jeff Johnson295189b2012-06-20 16:38:30 -07007405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007406 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 if(NULL == pWdaParams)
7408 {
7409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007410 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 VOS_ASSERT(0) ;
7412 return ;
7413 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007414
7415 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7416 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7417
7418 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007419 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007420
7421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007422 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007423 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7424
Jeff Johnson295189b2012-06-20 16:38:30 -07007425 return ;
7426}
Jeff Johnson295189b2012-06-20 16:38:30 -07007427/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007428 * FUNCTION: WDA_EnterBmpsReqCallback
7429 * Free memory and send Enter BMPS RSP back to PE.
7430 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7431 */
7432void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7433{
7434 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7435 tWDA_CbContext *pWDA;
7436 tEnterBmpsParams *pEnterBmpsRspParams;
7437
7438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7439 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7440
7441 if(NULL == pWdaParams)
7442 {
7443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7444 "%s: pWdaParams received NULL", __func__);
7445 VOS_ASSERT(0);
7446 return;
7447 }
7448
7449 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7450 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7451 pEnterBmpsRspParams->status = wdiStatus;
7452
7453 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7454 {
7455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7456 vos_mem_free(pWdaParams);
7457 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7458 }
7459
7460 return;
7461}
7462/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 * FUNCTION: WDA_ProcessEnterBmpsReq
7464 * Request to WDI to Enter BMPS power state.
7465 */
7466VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7467 tEnterBmpsParams *pEnterBmpsReqParams)
7468{
7469 WDI_Status status = WDI_STATUS_SUCCESS;
7470 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7471 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7475 {
7476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007477 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 VOS_ASSERT(0);
7479 return VOS_STATUS_E_FAILURE;
7480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007481 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7482 if (NULL == wdiEnterBmpsReqParams)
7483 {
7484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007486 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007487 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7488 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 return VOS_STATUS_E_NOMEM;
7490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7492 if (NULL == pWdaParams)
7493 {
7494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 VOS_ASSERT(0);
7497 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007498 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7499 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 return VOS_STATUS_E_NOMEM;
7501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7503 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7504 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7505 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 // For CCX and 11R Roaming
7507 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7508 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7509 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007510 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7511 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007512
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 /* Store param pointer as passed in by caller */
7514 /* store Params pass it to WDI */
7515 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007516 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007518 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007519 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 if (IS_WDI_STATUS_FAILURE(status))
7521 {
7522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7523 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007525 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007527 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 return CONVERT_WDI2VOS_STATUS(status);
7530}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007531
7532
7533static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7534 WDI_Status wdiStatus,
7535 tExitBmpsParams *pExitBmpsReqParams)
7536{
7537 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7538
7539 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7540}
7541
7542
Jeff Johnson295189b2012-06-20 16:38:30 -07007543/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007544 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007545 * send Exit BMPS RSP back to PE
7546 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007547void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007548{
7549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7550 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007551 tExitBmpsParams *pExitBmpsRspParams;
7552
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007554 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 if(NULL == pWdaParams)
7556 {
7557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007558 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007559 VOS_ASSERT(0) ;
7560 return ;
7561 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007562
7563 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7564 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7565
7566 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007567 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007568
Jeff Johnson295189b2012-06-20 16:38:30 -07007569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7570 vos_mem_free(pWdaParams) ;
7571
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007572 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007573 return ;
7574}
Jeff Johnson295189b2012-06-20 16:38:30 -07007575/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007576 * FUNCTION: WDA_ExitBmpsReqCallback
7577 * Free memory and send Exit BMPS RSP back to PE.
7578 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7579 */
7580void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7581{
7582 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7583 tWDA_CbContext *pWDA;
7584 tExitBmpsParams *pExitBmpsRspParams;
7585
7586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7587 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7588
7589 if(NULL == pWdaParams)
7590 {
7591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7592 "%s: pWdaParams received NULL", __func__);
7593 VOS_ASSERT(0);
7594 return;
7595 }
7596
7597 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7598 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7599 pExitBmpsRspParams->status = wdiStatus;
7600
7601 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7602 {
7603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7604 vos_mem_free(pWdaParams);
7605 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7606 }
7607
7608 return;
7609}
7610/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007611 * FUNCTION: WDA_ProcessExitBmpsReq
7612 * Request to WDI to Exit BMPS power state.
7613 */
7614VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7615 tExitBmpsParams *pExitBmpsReqParams)
7616{
7617 WDI_Status status = WDI_STATUS_SUCCESS ;
7618 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7619 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7620 sizeof(WDI_ExitBmpsReqParamsType)) ;
7621 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007623 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 if(NULL == wdiExitBmpsReqParams)
7625 {
7626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007627 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007628 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007629 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007630 return VOS_STATUS_E_NOMEM;
7631 }
7632 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7633 if(NULL == pWdaParams)
7634 {
7635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007636 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007637 VOS_ASSERT(0);
7638 vos_mem_free(wdiExitBmpsReqParams);
7639 return VOS_STATUS_E_NOMEM;
7640 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007642
7643 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7644
Yue Ma7f44bbe2013-04-12 11:47:39 -07007645 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7646 wdiExitBmpsReqParams->pUserData = pWdaParams;
7647
Jeff Johnson295189b2012-06-20 16:38:30 -07007648 /* Store param pointer as passed in by caller */
7649 /* store Params pass it to WDI */
7650 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7651 pWdaParams->pWdaContext = pWDA;
7652 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007654 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 if(IS_WDI_STATUS_FAILURE(status))
7656 {
7657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7658 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7660 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007661 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007663 return CONVERT_WDI2VOS_STATUS(status) ;
7664}
Jeff Johnson295189b2012-06-20 16:38:30 -07007665/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007666 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 * send Enter UAPSD RSP back to PE
7668 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007669void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007670{
7671 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7672 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007673 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007675 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007676 if(NULL == pWdaParams)
7677 {
7678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007679 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007680 VOS_ASSERT(0) ;
7681 return ;
7682 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007683
7684 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7685 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7686
7687 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007688 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007689
Jeff Johnson295189b2012-06-20 16:38:30 -07007690 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7691 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007692 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 return ;
7694}
Jeff Johnson295189b2012-06-20 16:38:30 -07007695/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007696 * FUNCTION: WDA_EnterUapsdReqCallback
7697 * Free memory and send Enter UAPSD RSP back to PE.
7698 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7699 */
7700void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7701{
7702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7703 tWDA_CbContext *pWDA;
7704 tUapsdParams *pEnterUapsdRsqParams;
7705
7706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7707 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7708
7709 if(NULL == pWdaParams)
7710 {
7711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7712 "%s: pWdaParams received NULL", __func__);
7713 VOS_ASSERT(0);
7714 return;
7715 }
7716
7717 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7718 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7719 pEnterUapsdRsqParams->status = wdiStatus;
7720
7721 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7722 {
7723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7724 vos_mem_free(pWdaParams);
7725 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7726 }
7727
7728 return;
7729}
7730/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 * FUNCTION: WDA_ProcessEnterUapsdReq
7732 * Request to WDI to Enter UAPSD power state.
7733 */
7734VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7735 tUapsdParams *pEnterUapsdReqParams)
7736{
7737 WDI_Status status = WDI_STATUS_SUCCESS ;
7738 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7739 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7740 sizeof(WDI_EnterUapsdReqParamsType)) ;
7741 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007743 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007744 if(NULL == wdiEnterUapsdReqParams)
7745 {
7746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007747 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007748 VOS_ASSERT(0);
7749 return VOS_STATUS_E_NOMEM;
7750 }
7751 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7752 if(NULL == pWdaParams)
7753 {
7754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007755 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007756 VOS_ASSERT(0);
7757 vos_mem_free(wdiEnterUapsdReqParams);
7758 return VOS_STATUS_E_NOMEM;
7759 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007760 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7761 pEnterUapsdReqParams->beDeliveryEnabled;
7762 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7763 pEnterUapsdReqParams->beTriggerEnabled;
7764 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7765 pEnterUapsdReqParams->bkDeliveryEnabled;
7766 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7767 pEnterUapsdReqParams->bkTriggerEnabled;
7768 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7769 pEnterUapsdReqParams->viDeliveryEnabled;
7770 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7771 pEnterUapsdReqParams->viTriggerEnabled;
7772 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7773 pEnterUapsdReqParams->voDeliveryEnabled;
7774 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7775 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007776 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007777
Yue Ma7f44bbe2013-04-12 11:47:39 -07007778 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7779 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007780
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 /* Store param pointer as passed in by caller */
7782 /* store Params pass it to WDI */
7783 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7784 pWdaParams->pWdaContext = pWDA;
7785 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007787 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007788 if(IS_WDI_STATUS_FAILURE(status))
7789 {
7790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7791 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7792 vos_mem_free(pWdaParams->wdaMsgParam) ;
7793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7794 vos_mem_free(pWdaParams) ;
7795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 return CONVERT_WDI2VOS_STATUS(status) ;
7797}
Jeff Johnson295189b2012-06-20 16:38:30 -07007798/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007799 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 * send Exit UAPSD RSP back to PE
7801 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007802void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007803{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007804
7805 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7806 tWDA_CbContext *pWDA;
7807 tExitUapsdParams *pExitUapsdRspParams;
7808
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007810 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007811 if(NULL == pWdaParams)
7812 {
7813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007814 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007815 VOS_ASSERT(0);
7816 return;
7817 }
7818
7819 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7820 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7821
7822 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007823 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007824
7825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7826 vos_mem_free(pWdaParams) ;
7827
7828 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007829 return ;
7830}
Jeff Johnson295189b2012-06-20 16:38:30 -07007831/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007832 * FUNCTION: WDA_ExitUapsdReqCallback
7833 * Free memory and send Exit UAPSD RSP back to PE.
7834 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7835 */
7836void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7837{
7838 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7839 tWDA_CbContext *pWDA;
7840 tExitUapsdParams *pExitUapsdRspParams;
7841
7842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7843 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7844
7845 if(NULL == pWdaParams)
7846 {
7847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7848 "%s: pWdaParams received NULL", __func__);
7849 VOS_ASSERT(0);
7850 return;
7851 }
7852
7853 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7854 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7855 pExitUapsdRspParams->status = wdiStatus;
7856
7857 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7858 {
7859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7860 vos_mem_free(pWdaParams);
7861 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7862 }
7863
7864 return;
7865}
7866/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007867 * FUNCTION: WDA_ProcessExitUapsdReq
7868 * Request to WDI to Exit UAPSD power state.
7869 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007870VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7871 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007872{
7873 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007874 tWDA_ReqParams *pWdaParams ;
7875 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7876 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7877 sizeof(WDI_ExitUapsdReqParamsType)) ;
7878
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007880 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007881
7882 if(NULL == wdiExitUapsdReqParams)
7883 {
7884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007885 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007886 VOS_ASSERT(0);
7887 return VOS_STATUS_E_NOMEM;
7888 }
7889 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7890 if(NULL == pWdaParams)
7891 {
7892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007893 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007894 VOS_ASSERT(0);
7895 vos_mem_free(wdiExitUapsdReqParams);
7896 return VOS_STATUS_E_NOMEM;
7897 }
7898
7899 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007900 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7901 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007902
7903 /* Store param pointer as passed in by caller */
7904 /* store Params pass it to WDI */
7905 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7906 pWdaParams->pWdaContext = pWDA;
7907 pWdaParams->wdaMsgParam = pExitUapsdParams;
7908
Yue Ma7f44bbe2013-04-12 11:47:39 -07007909 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007910 if(IS_WDI_STATUS_FAILURE(status))
7911 {
7912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7913 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007914 vos_mem_free(pWdaParams->wdaMsgParam) ;
7915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7916 vos_mem_free(pWdaParams) ;
7917
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 return CONVERT_WDI2VOS_STATUS(status) ;
7920}
7921
Jeff Johnson295189b2012-06-20 16:38:30 -07007922/*
7923 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7924 *
7925 */
7926void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7927{
7928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007930 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007931 if(NULL == pWdaParams)
7932 {
7933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007934 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007935 VOS_ASSERT(0) ;
7936 return ;
7937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 if( pWdaParams != NULL )
7939 {
7940 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7941 {
7942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7943 }
7944 if( pWdaParams->wdaMsgParam != NULL )
7945 {
7946 vos_mem_free(pWdaParams->wdaMsgParam) ;
7947 }
7948 vos_mem_free(pWdaParams) ;
7949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 return ;
7951}
Jeff Johnson295189b2012-06-20 16:38:30 -07007952/*
7953 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7954 * Request to WDI to set the power save params at start.
7955 */
7956VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7957 tSirPowerSaveCfg *pPowerSaveCfg)
7958{
7959 WDI_Status status = WDI_STATUS_SUCCESS ;
7960 tHalCfg *tlvStruct = NULL ;
7961 tANI_U8 *tlvStructStart = NULL ;
7962 v_PVOID_t *configParam;
7963 tANI_U32 configParamSize;
7964 tANI_U32 *configDataValue;
7965 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7966 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007968 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7970 {
7971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007972 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007974 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 return VOS_STATUS_E_FAILURE;
7976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007977 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7978 if (NULL == wdiPowerSaveCfg)
7979 {
7980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007981 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007983 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 return VOS_STATUS_E_NOMEM;
7985 }
7986 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7987 if(NULL == pWdaParams)
7988 {
7989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 VOS_ASSERT(0);
7992 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007993 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 return VOS_STATUS_E_NOMEM;
7995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7997 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 if(NULL == configParam)
7999 {
8000 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008001 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008002 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 vos_mem_free(pWdaParams);
8004 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008005 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 return VOS_STATUS_E_NOMEM;
8007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 vos_mem_set(configParam, configParamSize, 0);
8009 wdiPowerSaveCfg->pConfigBuffer = configParam;
8010 tlvStruct = (tHalCfg *)configParam;
8011 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8013 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8014 tlvStruct->length = sizeof(tANI_U32);
8015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8016 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8018 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008019 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8020 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8021 tlvStruct->length = sizeof(tANI_U32);
8022 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8023 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8025 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008026 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8027 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8028 tlvStruct->length = sizeof(tANI_U32);
8029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8030 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8032 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8034 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8035 tlvStruct->length = sizeof(tANI_U32);
8036 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8037 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8039 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008040 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8041 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8042 tlvStruct->length = sizeof(tANI_U32);
8043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8044 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8046 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008047 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8048 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8049 tlvStruct->length = sizeof(tANI_U32);
8050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8051 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008052 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8053 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008054 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8055 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8056 tlvStruct->length = sizeof(tANI_U32);
8057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8058 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8060 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8062 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8063 tlvStruct->length = sizeof(tANI_U32);
8064 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8065 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8066 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8067 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008068 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8069 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8070 tlvStruct->length = sizeof(tANI_U32);
8071 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8072 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8073 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8074 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8076 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8077 tlvStruct->length = sizeof(tANI_U32);
8078 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8079 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8081 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8083 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8084 tlvStruct->length = sizeof(tANI_U32);
8085 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8086 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8088 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008091 /* store Params pass it to WDI */
8092 pWdaParams->wdaMsgParam = configParam;
8093 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8094 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8096 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 if(IS_WDI_STATUS_FAILURE(status))
8098 {
8099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8100 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8101 vos_mem_free(pWdaParams->wdaMsgParam);
8102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8103 vos_mem_free(pWdaParams);
8104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008105 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008106 return CONVERT_WDI2VOS_STATUS(status);
8107}
Jeff Johnson295189b2012-06-20 16:38:30 -07008108/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008109 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008110 *
8111 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008112void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008113{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8115
Jeff Johnson295189b2012-06-20 16:38:30 -07008116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008117 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008118
8119 if(NULL == pWdaParams)
8120 {
8121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8122 "%s: pWdaParams received NULL", __func__);
8123 VOS_ASSERT(0);
8124 return ;
8125 }
8126
8127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 vos_mem_free(pWdaParams);
8129
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 return ;
8131}
Jeff Johnson295189b2012-06-20 16:38:30 -07008132/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008133 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8134 * Free memory.
8135 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8136 */
8137void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8138{
8139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8140
8141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8142 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8143
8144 if(NULL == pWdaParams)
8145 {
8146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8147 "%s: pWdaParams received NULL", __func__);
8148 VOS_ASSERT(0);
8149 return;
8150 }
8151
8152 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8153 {
8154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8155 vos_mem_free(pWdaParams);
8156 }
8157
8158 return;
8159}
8160/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008161 * FUNCTION: WDA_SetUapsdAcParamsReq
8162 * Request to WDI to set the UAPSD params for an ac (sta mode).
8163 */
8164VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8165 tUapsdInfo *pUapsdInfo)
8166{
8167 WDI_Status status = WDI_STATUS_SUCCESS;
8168 tWDA_CbContext *pWDA = NULL ;
8169 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8170 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8171 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8172 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008174 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 if(NULL == wdiUapsdParams)
8176 {
8177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008179 VOS_ASSERT(0);
8180 return VOS_STATUS_E_NOMEM;
8181 }
8182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8183 if(NULL == pWdaParams)
8184 {
8185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008187 VOS_ASSERT(0);
8188 vos_mem_free(wdiUapsdParams);
8189 return VOS_STATUS_E_NOMEM;
8190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008191 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8192 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8193 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8194 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8195 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8196 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008197 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8198 wdiUapsdParams->pUserData = pWdaParams;
8199
Jeff Johnson295189b2012-06-20 16:38:30 -07008200 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 pWdaParams->pWdaContext = pWDA;
8202 /* Store param pointer as passed in by caller */
8203 pWdaParams->wdaMsgParam = pUapsdInfo;
8204 /* store Params pass it to WDI */
8205 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008207 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008208 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 if(IS_WDI_STATUS_FAILURE(status))
8210 {
8211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8212 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8214 vos_mem_free(pWdaParams);
8215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008216 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8217 return VOS_STATUS_SUCCESS;
8218 else
8219 return VOS_STATUS_E_FAILURE;
8220
Jeff Johnson295189b2012-06-20 16:38:30 -07008221}
8222/*
8223 * FUNCTION: WDA_ClearUapsdAcParamsReq
8224 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8225 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8226 * and again enter the UPASD with the modified params. Hence the disable
8227 * function was kept empty.
8228 *
8229 */
8230VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8231{
8232 /* do nothing */
8233 return VOS_STATUS_SUCCESS;
8234}
Jeff Johnson295189b2012-06-20 16:38:30 -07008235/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008236 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 *
8238 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008239void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008240{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8242
Jeff Johnson295189b2012-06-20 16:38:30 -07008243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008244 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008245
8246 if(NULL == pWdaParams)
8247 {
8248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008249 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008250 VOS_ASSERT(0) ;
8251 return ;
8252 }
8253
8254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8255 vos_mem_free(pWdaParams->wdaMsgParam);
8256 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008257
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 //print a msg, nothing else to do
8259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008260 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 return ;
8262}
Jeff Johnson295189b2012-06-20 16:38:30 -07008263/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008264 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8265 * Free memory.
8266 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8267 */
8268void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8269{
8270 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8271
8272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8273 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8274
8275 if(NULL == pWdaParams)
8276 {
8277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8278 "%s: pWdaParams received NULL", __func__);
8279 VOS_ASSERT(0);
8280 return;
8281 }
8282
8283 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8284 {
8285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8286 vos_mem_free(pWdaParams->wdaMsgParam);
8287 vos_mem_free(pWdaParams);
8288 }
8289
8290 return;
8291}
8292/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008293 * FUNCTION: WDA_UpdateUapsdParamsReq
8294 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8295 */
8296VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8297 tUpdateUapsdParams* pUpdateUapsdInfo)
8298{
8299 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008300 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8302 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8303 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008304 tWDA_ReqParams *pWdaParams = NULL;
8305
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 if(NULL == wdiUpdateUapsdParams)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 VOS_ASSERT(0);
8313 return VOS_STATUS_E_NOMEM;
8314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8316 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8317 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008318 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8319 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008320
8321 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8322 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 {
8324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008325 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008327 vos_mem_free(pUpdateUapsdInfo);
8328 vos_mem_free(wdiUpdateUapsdParams);
8329 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008332 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008334 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8335 pWdaParams->pWdaContext = pWDA;
8336
Jeff Johnson43971f52012-07-17 12:26:56 -07008337 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008338 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008339 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008340
Jeff Johnson43971f52012-07-17 12:26:56 -07008341 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008342 {
8343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8344 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008345 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8347 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008348 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008350 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008351}
Jeff Johnson295189b2012-06-20 16:38:30 -07008352/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008353 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008354 *
8355 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008356void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008357{
8358 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008360 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 if(WDI_STATUS_SUCCESS != wdiStatus)
8362 {
8363 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008364 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008366 if(NULL == pWdaParams)
8367 {
8368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008369 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 VOS_ASSERT(0) ;
8371 return ;
8372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8374 vos_mem_free(pWdaParams->wdaMsgParam);
8375 vos_mem_free(pWdaParams);
8376 return ;
8377}
Jeff Johnson295189b2012-06-20 16:38:30 -07008378/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008379 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8380 * Free memory.
8381 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8382 */
8383void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8384{
8385 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8386
8387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8388 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8389
8390 if(NULL == pWdaParams)
8391 {
8392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8393 "%s: pWdaParams received NULL", __func__);
8394 VOS_ASSERT(0);
8395 return;
8396 }
8397
8398 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8399 {
8400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8401 vos_mem_free(pWdaParams->wdaMsgParam);
8402 vos_mem_free(pWdaParams);
8403 }
8404
8405 return;
8406}
8407/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8409 *
8410 */
8411VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8412 tSirWlanSetRxpFilters *pWlanSuspendParam)
8413{
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008415 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8417 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8418 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8419 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008421 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 if(NULL == wdiRxpFilterParams)
8423 {
8424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008426 VOS_ASSERT(0);
8427 vos_mem_free(pWlanSuspendParam);
8428 return VOS_STATUS_E_NOMEM;
8429 }
8430 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8431 if(NULL == pWdaParams)
8432 {
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 VOS_ASSERT(0);
8436 vos_mem_free(wdiRxpFilterParams);
8437 vos_mem_free(pWlanSuspendParam);
8438 return VOS_STATUS_E_NOMEM;
8439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008440 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8441 pWlanSuspendParam->setMcstBcstFilter;
8442 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8443 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8444
Yue Ma7f44bbe2013-04-12 11:47:39 -07008445 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8446 wdiRxpFilterParams->pUserData = pWdaParams;
8447
Jeff Johnson295189b2012-06-20 16:38:30 -07008448 pWdaParams->pWdaContext = pWDA;
8449 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8450 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008451 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008452 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008454 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008455 {
8456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8457 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008458 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8460 vos_mem_free(pWdaParams->wdaMsgParam);
8461 vos_mem_free(pWdaParams);
8462 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008463 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008464}
Jeff Johnson295189b2012-06-20 16:38:30 -07008465/*
8466 * FUNCTION: WDA_WdiIndicationCallback
8467 *
8468 */
8469void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8470 void* pUserData)
8471{
8472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008473 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008474}
Jeff Johnson295189b2012-06-20 16:38:30 -07008475/*
8476 * FUNCTION: WDA_ProcessWlanSuspendInd
8477 *
8478 */
8479VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8480 tSirWlanSuspendParam *pWlanSuspendParam)
8481{
8482 WDI_Status wdiStatus;
8483 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008485 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008486 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8487 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8488 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8489 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8492 if(WDI_STATUS_PENDING == wdiStatus)
8493 {
8494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008495 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008496 }
8497 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8498 {
8499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008500 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008502 vos_mem_free(pWlanSuspendParam);
8503 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8504}
8505
Chet Lanctot186b5732013-03-18 10:26:30 -07008506#ifdef WLAN_FEATURE_11W
8507/*
8508 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8509 *
8510 */
8511VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8512 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8513{
8514 WDI_Status wdiStatus;
8515 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8517 "------> %s ", __func__);
8518
8519 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8520 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8521 sizeof(tSirMacAddr));
8522
8523 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8524 wdiExclUnencryptParams.pUserData = pWDA;
8525
8526 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8527 if(WDI_STATUS_PENDING == wdiStatus)
8528 {
8529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8530 "Pending received for %s:%d ", __func__, __LINE__ );
8531 }
8532 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8533 {
8534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8535 "Failure in %s:%d ", __func__, __LINE__ );
8536 }
8537 vos_mem_free(pExclUnencryptParam);
8538 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8539}
8540#endif
8541
Jeff Johnson295189b2012-06-20 16:38:30 -07008542/*
8543 * FUNCTION: WDA_ProcessWlanResumeCallback
8544 *
8545 */
8546void WDA_ProcessWlanResumeCallback(
8547 WDI_SuspendResumeRspParamsType *resumeRspParams,
8548 void* pUserData)
8549{
8550 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008553 if(NULL == pWdaParams)
8554 {
8555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008557 VOS_ASSERT(0) ;
8558 return ;
8559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008560 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8561 {
8562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008563 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8566 vos_mem_free(pWdaParams->wdaMsgParam);
8567 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 return ;
8569}
Jeff Johnson295189b2012-06-20 16:38:30 -07008570/*
8571 * FUNCTION: WDA_ProcessWlanResumeReq
8572 *
8573 */
8574VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8575 tSirWlanResumeParam *pWlanResumeParam)
8576{
8577 WDI_Status wdiStatus;
8578 WDI_ResumeParamsType *wdiResumeParams =
8579 (WDI_ResumeParamsType *)vos_mem_malloc(
8580 sizeof(WDI_ResumeParamsType) ) ;
8581 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008583 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008584 if(NULL == wdiResumeParams)
8585 {
8586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008587 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 VOS_ASSERT(0);
8589 return VOS_STATUS_E_NOMEM;
8590 }
8591 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8592 if(NULL == pWdaParams)
8593 {
8594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008596 VOS_ASSERT(0);
8597 vos_mem_free(wdiResumeParams);
8598 return VOS_STATUS_E_NOMEM;
8599 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008600 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8601 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008603 wdiResumeParams->wdiReqStatusCB = NULL;
8604 pWdaParams->wdaMsgParam = pWlanResumeParam;
8605 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8606 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008607 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8608 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8609 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8611 {
8612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8613 "Failure in Host Resume REQ WDI API, free all the memory " );
8614 VOS_ASSERT(0);
8615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8616 vos_mem_free(pWdaParams->wdaMsgParam);
8617 vos_mem_free(pWdaParams);
8618 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8620}
8621
Jeff Johnson295189b2012-06-20 16:38:30 -07008622/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008623 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 *
8625 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008626void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008627{
8628 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008630 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 if(NULL == pWdaParams)
8632 {
8633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008634 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008635 VOS_ASSERT(0) ;
8636 return ;
8637 }
8638
8639 vos_mem_free(pWdaParams->wdaMsgParam) ;
8640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8641 vos_mem_free(pWdaParams) ;
8642 /*
8643 * No respone required for SetBeaconFilter req so just free the request
8644 * param here
8645 */
8646
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 return ;
8648}
Jeff Johnson295189b2012-06-20 16:38:30 -07008649/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008650 * FUNCTION: WDA_SetBeaconFilterReqCallback
8651 * Free memory.
8652 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8653 */
8654void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8655{
8656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8657
8658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8659 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8660
8661 if(NULL == pWdaParams)
8662 {
8663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8664 "%s: pWdaParams received NULL", __func__);
8665 VOS_ASSERT(0);
8666 return;
8667 }
8668
8669 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8670 {
8671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8672 vos_mem_free(pWdaParams->wdaMsgParam);
8673 vos_mem_free(pWdaParams);
8674 }
8675
8676 return;
8677}
8678/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008679 * FUNCTION: WDA_SetBeaconFilterReq
8680 * Request to WDI to send the beacon filtering related information.
8681 */
8682VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8683 tBeaconFilterMsg* pBeaconFilterInfo)
8684{
8685 WDI_Status status = WDI_STATUS_SUCCESS;
8686 tANI_U8 *dstPtr, *srcPtr;
8687 tANI_U8 filterLength;
8688 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8689 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8690 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8691 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008693 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008694 if(NULL == wdiBeaconFilterInfo)
8695 {
8696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 VOS_ASSERT(0);
8699 return VOS_STATUS_E_NOMEM;
8700 }
8701 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8702 if(NULL == pWdaParams)
8703 {
8704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008705 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008706 VOS_ASSERT(0);
8707 vos_mem_free(wdiBeaconFilterInfo);
8708 return VOS_STATUS_E_NOMEM;
8709 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008710 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8711 pBeaconFilterInfo->beaconInterval;
8712 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8713 pBeaconFilterInfo->capabilityInfo;
8714 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8715 pBeaconFilterInfo->capabilityMask;
8716 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008717
8718 //Fill the BssIdx
8719 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8720
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 //Fill structure with info contained in the beaconFilterTable
8722 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8723 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8724 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8725 if(WDI_BEACON_FILTER_LEN < filterLength)
8726 {
8727 filterLength = WDI_BEACON_FILTER_LEN;
8728 }
8729 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008730 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8731 wdiBeaconFilterInfo->pUserData = pWdaParams;
8732
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 /* Store param pointer as passed in by caller */
8734 /* store Params pass it to WDI */
8735 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8736 pWdaParams->pWdaContext = pWDA;
8737 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8738
Jeff Johnson295189b2012-06-20 16:38:30 -07008739 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008740 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 if(IS_WDI_STATUS_FAILURE(status))
8742 {
8743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8744 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8745 vos_mem_free(pWdaParams->wdaMsgParam) ;
8746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8747 vos_mem_free(pWdaParams) ;
8748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 return CONVERT_WDI2VOS_STATUS(status) ;
8750}
Jeff Johnson295189b2012-06-20 16:38:30 -07008751/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008752 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 *
8754 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008755void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008756{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008757 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8758
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008760 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008761
8762 if(NULL == pWdaParams)
8763 {
8764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008765 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008766 VOS_ASSERT(0) ;
8767 return ;
8768 }
8769
8770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8771 vos_mem_free(pWdaParams->wdaMsgParam);
8772 vos_mem_free(pWdaParams);
8773
Jeff Johnson295189b2012-06-20 16:38:30 -07008774 //print a msg, nothing else to do
8775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008776 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 return ;
8778}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008779/*
8780 * FUNCTION: WDA_RemBeaconFilterReqCallback
8781 * Free memory.
8782 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8783 */
8784void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8785{
8786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8787
8788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8789 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8790
8791 if(NULL == pWdaParams)
8792 {
8793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8794 "%s: pWdaParams received NULL", __func__);
8795 VOS_ASSERT(0);
8796 return;
8797 }
8798
8799 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8800 {
8801 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8802 vos_mem_free(pWdaParams->wdaMsgParam);
8803 vos_mem_free(pWdaParams);
8804 }
8805
8806 return;
8807}
Jeff Johnson295189b2012-06-20 16:38:30 -07008808 // TODO: PE does not have this feature for now implemented,
8809 // but the support for removing beacon filter exists between
8810 // HAL and FW. This function can be called whenever PE defines
8811 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008812/*
8813 * FUNCTION: WDA_RemBeaconFilterReq
8814 * Request to WDI to send the removal of beacon filtering related information.
8815 */
8816VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8817 tRemBeaconFilterMsg* pBeaconFilterInfo)
8818{
8819 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008820 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008821 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8822 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8823 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008824 tWDA_ReqParams *pWdaParams ;
8825
Jeff Johnson295189b2012-06-20 16:38:30 -07008826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008827 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 if(NULL == wdiBeaconFilterInfo)
8829 {
8830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008832 VOS_ASSERT(0);
8833 return VOS_STATUS_E_NOMEM;
8834 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8836 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 {
8838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008839 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008840 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008841 vos_mem_free(wdiBeaconFilterInfo);
8842 vos_mem_free(pBeaconFilterInfo);
8843 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008845
8846 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8847 pBeaconFilterInfo->ucIeCount;
8848 //Fill structure with info contained in the ucRemIeId
8849 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8850 pBeaconFilterInfo->ucRemIeId,
8851 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8852 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8853 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008854
8855 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008856 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008857 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008858 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8859
8860 pWdaParams->pWdaContext = pWDA;
8861
Jeff Johnson43971f52012-07-17 12:26:56 -07008862 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008863 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008864 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008865 {
8866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8867 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008868 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8870 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008871 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008872 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008873 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008874}
Jeff Johnson295189b2012-06-20 16:38:30 -07008875/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008876 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008877 *
8878 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008879void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008880{
8881 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008884 if(NULL == pWdaParams)
8885 {
8886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008887 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008888 VOS_ASSERT(0) ;
8889 return ;
8890 }
8891
8892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8893 vos_mem_free(pWdaParams) ;
8894
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 return ;
8896}
Jeff Johnson295189b2012-06-20 16:38:30 -07008897/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008898 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8899 * Free memory.
8900 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8901 */
8902void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8903{
8904 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8905
8906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8907 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8908
8909 if(NULL == pWdaParams)
8910 {
8911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8912 "%s: pWdaParams received NULL", __func__);
8913 VOS_ASSERT(0);
8914 return;
8915 }
8916
8917 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8918 {
8919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8920 vos_mem_free(pWdaParams);
8921 }
8922
8923 return;
8924}
8925/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008926 * FUNCTION: WDA_SetRSSIThresholdsReq
8927 * Request to WDI to set the RSSI thresholds (sta mode).
8928 */
8929VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8930{
8931 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008932 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 tWDA_CbContext *pWDA = NULL ;
8934 v_PVOID_t pVosContext = NULL;
8935 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8936 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8937 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8938 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008940 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008941 if(NULL == wdiRSSIThresholdsInfo)
8942 {
8943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008945 VOS_ASSERT(0);
8946 return VOS_STATUS_E_NOMEM;
8947 }
8948 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8949 if(NULL == pWdaParams)
8950 {
8951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 VOS_ASSERT(0);
8954 vos_mem_free(wdiRSSIThresholdsInfo);
8955 return VOS_STATUS_E_NOMEM;
8956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008957 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8959 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8960 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8962 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8963 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008964 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8965 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8966 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008967 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8968 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8970 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8971
Jeff Johnson295189b2012-06-20 16:38:30 -07008972 /* Store param pointer as passed in by caller */
8973 /* store Params pass it to WDI */
8974 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8975 pWdaParams->pWdaContext = pWDA;
8976 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008977 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008978 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008979 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008980 {
8981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8982 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008983 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8985 vos_mem_free(pWdaParams) ;
8986 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008987 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008988
8989}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008990/*
Yue Madb90ac12013-04-04 13:39:13 -07008991 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 *
8993 */
Yue Madb90ac12013-04-04 13:39:13 -07008994void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008995{
8996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8997
8998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009000 if(NULL == pWdaParams)
9001 {
9002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009003 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009004 VOS_ASSERT(0) ;
9005 return ;
9006 }
9007
9008 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9009 vos_mem_free(pWdaParams->wdaMsgParam);
9010 vos_mem_free(pWdaParams) ;
9011
9012 //print a msg, nothing else to do
9013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009014 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009015 return ;
9016}
Jeff Johnson295189b2012-06-20 16:38:30 -07009017/*
Yue Madb90ac12013-04-04 13:39:13 -07009018 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009019 * Free memory.
9020 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009021 */
9022void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9023{
9024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9025
9026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9027 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9028
9029 if(NULL == pWdaParams)
9030 {
9031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9032 "%s: Invalid pWdaParams pointer", __func__);
9033 VOS_ASSERT(0);
9034 return;
9035 }
9036
9037 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9038 {
9039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9040 vos_mem_free(pWdaParams->wdaMsgParam);
9041 vos_mem_free(pWdaParams);
9042 }
9043
9044 return;
9045}
9046/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009047 * FUNCTION: WDA_ProcessHostOffloadReq
9048 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9049 * to broadcast traffic (sta mode).
9050 */
9051VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9052 tSirHostOffloadReq *pHostOffloadParams)
9053{
9054 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009055 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009056 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9057 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9058 sizeof(WDI_HostOffloadReqParamsType)) ;
9059 tWDA_ReqParams *pWdaParams ;
9060
9061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009062 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009063
9064 if(NULL == wdiHostOffloadInfo)
9065 {
9066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009068 VOS_ASSERT(0);
9069 return VOS_STATUS_E_NOMEM;
9070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9072 if(NULL == pWdaParams)
9073 {
9074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009075 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 VOS_ASSERT(0);
9077 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009078 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 return VOS_STATUS_E_NOMEM;
9080 }
9081
9082 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9083 pHostOffloadParams->offloadType;
9084 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9085 pHostOffloadParams->enableOrDisable;
9086
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009087 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9088 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9089
Jeff Johnson295189b2012-06-20 16:38:30 -07009090 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9091 {
9092 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9093 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9094 pHostOffloadParams->params.hostIpv4Addr,
9095 4);
9096 break;
9097 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9098 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9099 pHostOffloadParams->params.hostIpv6Addr,
9100 16);
9101 break;
9102 case SIR_IPV6_NS_OFFLOAD:
9103 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9104 pHostOffloadParams->params.hostIpv6Addr,
9105 16);
9106
9107#ifdef WLAN_NS_OFFLOAD
9108 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9109 {
9110 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9111 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9112 16);
9113 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9114 }
9115 else
9116 {
9117 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9118 }
9119
9120 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9121 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9122 16);
9123 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9124 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9125 6);
9126
9127 //Only two are supported so let's go through them without a loop
9128 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9129 {
9130 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9131 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9132 16);
9133 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9134 }
9135 else
9136 {
9137 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9138 }
9139
9140 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9141 {
9142 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9143 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9144 16);
9145 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9146 }
9147 else
9148 {
9149 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9150 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309151 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9152 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009153 break;
9154#endif //WLAN_NS_OFFLOAD
9155 default:
9156 {
9157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9158 "No Handling for Offload Type %x in WDA "
9159 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9160 //WDA_VOS_ASSERT(0) ;
9161 }
9162 }
Yue Madb90ac12013-04-04 13:39:13 -07009163 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9164 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009165
Jeff Johnson295189b2012-06-20 16:38:30 -07009166 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009167 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 /* store Params pass it to WDI */
9169 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9170 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009171
Jeff Johnson295189b2012-06-20 16:38:30 -07009172
Jeff Johnson43971f52012-07-17 12:26:56 -07009173 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009174 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009175
Jeff Johnson43971f52012-07-17 12:26:56 -07009176 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009177 {
9178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9179 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009180 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9182 vos_mem_free(pWdaParams->wdaMsgParam);
9183 vos_mem_free(pWdaParams) ;
9184 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009185 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009186
9187}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009188/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009189 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 *
9191 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009192void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009193{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9195
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009197 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009198
9199 if(NULL == pWdaParams)
9200 {
9201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009202 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009203 VOS_ASSERT(0) ;
9204 return ;
9205 }
9206
9207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9208 vos_mem_free(pWdaParams->wdaMsgParam);
9209 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009210
Jeff Johnson295189b2012-06-20 16:38:30 -07009211 //print a msg, nothing else to do
9212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009213 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 return ;
9215}
Jeff Johnson295189b2012-06-20 16:38:30 -07009216/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009217 * FUNCTION: WDA_KeepAliveReqCallback
9218 * Free memory.
9219 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9220 */
9221void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9222{
9223 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9224
9225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9226 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9227
9228 if(NULL == pWdaParams)
9229 {
9230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9231 "%s: pWdaParams received NULL", __func__);
9232 VOS_ASSERT(0);
9233 return;
9234 }
9235
9236 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9237 {
9238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9239 vos_mem_free(pWdaParams->wdaMsgParam);
9240 vos_mem_free(pWdaParams);
9241 }
9242
9243 return;
9244}
9245/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009246 * FUNCTION: WDA_ProcessKeepAliveReq
9247 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9248 * wakeup due to broadcast traffic (sta mode).
9249 */
9250VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9251 tSirKeepAliveReq *pKeepAliveParams)
9252{
9253 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009254 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9256 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9257 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009258 tWDA_ReqParams *pWdaParams;
9259
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009261 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 if(NULL == wdiKeepAliveInfo)
9263 {
9264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009266 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009267 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009268 return VOS_STATUS_E_NOMEM;
9269 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009270
9271 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9272 if(NULL == pWdaParams)
9273 {
9274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009275 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009276 VOS_ASSERT(0);
9277 vos_mem_free(wdiKeepAliveInfo);
9278 vos_mem_free(pKeepAliveParams);
9279 return VOS_STATUS_E_NOMEM;
9280 }
9281
Jeff Johnson295189b2012-06-20 16:38:30 -07009282 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9283 pKeepAliveParams->packetType;
9284 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9285 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009286
9287 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9288 pKeepAliveParams->bssId,
9289 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009290
9291 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9292 {
9293 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9294 pKeepAliveParams->hostIpv4Addr,
9295 SIR_IPV4_ADDR_LEN);
9296 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9297 pKeepAliveParams->destIpv4Addr,
9298 SIR_IPV4_ADDR_LEN);
9299 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9300 pKeepAliveParams->destMacAddr,
9301 SIR_MAC_ADDR_LEN);
9302 }
9303 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9304 {
9305 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9306 SIR_IPV4_ADDR_LEN,
9307 0);
9308 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9309 SIR_IPV4_ADDR_LEN,
9310 0);
9311 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9312 SIR_MAC_ADDR_LEN,
9313 0);
9314 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009315 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9316 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009317
Jeff Johnson295189b2012-06-20 16:38:30 -07009318 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009319 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009320 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009321 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9322 pWdaParams->pWdaContext = pWDA;
9323
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9325 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9326 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9327 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9328 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9330 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9331 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9332 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9333 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9335 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9336 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9337 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9338 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9339 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9340 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9341 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9343 "TimePeriod %d PacketType %d",
9344 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9345 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009346 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009347 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009348
Jeff Johnson43971f52012-07-17 12:26:56 -07009349 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 {
9351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9352 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009353 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9355 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009356 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009358 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009359
9360}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009361/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009362 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 *
9364 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009365void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009366 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9367 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009368{
9369 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009371 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 if(NULL == pWdaParams)
9373 {
9374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009375 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 VOS_ASSERT(0) ;
9377 return ;
9378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9380 vos_mem_free(pWdaParams->wdaMsgParam);
9381 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 return ;
9383}
Jeff Johnson295189b2012-06-20 16:38:30 -07009384/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009385 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9386 * Free memory.
9387 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9388 */
9389void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9390{
9391 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9392
9393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9394 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9395
9396 if(NULL == pWdaParams)
9397 {
9398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9399 "%s: pWdaParams received NULL", __func__);
9400 VOS_ASSERT(0);
9401 return;
9402 }
9403
9404 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9405 {
9406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9407 vos_mem_free(pWdaParams->wdaMsgParam);
9408 vos_mem_free(pWdaParams);
9409 }
9410
9411 return;
9412}
9413
9414/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009415 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9416 * Request to WDI to add WOWL Bcast pattern
9417 */
9418VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9419 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9420{
9421 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009422 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9424 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9425 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9426 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009428 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009429 if(NULL == wdiWowlAddBcPtrnInfo)
9430 {
9431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009432 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009433 VOS_ASSERT(0);
9434 return VOS_STATUS_E_NOMEM;
9435 }
9436 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9437 if(NULL == pWdaParams)
9438 {
9439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 VOS_ASSERT(0);
9442 vos_mem_free(wdiWowlAddBcPtrnInfo);
9443 return VOS_STATUS_E_NOMEM;
9444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009445 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9446 pWowlAddBcPtrnParams->ucPatternId;
9447 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9448 pWowlAddBcPtrnParams->ucPatternByteOffset;
9449 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9450 pWowlAddBcPtrnParams->ucPatternMaskSize;
9451 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9452 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009453 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9454 {
9455 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9456 pWowlAddBcPtrnParams->ucPattern,
9457 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9458 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9459 pWowlAddBcPtrnParams->ucPatternMask,
9460 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9461 }
9462 else
9463 {
9464 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9465 pWowlAddBcPtrnParams->ucPattern,
9466 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9467 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9468 pWowlAddBcPtrnParams->ucPatternMask,
9469 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9470
9471 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9472 pWowlAddBcPtrnParams->ucPatternExt,
9473 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9474 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9475 pWowlAddBcPtrnParams->ucPatternMaskExt,
9476 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9477 }
9478
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009479 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9480 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9481
Yue Ma7f44bbe2013-04-12 11:47:39 -07009482 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9483 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 /* Store param pointer as passed in by caller */
9485 /* store Params pass it to WDI */
9486 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9487 pWdaParams->pWdaContext = pWDA;
9488 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009489 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009490 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009491 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 {
9493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9494 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009495 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 vos_mem_free(pWdaParams->wdaMsgParam) ;
9497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9498 vos_mem_free(pWdaParams) ;
9499 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009500 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009501
9502}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009503/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009504 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 *
9506 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009507void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009508 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9509 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009510{
9511 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009513 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 if(NULL == pWdaParams)
9515 {
9516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009517 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009518 VOS_ASSERT(0) ;
9519 return ;
9520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9522 vos_mem_free(pWdaParams->wdaMsgParam);
9523 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 return ;
9525}
Jeff Johnson295189b2012-06-20 16:38:30 -07009526/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009527 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9528 * Free memory.
9529 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9530 */
9531void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9532{
9533 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9534
9535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9536 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9537
9538 if(NULL == pWdaParams)
9539 {
9540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9541 "%s: pWdaParams received NULL", __func__);
9542 VOS_ASSERT(0);
9543 return;
9544 }
9545
9546 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9547 {
9548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9549 vos_mem_free(pWdaParams->wdaMsgParam);
9550 vos_mem_free(pWdaParams);
9551 }
9552
9553 return;
9554}
9555/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009556 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9557 * Request to WDI to delete WOWL Bcast pattern
9558 */
9559VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9560 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9561{
9562 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009563 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009564 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9565 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9566 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9567 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009569 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 if(NULL == wdiWowlDelBcPtrnInfo)
9571 {
9572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009573 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 VOS_ASSERT(0);
9575 return VOS_STATUS_E_NOMEM;
9576 }
9577 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9578 if(NULL == pWdaParams)
9579 {
9580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009581 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009582 VOS_ASSERT(0);
9583 vos_mem_free(wdiWowlDelBcPtrnInfo);
9584 return VOS_STATUS_E_NOMEM;
9585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9587 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009588
9589 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9590 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9591
Yue Ma7f44bbe2013-04-12 11:47:39 -07009592 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9593 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009594 /* Store param pointer as passed in by caller */
9595 /* store Params pass it to WDI */
9596 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9597 pWdaParams->pWdaContext = pWDA;
9598 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009599 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009600 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009601 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 {
9603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9604 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009605 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 vos_mem_free(pWdaParams->wdaMsgParam) ;
9607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9608 vos_mem_free(pWdaParams) ;
9609 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009610 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009611
9612}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009613/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009614 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 *
9616 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009617void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009618{
9619 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9620 tWDA_CbContext *pWDA;
9621 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009623 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009624 if(NULL == pWdaParams)
9625 {
9626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009627 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009628 VOS_ASSERT(0) ;
9629 return ;
9630 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009631 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9632 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9633
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009634 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9635
Jeff Johnson295189b2012-06-20 16:38:30 -07009636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9637 vos_mem_free(pWdaParams) ;
9638
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009639 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009640 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009641 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009642 return ;
9643}
Jeff Johnson295189b2012-06-20 16:38:30 -07009644/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009645 * FUNCTION: WDA_WowlEnterReqCallback
9646 * Free memory and send WOWL Enter RSP back to PE.
9647 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9648 */
9649void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9650{
9651 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9652 tWDA_CbContext *pWDA;
9653 tSirHalWowlEnterParams *pWowlEnterParams;
9654
9655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9656 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9657
9658 if(NULL == pWdaParams)
9659 {
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9661 "%s: pWdaParams received NULL", __func__);
9662 VOS_ASSERT(0);
9663 return;
9664 }
9665
9666 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9667 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9668 pWowlEnterParams->status = wdiStatus;
9669
9670 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9671 {
9672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9673 vos_mem_free(pWdaParams);
9674 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9675 }
9676
9677 return;
9678}
9679/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009680 * FUNCTION: WDA_ProcessWowlEnterReq
9681 * Request to WDI to enter WOWL
9682 */
9683VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9684 tSirHalWowlEnterParams *pWowlEnterParams)
9685{
9686 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009687 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009688 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9689 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9690 sizeof(WDI_WowlEnterReqParamsType)) ;
9691 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009693 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009694 if(NULL == wdiWowlEnterInfo)
9695 {
9696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009698 VOS_ASSERT(0);
9699 return VOS_STATUS_E_NOMEM;
9700 }
9701 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9702 if(NULL == pWdaParams)
9703 {
9704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009705 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009706 VOS_ASSERT(0);
9707 vos_mem_free(wdiWowlEnterInfo);
9708 return VOS_STATUS_E_NOMEM;
9709 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009710
9711 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9712
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9714 pWowlEnterParams->magicPtrn,
9715 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009716 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9717 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009718 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9719 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009720 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9721 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9723 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9725 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009726 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9727 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009728 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9729 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009730 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9731 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009732#ifdef WLAN_WAKEUP_EVENTS
9733 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9734 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9735
9736 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9737 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9738
9739 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9740 pWowlEnterParams->ucWowNetScanOffloadMatch;
9741
9742 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9743 pWowlEnterParams->ucWowGTKRekeyError;
9744
9745 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9746 pWowlEnterParams->ucWoWBSSConnLoss;
9747#endif // WLAN_WAKEUP_EVENTS
9748
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009749 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9750 pWowlEnterParams->bssIdx;
9751
Yue Ma7f44bbe2013-04-12 11:47:39 -07009752 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9753 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009754 /* Store param pointer as passed in by caller */
9755 /* store Params pass it to WDI */
9756 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9757 pWdaParams->pWdaContext = pWDA;
9758 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009759 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009760 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009761 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009762 {
9763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9764 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009765 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009766 vos_mem_free(pWdaParams->wdaMsgParam) ;
9767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9768 vos_mem_free(pWdaParams) ;
9769 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009770 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009771
9772}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009773/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009774 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009775 *
9776 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009777void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009778{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009779 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9780 tWDA_CbContext *pWDA;
9781 tSirHalWowlExitParams *pWowlExitParams;
9782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009783 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009784 if(NULL == pWdaParams)
9785 {
9786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009787 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009788 VOS_ASSERT(0) ;
9789 return ;
9790 }
9791 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9792 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9793
9794 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009795 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009796
9797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9798 vos_mem_free(pWdaParams) ;
9799
Jeff Johnson295189b2012-06-20 16:38:30 -07009800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009801 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009802 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009803 return ;
9804}
Jeff Johnson295189b2012-06-20 16:38:30 -07009805/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009806 * FUNCTION: WDA_WowlExitReqCallback
9807 * Free memory and send WOWL Exit RSP back to PE.
9808 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9809 */
9810void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9811{
9812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9813 tWDA_CbContext *pWDA;
9814 tSirHalWowlExitParams *pWowlExitParams;
9815
9816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9817 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9818
9819 if(NULL == pWdaParams)
9820 {
9821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9822 "%s: pWdaParams received NULL", __func__);
9823 VOS_ASSERT(0);
9824 return;
9825 }
9826
9827 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9828 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9829 pWowlExitParams->status = wdiStatus;
9830
9831 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9832 {
9833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9834 vos_mem_free(pWdaParams);
9835 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9836 }
9837
9838 return;
9839}
9840/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 * FUNCTION: WDA_ProcessWowlExitReq
9842 * Request to WDI to add WOWL Bcast pattern
9843 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009844VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9845 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009846{
9847 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009848 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009849 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9850 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9851 sizeof(WDI_WowlExitReqParamsType)) ;
9852 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009854 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009855 if(NULL == wdiWowlExitInfo)
9856 {
9857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009858 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009859 VOS_ASSERT(0);
9860 return VOS_STATUS_E_NOMEM;
9861 }
9862 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9863 if(NULL == pWdaParams)
9864 {
9865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009866 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009867 VOS_ASSERT(0);
9868 vos_mem_free(wdiWowlExitInfo);
9869 return VOS_STATUS_E_NOMEM;
9870 }
9871
9872 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9873 pWowlExitParams->bssIdx;
9874
Yue Ma7f44bbe2013-04-12 11:47:39 -07009875 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9876 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009877
9878 /* Store param pointer as passed in by caller */
9879 /* store Params pass it to WDI */
9880 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9881 pWdaParams->pWdaContext = pWDA;
9882 pWdaParams->wdaMsgParam = pWowlExitParams;
9883
9884 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009885 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009886
Jeff Johnson43971f52012-07-17 12:26:56 -07009887 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009888 {
9889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9890 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009891 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9893 vos_mem_free(pWdaParams->wdaMsgParam);
9894 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009895 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009896 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009897}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009898/*
9899 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9900 * Request to WDI to determine whether a given station is capable of
9901 * using HW-based frame translation
9902 */
9903v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9904 tANI_U8 staIdx)
9905{
9906 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9907}
Jeff Johnson295189b2012-06-20 16:38:30 -07009908/*
9909 * FUNCTION: WDA_NvDownloadReqCallback
9910 * send NV Download RSP back to PE
9911 */
9912void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9913 void* pUserData)
9914{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009915
9916 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9917 tWDA_CbContext *pWDA;
9918
Jeff Johnson295189b2012-06-20 16:38:30 -07009919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009920 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009921
9922 if(NULL == pWdaParams)
9923 {
9924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009925 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009926 VOS_ASSERT(0) ;
9927 return ;
9928 }
9929
9930 pWDA = pWdaParams->pWdaContext;
9931
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9934 vos_mem_free(pWdaParams);
9935
Jeff Johnson295189b2012-06-20 16:38:30 -07009936 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 return ;
9938}
Jeff Johnson295189b2012-06-20 16:38:30 -07009939/*
9940 * FUNCTION: WDA_ProcessNvDownloadReq
9941 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9942 */
9943VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9944{
9945 /* Initialize the local Variables*/
9946 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9947 v_VOID_t *pNvBuffer=NULL;
9948 v_SIZE_t bufferSize = 0;
9949 WDI_Status status = WDI_STATUS_E_FAILURE;
9950 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009951 tWDA_ReqParams *pWdaParams ;
9952
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009954 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009955 if(NULL == pWDA)
9956 {
9957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009958 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009959 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 return VOS_STATUS_E_FAILURE;
9961 }
9962
9963 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009964 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9965
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9967 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009968 if(NULL == wdiNvDownloadReqParam)
9969 {
9970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009971 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 VOS_ASSERT(0);
9973 return VOS_STATUS_E_NOMEM;
9974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009975 /* Copy Params to wdiNvDownloadReqParam*/
9976 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9977 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009978
9979 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9980 if(NULL == pWdaParams)
9981 {
9982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009983 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009984 VOS_ASSERT(0);
9985 vos_mem_free(wdiNvDownloadReqParam);
9986 return VOS_STATUS_E_NOMEM;
9987 }
9988
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009990 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9991 pWdaParams->wdaMsgParam = NULL;
9992 pWdaParams->pWdaContext = pWDA;
9993
9994
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009996
Jeff Johnson295189b2012-06-20 16:38:30 -07009997 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009998 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9999
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 if(IS_WDI_STATUS_FAILURE(status))
10001 {
10002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10003 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10005 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010006 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010007 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010008}
10009/*
10010 * FUNCTION: WDA_FlushAcReqCallback
10011 * send Flush AC RSP back to TL
10012 */
10013void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10014{
10015 vos_msg_t wdaMsg = {0} ;
10016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10017 tFlushACReq *pFlushACReqParams;
10018 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010020 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010021 if(NULL == pWdaParams)
10022 {
10023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010024 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 VOS_ASSERT(0) ;
10026 return ;
10027 }
10028
10029 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10030 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10031 if(NULL == pFlushACRspParams)
10032 {
10033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010036 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 return ;
10038 }
10039 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10040 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10041 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10042 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10043 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010044 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 vos_mem_free(pWdaParams->wdaMsgParam) ;
10046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10047 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010048 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10049 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10050 // POST message to TL
10051 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10052
Jeff Johnson295189b2012-06-20 16:38:30 -070010053 return ;
10054}
Jeff Johnson295189b2012-06-20 16:38:30 -070010055/*
10056 * FUNCTION: WDA_ProcessFlushAcReq
10057 * Request to WDI to Update the DELBA REQ params.
10058 */
10059VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10060 tFlushACReq *pFlushAcReqParams)
10061{
10062 WDI_Status status = WDI_STATUS_SUCCESS ;
10063 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10064 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10065 sizeof(WDI_FlushAcReqParamsType)) ;
10066 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010067 if(NULL == wdiFlushAcReqParam)
10068 {
10069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010071 VOS_ASSERT(0);
10072 return VOS_STATUS_E_NOMEM;
10073 }
10074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10075 if(NULL == pWdaParams)
10076 {
10077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010079 VOS_ASSERT(0);
10080 vos_mem_free(wdiFlushAcReqParam);
10081 return VOS_STATUS_E_NOMEM;
10082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010084 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010085 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10086 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10087 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10088 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010089 /* Store Flush AC pointer, as this will be used for response */
10090 /* store Params pass it to WDI */
10091 pWdaParams->pWdaContext = pWDA;
10092 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10093 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010094 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10095 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 if(IS_WDI_STATUS_FAILURE(status))
10097 {
10098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10099 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10100 vos_mem_free(pWdaParams->wdaMsgParam) ;
10101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10102 vos_mem_free(pWdaParams) ;
10103 //TODO: respond to TL with failure
10104 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010106}
Jeff Johnson295189b2012-06-20 16:38:30 -070010107/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010108 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010109 *
10110 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010111void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010112{
10113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10114 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010115 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010116
10117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010118 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 if(NULL == pWdaParams)
10120 {
10121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010122 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010123 VOS_ASSERT(0) ;
10124 return ;
10125 }
10126 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10127 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10128 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10129 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10130 {
10131 pWDA->wdaAmpSessionOn = VOS_FALSE;
10132 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010133 vos_mem_free(pWdaParams->wdaMsgParam) ;
10134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10135 vos_mem_free(pWdaParams) ;
10136 /*
10137 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10138 * param here
10139 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010140 return ;
10141}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010142/*
10143 * FUNCTION: WDA_BtAmpEventReqCallback
10144 * Free memory.
10145 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10146 */
10147void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10148{
10149 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10150 tWDA_CbContext *pWDA;
10151 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010152
Yue Ma7f44bbe2013-04-12 11:47:39 -070010153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10154 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10155
10156 if(NULL == pWdaParams)
10157 {
10158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10159 "%s: pWdaParams received NULL", __func__);
10160 VOS_ASSERT(0);
10161 return;
10162 }
10163
10164 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10165 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10166
10167 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10168 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10169 {
10170 pWDA->wdaAmpSessionOn = VOS_FALSE;
10171 }
10172
10173 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10174 {
10175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10176 vos_mem_free(pWdaParams->wdaMsgParam);
10177 vos_mem_free(pWdaParams);
10178 }
10179
10180 return;
10181}
Jeff Johnson295189b2012-06-20 16:38:30 -070010182/*
10183 * FUNCTION: WDA_ProcessBtAmpEventReq
10184 * Request to WDI to Update with BT AMP events.
10185 */
10186VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10187 tSmeBtAmpEvent *pBtAmpEventParams)
10188{
10189 WDI_Status status = WDI_STATUS_SUCCESS ;
10190 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10191 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10192 sizeof(WDI_BtAmpEventParamsType)) ;
10193 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010195 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010196 if(NULL == wdiBtAmpEventParam)
10197 {
10198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010200 VOS_ASSERT(0);
10201 return VOS_STATUS_E_NOMEM;
10202 }
10203 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10204 if(NULL == pWdaParams)
10205 {
10206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010207 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 VOS_ASSERT(0);
10209 vos_mem_free(wdiBtAmpEventParam);
10210 return VOS_STATUS_E_NOMEM;
10211 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010212 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10213 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010214 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10215 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 /* Store BT AMP event pointer, as this will be used for response */
10217 /* store Params pass it to WDI */
10218 pWdaParams->pWdaContext = pWDA;
10219 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10220 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010221 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010222 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010223 if(IS_WDI_STATUS_FAILURE(status))
10224 {
10225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10226 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10227 vos_mem_free(pWdaParams->wdaMsgParam) ;
10228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10229 vos_mem_free(pWdaParams) ;
10230 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10232 {
10233 pWDA->wdaAmpSessionOn = VOS_TRUE;
10234 }
10235 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010236}
10237
Jeff Johnson295189b2012-06-20 16:38:30 -070010238/*
10239 * FUNCTION: WDA_FTMCommandReqCallback
10240 * Handle FTM CMD response came from HAL
10241 * Route responce to HDD FTM
10242 */
10243void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10244 void *usrData)
10245{
10246 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10248 {
10249 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010250 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 return;
10252 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 /* Release Current FTM Command Request */
10254 vos_mem_free(pWDA->wdaFTMCmdReq);
10255 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 /* Post FTM Responce to HDD FTM */
10257 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 return;
10259}
Jeff Johnson295189b2012-06-20 16:38:30 -070010260/*
10261 * FUNCTION: WDA_ProcessFTMCommand
10262 * Send FTM command to WDI
10263 */
10264VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10265 tPttMsgbuffer *pPTTFtmCmd)
10266{
10267 WDI_Status status = WDI_STATUS_SUCCESS;
10268 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 ftmCMDReq = (WDI_FTMCommandReqType *)
10270 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10271 if(NULL == ftmCMDReq)
10272 {
10273 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10274 "WDA FTM Command buffer alloc fail");
10275 return VOS_STATUS_E_NOMEM;
10276 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10278 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 /* Send command to WDI */
10281 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 return status;
10283}
Jeff Johnsone7245742012-09-05 17:12:55 -070010284#ifdef FEATURE_OEM_DATA_SUPPORT
10285/*
10286 * FUNCTION: WDA_StartOemDataReqCallback
10287 *
10288 */
10289void WDA_StartOemDataReqCallback(
10290 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10291 void* pUserData)
10292{
10293 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10295 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010296 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010297
Jeff Johnsone7245742012-09-05 17:12:55 -070010298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010299 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010300
10301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010305 VOS_ASSERT(0) ;
10306 return ;
10307 }
10308 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10309
Jeff Johnsone7245742012-09-05 17:12:55 -070010310 if(NULL == pWDA)
10311 {
10312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010313 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010314 VOS_ASSERT(0);
10315 return ;
10316 }
10317
10318 /*
10319 * Allocate memory for response params sent to PE
10320 */
10321 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10322
10323 // Check if memory is allocated for OemdataMeasRsp Params.
10324 if(NULL == pOemDataRspParams)
10325 {
10326 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10327 "OEM DATA WDA callback alloc fail");
10328 VOS_ASSERT(0) ;
10329 return;
10330 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010331
Jeff Johnsone7245742012-09-05 17:12:55 -070010332 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10334 vos_mem_free(pWdaParams->wdaMsgParam);
10335 vos_mem_free(pWdaParams) ;
10336
Jeff Johnsone7245742012-09-05 17:12:55 -070010337 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010338 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010339 * Also, here success always means that we have atleast one BSSID.
10340 */
10341 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10342
10343 //enable Tx
10344 status = WDA_ResumeDataTx(pWDA);
10345 if(status != VOS_STATUS_SUCCESS)
10346 {
10347 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10348 }
10349 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10350 return ;
10351}
10352/*
10353 * FUNCTION: WDA_ProcessStartOemDataReq
10354 * Send Start Oem Data Req to WDI
10355 */
10356VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10357 tStartOemDataReq *pOemDataReqParams)
10358{
10359 WDI_Status status = WDI_STATUS_SUCCESS;
10360 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010361 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010362
10363 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10364
10365 if(NULL == wdiOemDataReqParams)
10366 {
10367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010368 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010369 VOS_ASSERT(0);
10370 return VOS_STATUS_E_NOMEM;
10371 }
10372
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010373 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10374 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10375 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10376 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010377
10378 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10379
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010380 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10381 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010382 {
10383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010384 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010385 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010386 vos_mem_free(pOemDataReqParams);
10387 VOS_ASSERT(0);
10388 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010389 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010390
Bernald44a1ae2013-01-09 08:30:39 -080010391 pWdaParams->pWdaContext = (void*)pWDA;
10392 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10393 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010394
10395 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10396 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010397
10398 if(IS_WDI_STATUS_FAILURE(status))
10399 {
10400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10401 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10403 vos_mem_free(pWdaParams->wdaMsgParam);
10404 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010405 }
10406 return CONVERT_WDI2VOS_STATUS(status) ;
10407}
10408#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010409/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010410 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010411 *
10412 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010413void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010414{
10415 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010417 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010418 if(NULL == pWdaParams)
10419 {
10420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010421 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 VOS_ASSERT(0) ;
10423 return ;
10424 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010425
10426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10427 vos_mem_free(pWdaParams->wdaMsgParam);
10428 vos_mem_free(pWdaParams);
10429
10430 return ;
10431}
10432/*
10433 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10434 * Free memory.
10435 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10436 */
10437void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10438{
10439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10440
10441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10442 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10443
10444 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010445 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10447 "%s: pWdaParams received NULL", __func__);
10448 VOS_ASSERT(0);
10449 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010450 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010451
10452 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010453 {
10454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010455 vos_mem_free(pWdaParams->wdaMsgParam);
10456 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010457 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010458
10459 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010460}
Jeff Johnson295189b2012-06-20 16:38:30 -070010461#ifdef WLAN_FEATURE_GTK_OFFLOAD
10462/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010463 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010464 *
10465 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010466void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010467 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010468{
10469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10470
10471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010472 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010473 if(NULL == pWdaParams)
10474 {
10475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10476 "%s: pWdaParams received NULL", __func__);
10477 VOS_ASSERT(0);
10478 return;
10479 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010480
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 vos_mem_free(pWdaParams->wdaMsgParam) ;
10482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10483 vos_mem_free(pWdaParams) ;
10484
10485 //print a msg, nothing else to do
10486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010487 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010488
10489 return ;
10490}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010491/*
10492 * FUNCTION: WDA_GTKOffloadReqCallback
10493 * Free memory.
10494 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10495 */
10496void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10497{
10498 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010499
Yue Ma7f44bbe2013-04-12 11:47:39 -070010500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10501 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10502
10503 if(NULL == pWdaParams)
10504 {
10505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10506 "%s: pWdaParams received NULL", __func__);
10507 VOS_ASSERT(0);
10508 return;
10509 }
10510
10511 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10512 {
10513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10514 vos_mem_free(pWdaParams->wdaMsgParam);
10515 vos_mem_free(pWdaParams);
10516 }
10517
10518 return;
10519}
Jeff Johnson295189b2012-06-20 16:38:30 -070010520/*
10521 * FUNCTION: WDA_ProcessGTKOffloadReq
10522 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10523 * to broadcast traffic (sta mode).
10524 */
10525VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10526 tpSirGtkOffloadParams pGtkOffloadParams)
10527{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010528 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10530 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10531 sizeof(WDI_GtkOffloadReqMsg)) ;
10532 tWDA_ReqParams *pWdaParams ;
10533
10534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010535 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010536
10537 if(NULL == wdiGtkOffloadReqMsg)
10538 {
10539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010541 VOS_ASSERT(0);
10542 return VOS_STATUS_E_NOMEM;
10543 }
10544
10545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10546 if(NULL == pWdaParams)
10547 {
10548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010550 VOS_ASSERT(0);
10551 vos_mem_free(wdiGtkOffloadReqMsg);
10552 return VOS_STATUS_E_NOMEM;
10553 }
10554
10555 //
10556 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10557 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010558
10559 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010560 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010561
Jeff Johnson295189b2012-06-20 16:38:30 -070010562 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10563 // Copy KCK
10564 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10565 // Copy KEK
10566 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10567 // Copy KeyReplayCounter
10568 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10569 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10570
Yue Ma7f44bbe2013-04-12 11:47:39 -070010571 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10572 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010573
Jeff Johnson295189b2012-06-20 16:38:30 -070010574
10575 /* Store Params pass it to WDI */
10576 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10577 pWdaParams->pWdaContext = pWDA;
10578 /* Store param pointer as passed in by caller */
10579 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10580
Yue Ma7f44bbe2013-04-12 11:47:39 -070010581 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010582
10583 if(IS_WDI_STATUS_FAILURE(status))
10584 {
10585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10586 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10588 vos_mem_free(pWdaParams->wdaMsgParam);
10589 vos_mem_free(pWdaParams);
10590 }
10591
10592 return CONVERT_WDI2VOS_STATUS(status) ;
10593}
10594
10595/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010596 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010597 *
10598 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010599void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010600 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010601{
10602 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10603 tWDA_CbContext *pWDA;
10604 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010605 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010606 vos_msg_t vosMsg;
10607
10608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010609 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010610
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010611 if(NULL == pWdaParams)
10612 {
10613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10614 "%s: pWdaParams received NULL", __func__);
10615 VOS_ASSERT(0);
10616 return;
10617 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010618
Nirav Shah374de6e2014-02-13 16:40:01 +053010619 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10620 if(NULL == pGtkOffloadGetInfoRsp)
10621 {
10622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10623 "%s: vos_mem_malloc failed ", __func__);
10624 VOS_ASSERT(0);
10625 return;
10626 }
10627
Jeff Johnson295189b2012-06-20 16:38:30 -070010628 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10629 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10630
10631 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10632 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10633
10634 /* Message Header */
10635 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010636 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010637
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010638 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10639 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10640 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10641 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10642 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010643
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010644 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10645 pwdiGtkOffloadGetInfoRsparams->bssId,
10646 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 /* VOS message wrapper */
10648 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10649 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10650 vosMsg.bodyval = 0;
10651
10652 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10653 {
10654 /* free the mem and return */
10655 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10656 }
10657
10658 vos_mem_free(pWdaParams->wdaMsgParam) ;
10659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10660 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010661
10662 return;
10663}
10664/*
10665 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10666 * Free memory and send RSP back to SME.
10667 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10668 */
10669void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10670{
10671 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10672 vos_msg_t vosMsg;
10673
10674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10675 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10676
10677 if(NULL == pWdaParams)
10678 {
10679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10680 "%s: pWdaParams received NULL", __func__);
10681 VOS_ASSERT(0);
10682 return;
10683 }
10684
10685 /* VOS message wrapper */
10686 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10687 vosMsg.bodyptr = NULL;
10688 vosMsg.bodyval = 0;
10689
10690 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10691 {
10692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10693 vos_mem_free(pWdaParams->wdaMsgParam);
10694 vos_mem_free(pWdaParams);
10695 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10696 }
10697
10698 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010699}
10700#endif
10701
10702/*
10703 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10704 * Request to WDI to set Tx Per Tracking configurations
10705 */
10706VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10707{
10708 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010709 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010710 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10711 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10712 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10713 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010715 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 if(NULL == pwdiSetTxPerTrackingReqParams)
10717 {
10718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010719 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010720 vos_mem_free(pTxPerTrackingParams);
10721 VOS_ASSERT(0);
10722 return VOS_STATUS_E_NOMEM;
10723 }
10724 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10725 if(NULL == pWdaParams)
10726 {
10727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010728 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10730 vos_mem_free(pTxPerTrackingParams);
10731 VOS_ASSERT(0);
10732 return VOS_STATUS_E_NOMEM;
10733 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010734 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10735 pTxPerTrackingParams->ucTxPerTrackingEnable;
10736 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10737 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10738 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10739 pTxPerTrackingParams->ucTxPerTrackingRatio;
10740 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10741 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010742 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10743 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010744 /* Store param pointer as passed in by caller */
10745 /* store Params pass it to WDI
10746 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10747 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10748 pWdaParams->pWdaContext = pWDA;
10749 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010750 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010751 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010752 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010753 {
10754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10755 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010756 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 vos_mem_free(pWdaParams->wdaMsgParam) ;
10758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10759 vos_mem_free(pWdaParams) ;
10760 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010761 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010762
10763}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010764/*
10765 * FUNCTION: WDA_HALDumpCmdCallback
10766 * Send the VOS complete .
10767 */
10768void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10769 void* pUserData)
10770{
10771 tANI_U8 *buffer = NULL;
10772 tWDA_CbContext *pWDA = NULL;
10773 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010774 if(NULL == pWdaParams)
10775 {
10776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010777 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010778 VOS_ASSERT(0) ;
10779 return ;
10780 }
10781
10782 pWDA = pWdaParams->pWdaContext;
10783 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010784 if(wdiRspParams->usBufferLen > 0)
10785 {
10786 /*Copy the Resp data to UMAC supplied buffer*/
10787 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10790 vos_mem_free(pWdaParams);
10791
10792 /* Indicate VOSS about the start complete */
10793 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010794 return ;
10795}
10796
Jeff Johnson295189b2012-06-20 16:38:30 -070010797/*
10798 * FUNCTION: WDA_ProcessHALDumpCmdReq
10799 * Send Dump command to WDI
10800 */
10801VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10802 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10803 tANI_U32 arg4, tANI_U8 *pBuffer)
10804{
10805 WDI_Status status = WDI_STATUS_SUCCESS;
10806 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10807 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10808 tWDA_ReqParams *pWdaParams ;
10809 pVosContextType pVosContext = NULL;
10810 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010811 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10812 (void *)pMac);
10813
10814 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10815 if(NULL == pWdaParams)
10816 {
10817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010819 return VOS_STATUS_E_NOMEM;
10820 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010821 /* Allocate memory WDI request structure*/
10822 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10823 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10824 if(NULL == wdiHALDumpCmdReqParam)
10825 {
10826 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10827 "WDA HAL DUMP Command buffer alloc fail");
10828 vos_mem_free(pWdaParams);
10829 return WDI_STATUS_E_FAILURE;
10830 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010831 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 /* Extract the arguments */
10833 wdiHalDumpCmdInfo->command = cmd;
10834 wdiHalDumpCmdInfo->argument1 = arg1;
10835 wdiHalDumpCmdInfo->argument2 = arg2;
10836 wdiHalDumpCmdInfo->argument3 = arg3;
10837 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10840
10841 /* Response message will be passed through the buffer */
10842 pWdaParams->wdaMsgParam = (void *)pBuffer;
10843
10844 /* store Params pass it to WDI */
10845 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010846 /* Send command to WDI */
10847 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010848 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010849 if ( vStatus != VOS_STATUS_SUCCESS )
10850 {
10851 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10852 {
10853 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010854 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010855 }
10856 else
10857 {
10858 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010859 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010860 }
10861 VOS_ASSERT(0);
10862 }
10863 return status;
10864}
Jeff Johnson295189b2012-06-20 16:38:30 -070010865#ifdef WLAN_FEATURE_GTK_OFFLOAD
10866/*
10867 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10868 * Request to WDI to get GTK Offload Information
10869 */
10870VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10871 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10872{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010873 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010874 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10875 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10876 tWDA_ReqParams *pWdaParams ;
10877
10878 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10879 {
10880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010881 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 VOS_ASSERT(0);
10883 return VOS_STATUS_E_NOMEM;
10884 }
10885
10886 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10887 if(NULL == pWdaParams)
10888 {
10889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010890 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010891 VOS_ASSERT(0);
10892 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10893 return VOS_STATUS_E_NOMEM;
10894 }
10895
Yue Ma7f44bbe2013-04-12 11:47:39 -070010896 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10897 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010898
Jeff Johnson295189b2012-06-20 16:38:30 -070010899 /* Store Params pass it to WDI */
10900 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10901 pWdaParams->pWdaContext = pWDA;
10902 /* Store param pointer as passed in by caller */
10903 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10904
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010905 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010906 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010907
Yue Ma7f44bbe2013-04-12 11:47:39 -070010908 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010909
10910 if(IS_WDI_STATUS_FAILURE(status))
10911 {
10912 /* failure returned by WDI API */
10913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10914 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10916 vos_mem_free(pWdaParams) ;
10917 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10918 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10919 }
10920
10921 return CONVERT_WDI2VOS_STATUS(status) ;
10922}
10923#endif // WLAN_FEATURE_GTK_OFFLOAD
10924
10925/*
Yue Mab9c86f42013-08-14 15:59:08 -070010926 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10927 *
10928 */
10929VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10930 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10931{
10932 WDI_Status wdiStatus;
10933 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10934
10935 addPeriodicTxPtrnParams =
10936 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10937
10938 if (NULL == addPeriodicTxPtrnParams)
10939 {
10940 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10941 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10942 __func__);
10943
10944 return VOS_STATUS_E_NOMEM;
10945 }
10946
10947 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10948 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10949
10950 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10951 addPeriodicTxPtrnParams->pUserData = pWDA;
10952
10953 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10954
10955 if (WDI_STATUS_PENDING == wdiStatus)
10956 {
10957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10958 "Pending received for %s:%d", __func__, __LINE__ );
10959 }
10960 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10961 {
10962 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10963 "Failure in %s:%d", __func__, __LINE__ );
10964 }
10965
10966 vos_mem_free(addPeriodicTxPtrnParams);
10967
10968 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10969}
10970
10971/*
10972 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10973 *
10974 */
10975VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10976 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10977{
10978 WDI_Status wdiStatus;
10979 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10980
10981 delPeriodicTxPtrnParams =
10982 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10983
10984 if (NULL == delPeriodicTxPtrnParams)
10985 {
10986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10987 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10988 __func__);
10989
10990 return VOS_STATUS_E_NOMEM;
10991 }
10992
10993 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10994 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10995
10996 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10997 delPeriodicTxPtrnParams->pUserData = pWDA;
10998
10999 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11000
11001 if (WDI_STATUS_PENDING == wdiStatus)
11002 {
11003 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11004 "Pending received for %s:%d", __func__, __LINE__ );
11005 }
11006 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11007 {
11008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11009 "Failure in %s:%d", __func__, __LINE__ );
11010 }
11011
11012 vos_mem_free(delPeriodicTxPtrnParams);
11013
11014 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11015}
11016
Rajeev79dbe4c2013-10-05 11:03:42 +053011017#ifdef FEATURE_WLAN_BATCH_SCAN
11018/*
11019 * FUNCTION: WDA_ProcessStopBatchScanInd
11020 *
11021 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11022 *
11023 * PARAM:
11024 * pWDA: pointer to WDA context
11025 * pReq: pointer to stop batch scan request
11026 */
11027VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11028 tSirStopBatchScanInd *pReq)
11029{
11030 WDI_Status wdiStatus;
11031 WDI_StopBatchScanIndType wdiReq;
11032
11033 wdiReq.param = pReq->param;
11034
11035 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11036
11037 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11038 {
11039 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11040 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11041 }
11042
11043 vos_mem_free(pReq);
11044
11045 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11046}
11047/*==========================================================================
11048 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11049
11050 DESCRIPTION
11051 API to pull batch scan result from FW
11052
11053 PARAMETERS
11054 pWDA: Pointer to WDA context
11055 pGetBatchScanReq: Pointer to get batch scan result indication
11056
11057 RETURN VALUE
11058 NONE
11059
11060===========================================================================*/
11061VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11062 tSirTriggerBatchScanResultInd *pReq)
11063{
11064 WDI_Status wdiStatus;
11065 WDI_TriggerBatchScanResultIndType wdiReq;
11066
11067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11068 "------> %s " ,__func__);
11069
11070 wdiReq.param = pReq->param;
11071
11072 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11073
11074 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11075 {
11076 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11077 "Trigger batch scan result ind failed %s:%d",
11078 __func__, wdiStatus);
11079 }
11080
11081 vos_mem_free(pReq);
11082
11083 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11084}
11085
11086/*==========================================================================
11087 FUNCTION WDA_SetBatchScanRespCallback
11088
11089 DESCRIPTION
11090 API to process set batch scan response from FW
11091
11092 PARAMETERS
11093 pRsp: Pointer to set batch scan response
11094 pUserData: Pointer to user data
11095
11096 RETURN VALUE
11097 NONE
11098
11099===========================================================================*/
11100void WDA_SetBatchScanRespCallback
11101(
11102 WDI_SetBatchScanRspType *pRsp,
11103 void* pUserData
11104)
11105{
11106 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11107 tpAniSirGlobal pMac;
11108 void *pCallbackContext;
11109 tWDA_CbContext *pWDA = NULL ;
11110 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11111
11112
11113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11114 "<------ %s " ,__func__);
11115 if (NULL == pWdaParams)
11116 {
11117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11118 "%s: pWdaParams received NULL", __func__);
11119 VOS_ASSERT(0) ;
11120 return ;
11121 }
11122
11123 /*extract WDA context*/
11124 pWDA = pWdaParams->pWdaContext;
11125 if (NULL == pWDA)
11126 {
11127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11128 "%s:pWDA is NULL can't invole HDD callback",
11129 __func__);
11130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11131 vos_mem_free(pWdaParams->wdaMsgParam);
11132 vos_mem_free(pWdaParams);
11133 VOS_ASSERT(0);
11134 return;
11135 }
11136
11137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11138 vos_mem_free(pWdaParams->wdaMsgParam);
11139 vos_mem_free(pWdaParams);
11140
11141 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11142 if (NULL == pMac)
11143 {
11144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11145 "%s:pMac is NULL", __func__);
11146 VOS_ASSERT(0);
11147 return;
11148 }
11149
11150 pHddSetBatchScanRsp =
11151 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11152 if (NULL == pHddSetBatchScanRsp)
11153 {
11154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11155 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11156 VOS_ASSERT(0);
11157 return;
11158 }
11159
11160 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11161
11162 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11163 /*call hdd callback with set batch scan response data*/
11164 if(pMac->pmc.setBatchScanReqCallback)
11165 {
11166 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11167 }
11168 else
11169 {
11170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11171 "%s:HDD callback is null", __func__);
11172 VOS_ASSERT(0);
11173 }
11174
11175 vos_mem_free(pHddSetBatchScanRsp);
11176 return ;
11177}
11178
11179/*==========================================================================
11180 FUNCTION WDA_ProcessSetBatchScanReq
11181
11182 DESCRIPTION
11183 API to send set batch scan request to WDI
11184
11185 PARAMETERS
11186 pWDA: Pointer to WDA context
11187 pSetBatchScanReq: Pointer to set batch scan req
11188
11189 RETURN VALUE
11190 NONE
11191
11192===========================================================================*/
11193VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11194 tSirSetBatchScanReq *pSetBatchScanReq)
11195{
11196 WDI_Status status;
11197 tWDA_ReqParams *pWdaParams ;
11198 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11199
11200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11201 "------> %s " ,__func__);
11202
11203 pWdiSetBatchScanReq =
11204 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11205 if (NULL == pWdiSetBatchScanReq)
11206 {
11207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11208 "%s: VOS MEM Alloc Failure", __func__);
11209 vos_mem_free(pSetBatchScanReq);
11210 VOS_ASSERT(0);
11211 return VOS_STATUS_E_NOMEM;
11212 }
11213
11214 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11215 if (NULL == pWdaParams)
11216 {
11217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11218 "%s: VOS MEM Alloc Failure", __func__);
11219 VOS_ASSERT(0);
11220 vos_mem_free(pSetBatchScanReq);
11221 vos_mem_free(pWdiSetBatchScanReq);
11222 return VOS_STATUS_E_NOMEM;
11223 }
11224
11225 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11226 pWdiSetBatchScanReq->numberOfScansToBatch =
11227 pSetBatchScanReq->numberOfScansToBatch;
11228 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11229 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11230 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11231
11232 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11233 pWdaParams->pWdaContext = pWDA;
11234 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11235
11236 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11237 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11238 if (IS_WDI_STATUS_FAILURE(status))
11239 {
11240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11241 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11243 vos_mem_free(pWdaParams->wdaMsgParam);
11244 vos_mem_free(pWdaParams);
11245 }
11246 return CONVERT_WDI2VOS_STATUS(status);
11247}
11248
11249#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011250/*
11251 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11252 *
11253 * DESCRIPTION: This function sends start/update OBSS scan
11254 * inidcation message to WDI
11255 *
11256 * PARAM:
11257 * pWDA: pointer to WDA context
11258 * pReq: pointer to start OBSS scan request
11259 */
11260VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11261 tSirHT40OBSSScanInd *pReq)
11262{
11263 WDI_Status status;
11264 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11265 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011266
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11268 "------> %s " ,__func__);
11269 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11270 wdiOBSSScanParams.pUserData = pWDA;
11271
11272 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11273 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11274 pWdiOBSSScanInd->scanType = pReq->scanType;
11275 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11276 pReq->OBSSScanActiveDwellTime;
11277 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11278 pReq->OBSSScanPassiveDwellTime;
11279 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11280 pReq->BSSChannelWidthTriggerScanInterval;
11281 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11282 pReq->BSSWidthChannelTransitionDelayFactor;
11283 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11284 pReq->OBSSScanActiveTotalPerChannel;
11285 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11286 pReq->OBSSScanPassiveTotalPerChannel;
11287 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11288 pReq->OBSSScanActivityThreshold;
11289 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11290 vos_mem_copy(pWdiOBSSScanInd->channels,
11291 pReq->channels,
11292 pReq->channelCount);
11293 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11294 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11295 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11296 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11297 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11298
11299 vos_mem_copy(pWdiOBSSScanInd->ieField,
11300 pReq->ieField,
11301 pReq->ieFieldLen);
11302
11303 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11304 if (WDI_STATUS_PENDING == status)
11305 {
11306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11307 "Pending received for %s:%d ",__func__,__LINE__ );
11308 }
11309 else if (WDI_STATUS_SUCCESS_SYNC != status)
11310 {
11311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11312 "Failure in %s:%d ",__func__,__LINE__ );
11313 }
11314 return CONVERT_WDI2VOS_STATUS(status) ;
11315}
11316/*
11317 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11318 *
11319 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11320 *
11321 * PARAM:
11322 * pWDA: pointer to WDA context
11323 * pReq: pointer to stop batch scan request
11324 */
11325VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11326 tANI_U8 *bssIdx)
11327{
11328 WDI_Status status;
11329
11330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11331 "------> %s " ,__func__);
11332
11333 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11334 if (WDI_STATUS_PENDING == status)
11335 {
11336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11337 "Pending received for %s:%d ",__func__,__LINE__ );
11338 }
11339 else if (WDI_STATUS_SUCCESS_SYNC != status)
11340 {
11341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11342 "Failure in %s:%d ",__func__,__LINE__ );
11343 }
11344 return CONVERT_WDI2VOS_STATUS(status) ;
11345}
Yue Mab9c86f42013-08-14 15:59:08 -070011346/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011347 * FUNCTION: WDA_ProcessRateUpdateInd
11348 *
11349 */
11350VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11351 tSirRateUpdateInd *pRateUpdateParams)
11352{
11353 WDI_Status wdiStatus;
11354 WDI_RateUpdateIndParams rateUpdateParams;
11355
11356 vos_mem_copy(rateUpdateParams.bssid,
11357 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11358
11359 rateUpdateParams.ucastDataRateTxFlag =
11360 pRateUpdateParams->ucastDataRateTxFlag;
11361 rateUpdateParams.reliableMcastDataRateTxFlag =
11362 pRateUpdateParams->reliableMcastDataRateTxFlag;
11363 rateUpdateParams.mcastDataRate24GHzTxFlag =
11364 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11365 rateUpdateParams.mcastDataRate5GHzTxFlag =
11366 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11367
11368 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11369 rateUpdateParams.reliableMcastDataRate =
11370 pRateUpdateParams->reliableMcastDataRate;
11371 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11372 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11373
11374 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11375 rateUpdateParams.pUserData = pWDA;
11376
11377 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11378
11379 if (WDI_STATUS_PENDING == wdiStatus)
11380 {
11381 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11382 "Pending received for %s:%d", __func__, __LINE__ );
11383 }
11384 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11385 {
11386 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11387 "Failure in %s:%d", __func__, __LINE__ );
11388 }
11389
11390 vos_mem_free(pRateUpdateParams);
11391
11392 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11393}
11394
11395/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011396 * -------------------------------------------------------------------------
11397 * DATA interface with WDI for Mgmt Frames
11398 * -------------------------------------------------------------------------
11399 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011400/*
11401 * FUNCTION: WDA_TxComplete
11402 * Callback function for the WDA_TxPacket
11403 */
11404VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11405 VOS_STATUS status )
11406{
11407
11408 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11409 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011410 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011411
11412 if(NULL == wdaContext)
11413 {
11414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11415 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011416 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011417 VOS_ASSERT(0);
11418 return VOS_STATUS_E_FAILURE;
11419 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011420
11421 /*Check if frame was timed out or not*/
11422 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11423 (v_PVOID_t)&uUserData);
11424
11425 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11426 {
11427 /*Discard frame - no further processing is needed*/
11428 vos_pkt_return_packet(pData);
11429 return VOS_STATUS_SUCCESS;
11430 }
11431
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11433 if( NULL!=wdaContext->pTxCbFunc)
11434 {
11435 /*check if packet is freed already*/
11436 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
11437 {
11438 wdaContext->pTxCbFunc(pMac, pData);
11439 }
11440 else
11441 {
11442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011443 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011444 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 //Return from here since we reaching here because the packet already timeout
11446 return status;
11447 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011448 }
11449
11450 /*
11451 * Trigger the event to bring the HAL TL Tx complete function to come
11452 * out of wait
11453 * Let the coe above to complete the packet first. When this event is set,
11454 * the thread waiting for the event may run and set Vospacket_freed causing the original
11455 * packet not being freed.
11456 */
11457 status = vos_event_set(&wdaContext->txFrameEvent);
11458 if(!VOS_IS_STATUS_SUCCESS(status))
11459 {
11460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011461 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011462 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 return status;
11464}
Jeff Johnson295189b2012-06-20 16:38:30 -070011465/*
11466 * FUNCTION: WDA_TxPacket
11467 * Forward TX management frame to WDI
11468 */
11469VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11470 void *pFrmBuf,
11471 tANI_U16 frmLen,
11472 eFrameType frmType,
11473 eFrameTxDir txDir,
11474 tANI_U8 tid,
11475 pWDATxRxCompFunc pCompFunc,
11476 void *pData,
11477 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011478 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011479{
11480 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11481 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11482 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11483 tANI_U8 eventIdx = 0;
11484 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11485 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011486 if((NULL == pWDA)||(NULL == pFrmBuf))
11487 {
11488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011489 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011490 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 VOS_ASSERT(0);
11492 return VOS_STATUS_E_FAILURE;
11493 }
11494
11495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011496 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011497 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11498 if(NULL == pMac)
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011501 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 VOS_ASSERT(0);
11503 return VOS_STATUS_E_FAILURE;
11504 }
11505
11506
11507
11508 /* store the call back function in WDA context */
11509 pWDA->pTxCbFunc = pCompFunc;
11510 /* store the call back for the function of ackTxComplete */
11511 if( pAckTxComp )
11512 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011513 if( NULL != pWDA->pAckTxCbFunc )
11514 {
11515 /* Already TxComp is active no need to active again */
11516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011517 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011518 pWDA->pAckTxCbFunc( pMac, 0);
11519 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011520
Jeff Johnsone7245742012-09-05 17:12:55 -070011521 if( VOS_STATUS_SUCCESS !=
11522 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11523 {
11524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11525 "Tx Complete timeout Timer Stop Failed ");
11526 }
11527 else
11528 {
11529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011530 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011531 }
11532 }
11533
11534 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11535 pWDA->pAckTxCbFunc = pAckTxComp;
11536 if( VOS_STATUS_SUCCESS !=
11537 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11538 {
11539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11540 "Tx Complete Timer Start Failed ");
11541 pWDA->pAckTxCbFunc = NULL;
11542 return eHAL_STATUS_FAILURE;
11543 }
11544 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 /* Reset the event to be not signalled */
11546 status = vos_event_reset(&pWDA->txFrameEvent);
11547 if(!VOS_IS_STATUS_SUCCESS(status))
11548 {
11549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011550 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11552 if( pAckTxComp )
11553 {
11554 pWDA->pAckTxCbFunc = NULL;
11555 if( VOS_STATUS_SUCCESS !=
11556 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11557 {
11558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11559 "Tx Complete timeout Timer Stop Failed ");
11560 }
11561 }
11562 return VOS_STATUS_E_FAILURE;
11563 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011564
11565 /* If Peer Sta mask is set don't overwrite to self sta */
11566 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011567 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011568 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011570 else
11571 {
Ganesh K08bce952012-12-13 15:04:41 -080011572 /* Get system role, use the self station if in unknown role or STA role */
11573 systemRole = wdaGetGlobalSystemRole(pMac);
11574 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11575 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080011576#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011577 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011578#endif
Ganesh K08bce952012-12-13 15:04:41 -080011579 ))
11580 {
11581 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11582 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011583 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011584
Jeff Johnsone7245742012-09-05 17:12:55 -070011585 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11586 disassoc frame reaches the HW, HAL has already deleted the peer station */
11587 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011588 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011589 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011590 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011591 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011592 /*Send Probe request frames on self sta idx*/
11593 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011595 /* Since we donot want probe responses to be retried, send probe responses
11596 through the NO_ACK queues */
11597 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11598 {
11599 //probe response is sent out using self station and no retries options.
11600 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11601 }
11602 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11603 {
11604 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11605 }
11606 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011607 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
11608
11609 /*Set frame tag to 0
11610 We will use the WDA user data in order to tag a frame as expired*/
11611 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11612 (v_PVOID_t)0);
11613
11614
11615 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11616 frmLen, ucTypeSubType, tid,
11617 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011620 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
11622 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
11623 if( pAckTxComp )
11624 {
11625 pWDA->pAckTxCbFunc = NULL;
11626 if( VOS_STATUS_SUCCESS !=
11627 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11628 {
11629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11630 "Tx Complete timeout Timer Stop Failed ");
11631 }
11632 }
11633 return VOS_STATUS_E_FAILURE;
11634 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 /*
11636 * Wait for the event to be set by the TL, to get the response of TX
11637 * complete, this event should be set by the Callback function called by TL
11638 */
11639 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11640 &eventIdx);
11641 if(!VOS_IS_STATUS_SUCCESS(status))
11642 {
11643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11644 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011645 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011646 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11647 after the packet gets completed(packet freed once)*/
11648
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011649 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070011650 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011651
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011652 /*Tag Frame as timed out for later deletion*/
11653 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11654 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11655
Jeff Johnson295189b2012-06-20 16:38:30 -070011656 /* check whether the packet was freed already,so need not free again when
11657 * TL calls the WDA_Txcomplete routine
11658 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011659 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
11660 /*if(vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -070011661 {
11662 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011663 } */
11664
Jeff Johnson295189b2012-06-20 16:38:30 -070011665 if( pAckTxComp )
11666 {
11667 pWDA->pAckTxCbFunc = NULL;
11668 if( VOS_STATUS_SUCCESS !=
11669 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11670 {
11671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11672 "Tx Complete timeout Timer Stop Failed ");
11673 }
11674 }
11675 status = VOS_STATUS_E_FAILURE;
11676 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011677#ifdef WLAN_DUMP_MGMTFRAMES
11678 if (VOS_IS_STATUS_SUCCESS(status))
11679 {
11680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11681 "%s() TX packet : SubType %d", __func__,pFc->subType);
11682 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11683 pData, frmLen);
11684 }
11685#endif
11686
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080011687 if (VOS_IS_STATUS_SUCCESS(status))
11688 {
11689 if (pMac->fEnableDebugLog & 0x1)
11690 {
11691 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
11692 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
11693 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
11694 {
11695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
11696 pFc->type, pFc->subType);
11697 }
11698 }
11699 }
11700
11701
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 return status;
11703}
Jeff Johnson295189b2012-06-20 16:38:30 -070011704/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011705 * FUNCTION: WDA_ProcessDHCPStartInd
11706 * Forward DHCP Start to WDI
11707 */
11708static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11709 tAniDHCPInd *dhcpStartInd)
11710{
11711 WDI_Status status;
11712 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11713 if (NULL == wdiDHCPInd)
11714 {
11715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11716 "%s: VOS MEM Alloc Failure", __func__);
11717 VOS_ASSERT(0);
11718 vos_mem_free(dhcpStartInd);
11719 return VOS_STATUS_E_NOMEM;
11720 }
11721
11722 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
11723 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
11724 sizeof(tSirMacAddr));
11725
11726 status = WDI_dhcpStartInd(wdiDHCPInd);
11727
11728 if (IS_WDI_STATUS_FAILURE(status))
11729 {
11730 vos_mem_free(wdiDHCPInd);
11731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11732 "DHCP Start Indication failed");
11733 }
11734 vos_mem_free(dhcpStartInd);
11735 return CONVERT_WDI2VOS_STATUS(status) ;
11736}
11737
11738 /*
11739 * FUNCTION: WDA_ProcessDHCPStopInd
11740 * Forward DHCP Stop to WDI
11741 */
11742 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11743 tAniDHCPInd *dhcpStopInd)
11744 {
11745 WDI_Status status;
11746 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11747 if (NULL == wdiDHCPInd)
11748 {
11749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11750 "%s: VOS MEM Alloc Failure", __func__);
11751 VOS_ASSERT(0);
11752 vos_mem_free(dhcpStopInd);
11753 return VOS_STATUS_E_NOMEM;
11754 }
11755 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
11756 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11757 status = WDI_dhcpStopInd(wdiDHCPInd);
11758 if (IS_WDI_STATUS_FAILURE(status))
11759 {
11760 vos_mem_free(wdiDHCPInd);
11761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11762 "DHCP Start Indication failed");
11763 }
11764 vos_mem_free(dhcpStopInd);
11765 return CONVERT_WDI2VOS_STATUS(status) ;
11766 }
11767
11768/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011769 * FUNCTION: WDA_McProcessMsg
11770 * Trigger DAL-AL to start CFG download
11771 */
11772VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11773{
11774 VOS_STATUS status = VOS_STATUS_SUCCESS;
11775 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011776 if(NULL == pMsg)
11777 {
11778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011779 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011780 VOS_ASSERT(0);
11781 return VOS_STATUS_E_FAILURE;
11782 }
11783
11784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011785 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011786
11787 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11788 if(NULL == pWDA )
11789 {
11790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011791 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011792 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011793 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011794 return VOS_STATUS_E_FAILURE;
11795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011796 /* Process all the WDA messages.. */
11797 switch( pMsg->type )
11798 {
11799 case WNI_CFG_DNLD_REQ:
11800 {
11801 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011802 /* call WDA complete event if config download success */
11803 if( VOS_IS_STATUS_SUCCESS(status) )
11804 {
11805 vos_WDAComplete_cback(pVosContext);
11806 }
11807 else
11808 {
11809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11810 "WDA Config Download failure" );
11811 }
11812 break ;
11813 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011814 /*
11815 * Init SCAN request from PE, convert it into DAL format
11816 * and send it to DAL
11817 */
11818 case WDA_INIT_SCAN_REQ:
11819 {
11820 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11821 break ;
11822 }
11823 /* start SCAN request from PE */
11824 case WDA_START_SCAN_REQ:
11825 {
11826 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11827 break ;
11828 }
11829 /* end SCAN request from PE */
11830 case WDA_END_SCAN_REQ:
11831 {
11832 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11833 break ;
11834 }
11835 /* end SCAN request from PE */
11836 case WDA_FINISH_SCAN_REQ:
11837 {
11838 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11839 break ;
11840 }
11841 /* join request from PE */
11842 case WDA_CHNL_SWITCH_REQ:
11843 {
11844 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11845 {
11846 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11847 }
11848 else
11849 {
11850 WDA_ProcessChannelSwitchReq(pWDA,
11851 (tSwitchChannelParams*)pMsg->bodyptr) ;
11852 }
11853 break ;
11854 }
11855 /* ADD BSS request from PE */
11856 case WDA_ADD_BSS_REQ:
11857 {
11858 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11859 break ;
11860 }
11861 case WDA_ADD_STA_REQ:
11862 {
11863 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11864 break ;
11865 }
11866 case WDA_DELETE_BSS_REQ:
11867 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011868 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11869 break ;
11870 }
11871 case WDA_DELETE_STA_REQ:
11872 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11874 break ;
11875 }
11876 case WDA_CONFIG_PARAM_UPDATE_REQ:
11877 {
11878 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11879 break ;
11880 }
11881 case WDA_SET_BSSKEY_REQ:
11882 {
11883 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11884 break ;
11885 }
11886 case WDA_SET_STAKEY_REQ:
11887 {
11888 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11889 break ;
11890 }
11891 case WDA_SET_STA_BCASTKEY_REQ:
11892 {
11893 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11894 break ;
11895 }
11896 case WDA_REMOVE_BSSKEY_REQ:
11897 {
11898 WDA_ProcessRemoveBssKeyReq(pWDA,
11899 (tRemoveBssKeyParams *)pMsg->bodyptr);
11900 break ;
11901 }
11902 case WDA_REMOVE_STAKEY_REQ:
11903 {
11904 WDA_ProcessRemoveStaKeyReq(pWDA,
11905 (tRemoveStaKeyParams *)pMsg->bodyptr);
11906 break ;
11907 }
11908 case WDA_REMOVE_STA_BCASTKEY_REQ:
11909 {
11910 /* TODO: currently UMAC is not sending this request, Add the code for
11911 handling this request when UMAC supports */
11912 break;
11913 }
11914#ifdef FEATURE_WLAN_CCX
11915 case WDA_TSM_STATS_REQ:
11916 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011917 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 break;
11919 }
11920#endif
11921 case WDA_UPDATE_EDCA_PROFILE_IND:
11922 {
11923 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11924 break;
11925 }
11926 case WDA_ADD_TS_REQ:
11927 {
11928 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11929 break;
11930 }
11931 case WDA_DEL_TS_REQ:
11932 {
11933 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11934 break;
11935 }
11936 case WDA_ADDBA_REQ:
11937 {
11938 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11939 break;
11940 }
11941 case WDA_DELBA_IND:
11942 {
11943 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11944 break;
11945 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080011946 case WDA_UPDATE_CHAN_LIST_REQ:
11947 {
11948 WDA_ProcessUpdateChannelList(pWDA,
11949 (tSirUpdateChanList *)pMsg->bodyptr);
11950 break;
11951 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 case WDA_SET_LINK_STATE:
11953 {
11954 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11955 break;
11956 }
11957 case WDA_GET_STATISTICS_REQ:
11958 {
11959 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11960 break;
11961 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011962#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11963 case WDA_GET_ROAM_RSSI_REQ:
11964 {
11965 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11966 break;
11967 }
11968#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011969 case WDA_PWR_SAVE_CFG:
11970 {
11971 if(pWDA->wdaState == WDA_READY_STATE)
11972 {
11973 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11974 }
11975 else
11976 {
11977 if(NULL != pMsg->bodyptr)
11978 {
11979 vos_mem_free(pMsg->bodyptr);
11980 }
11981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11982 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11983 }
11984 break;
11985 }
11986 case WDA_ENTER_IMPS_REQ:
11987 {
11988 if(pWDA->wdaState == WDA_READY_STATE)
11989 {
11990 WDA_ProcessEnterImpsReq(pWDA);
11991 }
11992 else
11993 {
11994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11995 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11996 }
11997 break;
11998 }
11999 case WDA_EXIT_IMPS_REQ:
12000 {
12001 if(pWDA->wdaState == WDA_READY_STATE)
12002 {
12003 WDA_ProcessExitImpsReq(pWDA);
12004 }
12005 else
12006 {
12007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12008 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12009 }
12010 break;
12011 }
12012 case WDA_ENTER_BMPS_REQ:
12013 {
12014 if(pWDA->wdaState == WDA_READY_STATE)
12015 {
12016 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12017 }
12018 else
12019 {
12020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12021 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12022 }
12023 break;
12024 }
12025 case WDA_EXIT_BMPS_REQ:
12026 {
12027 if(pWDA->wdaState == WDA_READY_STATE)
12028 {
12029 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12030 }
12031 else
12032 {
12033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12034 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12035 }
12036 break;
12037 }
12038 case WDA_ENTER_UAPSD_REQ:
12039 {
12040 if(pWDA->wdaState == WDA_READY_STATE)
12041 {
12042 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12043 }
12044 else
12045 {
12046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12047 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12048 }
12049 break;
12050 }
12051 case WDA_EXIT_UAPSD_REQ:
12052 {
12053 if(pWDA->wdaState == WDA_READY_STATE)
12054 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012055 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 }
12057 else
12058 {
12059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12060 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12061 }
12062 break;
12063 }
12064 case WDA_UPDATE_UAPSD_IND:
12065 {
12066 if(pWDA->wdaState == WDA_READY_STATE)
12067 {
12068 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12069 }
12070 else
12071 {
12072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12073 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12074 }
12075 break;
12076 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 case WDA_REGISTER_PE_CALLBACK :
12078 {
12079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12080 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12081 /*TODO: store the PE callback */
12082 /* Do Nothing? MSG Body should be freed at here */
12083 if(NULL != pMsg->bodyptr)
12084 {
12085 vos_mem_free(pMsg->bodyptr);
12086 }
12087 break;
12088 }
12089 case WDA_SYS_READY_IND :
12090 {
12091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12092 "Handling msg type WDA_SYS_READY_IND " );
12093 pWDA->wdaState = WDA_READY_STATE;
12094 if(NULL != pMsg->bodyptr)
12095 {
12096 vos_mem_free(pMsg->bodyptr);
12097 }
12098 break;
12099 }
12100 case WDA_BEACON_FILTER_IND :
12101 {
12102 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12103 break;
12104 }
12105 case WDA_BTC_SET_CFG:
12106 {
12107 /*TODO: handle this while dealing with BTC */
12108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12109 "Handling msg type WDA_BTC_SET_CFG " );
12110 /* Do Nothing? MSG Body should be freed at here */
12111 if(NULL != pMsg->bodyptr)
12112 {
12113 vos_mem_free(pMsg->bodyptr);
12114 }
12115 break;
12116 }
12117 case WDA_SIGNAL_BT_EVENT:
12118 {
12119 /*TODO: handle this while dealing with BTC */
12120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12121 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12122 /* Do Nothing? MSG Body should be freed at here */
12123 if(NULL != pMsg->bodyptr)
12124 {
12125 vos_mem_free(pMsg->bodyptr);
12126 }
12127 break;
12128 }
12129 case WDA_CFG_RXP_FILTER_REQ:
12130 {
12131 WDA_ProcessConfigureRxpFilterReq(pWDA,
12132 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12133 break;
12134 }
12135 case WDA_SET_HOST_OFFLOAD:
12136 {
12137 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12138 break;
12139 }
12140 case WDA_SET_KEEP_ALIVE:
12141 {
12142 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12143 break;
12144 }
12145#ifdef WLAN_NS_OFFLOAD
12146 case WDA_SET_NS_OFFLOAD:
12147 {
12148 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12149 break;
12150 }
12151#endif //WLAN_NS_OFFLOAD
12152 case WDA_ADD_STA_SELF_REQ:
12153 {
12154 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12155 break;
12156 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012157 case WDA_DEL_STA_SELF_REQ:
12158 {
12159 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12160 break;
12161 }
12162 case WDA_WOWL_ADD_BCAST_PTRN:
12163 {
12164 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12165 break;
12166 }
12167 case WDA_WOWL_DEL_BCAST_PTRN:
12168 {
12169 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12170 break;
12171 }
12172 case WDA_WOWL_ENTER_REQ:
12173 {
12174 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12175 break;
12176 }
12177 case WDA_WOWL_EXIT_REQ:
12178 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012179 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012180 break;
12181 }
12182 case WDA_TL_FLUSH_AC_REQ:
12183 {
12184 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12185 break;
12186 }
12187 case WDA_SIGNAL_BTAMP_EVENT:
12188 {
12189 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12190 break;
12191 }
12192#ifdef WDA_UT
12193 case WDA_WDI_EVENT_MSG:
12194 {
12195 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12196 break ;
12197 }
12198#endif
12199 case WDA_UPDATE_BEACON_IND:
12200 {
12201 WDA_ProcessUpdateBeaconParams(pWDA,
12202 (tUpdateBeaconParams *)pMsg->bodyptr);
12203 break;
12204 }
12205 case WDA_SEND_BEACON_REQ:
12206 {
12207 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12208 break;
12209 }
12210 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12211 {
12212 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12213 (tSendProbeRespParams *)pMsg->bodyptr);
12214 break;
12215 }
12216#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
12217 case WDA_SET_MAX_TX_POWER_REQ:
12218 {
12219 WDA_ProcessSetMaxTxPowerReq(pWDA,
12220 (tMaxTxPowerParams *)pMsg->bodyptr);
12221 break;
12222 }
12223#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012224 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12225 {
12226 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12227 pMsg->bodyptr);
12228 break;
12229 }
schang86c22c42013-03-13 18:41:24 -070012230 case WDA_SET_TX_POWER_REQ:
12231 {
12232 WDA_ProcessSetTxPowerReq(pWDA,
12233 (tSirSetTxPowerReq *)pMsg->bodyptr);
12234 break;
12235 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012236 case WDA_SET_P2P_GO_NOA_REQ:
12237 {
12238 WDA_ProcessSetP2PGONOAReq(pWDA,
12239 (tP2pPsParams *)pMsg->bodyptr);
12240 break;
12241 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012242 /* timer related messages */
12243 case WDA_TIMER_BA_ACTIVITY_REQ:
12244 {
12245 WDA_BaCheckActivity(pWDA) ;
12246 break ;
12247 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012248
12249 /* timer related messages */
12250 case WDA_TIMER_TRAFFIC_STATS_IND:
12251 {
12252 WDA_TimerTrafficStatsInd(pWDA);
12253 break;
12254 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012255#ifdef WLAN_FEATURE_VOWIFI_11R
12256 case WDA_AGGR_QOS_REQ:
12257 {
12258 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12259 break;
12260 }
12261#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012262 case WDA_FTM_CMD_REQ:
12263 {
12264 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12265 break ;
12266 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012267#ifdef FEATURE_OEM_DATA_SUPPORT
12268 case WDA_START_OEM_DATA_REQ:
12269 {
12270 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12271 break;
12272 }
12273#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012274 /* Tx Complete Time out Indication */
12275 case WDA_TX_COMPLETE_TIMEOUT_IND:
12276 {
12277 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12278 break;
12279 }
12280 case WDA_WLAN_SUSPEND_IND:
12281 {
12282 WDA_ProcessWlanSuspendInd(pWDA,
12283 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12284 break;
12285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012286 case WDA_WLAN_RESUME_REQ:
12287 {
12288 WDA_ProcessWlanResumeReq(pWDA,
12289 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12290 break;
12291 }
12292
12293 case WDA_UPDATE_CF_IND:
12294 {
12295 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12296 pMsg->bodyptr = NULL;
12297 break;
12298 }
12299#ifdef FEATURE_WLAN_SCAN_PNO
12300 case WDA_SET_PNO_REQ:
12301 {
12302 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12303 break;
12304 }
12305 case WDA_UPDATE_SCAN_PARAMS_REQ:
12306 {
12307 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12308 break;
12309 }
12310 case WDA_SET_RSSI_FILTER_REQ:
12311 {
12312 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12313 break;
12314 }
12315#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012316#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012317 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012318 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012319 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012320 break;
12321 }
12322#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012323 case WDA_SET_TX_PER_TRACKING_REQ:
12324 {
12325 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12326 break;
12327 }
12328
12329#ifdef WLAN_FEATURE_PACKET_FILTERING
12330 case WDA_8023_MULTICAST_LIST_REQ:
12331 {
12332 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12333 break;
12334 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012335 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12336 {
12337 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12338 break;
12339 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012340 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12341 {
12342 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12343 break;
12344 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012345 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12346 {
12347 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12348 break;
12349 }
12350#endif // WLAN_FEATURE_PACKET_FILTERING
12351
12352
12353 case WDA_TRANSMISSION_CONTROL_IND:
12354 {
12355 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12356 break;
12357 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012358 case WDA_SET_POWER_PARAMS_REQ:
12359 {
12360 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12361 break;
12362 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012363#ifdef WLAN_FEATURE_GTK_OFFLOAD
12364 case WDA_GTK_OFFLOAD_REQ:
12365 {
12366 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12367 break;
12368 }
12369
12370 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12371 {
12372 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12373 break;
12374 }
12375#endif //WLAN_FEATURE_GTK_OFFLOAD
12376
12377 case WDA_SET_TM_LEVEL_REQ:
12378 {
12379 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12380 break;
12381 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012382
Mohit Khanna4a70d262012-09-11 16:30:12 -070012383 case WDA_UPDATE_OP_MODE:
12384 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012385 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12386 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12387 {
12388 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12389 }
12390 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012391 {
12392 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12393 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12394 else
12395 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012396 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012397 }
12398 else
12399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012400 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012401 break;
12402 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012403#ifdef WLAN_FEATURE_11W
12404 case WDA_EXCLUDE_UNENCRYPTED_IND:
12405 {
12406 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12407 break;
12408 }
12409#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012410#ifdef FEATURE_WLAN_TDLS
12411 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12412 {
12413 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12414 break;
12415 }
12416#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012417 case WDA_DHCP_START_IND:
12418 {
12419 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12420 break;
12421 }
12422 case WDA_DHCP_STOP_IND:
12423 {
12424 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12425 break;
12426 }
Leo Chang9056f462013-08-01 19:21:11 -070012427#ifdef FEATURE_WLAN_LPHB
12428 case WDA_LPHB_CONF_REQ:
12429 {
12430 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12431 break;
12432 }
12433#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012434 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12435 {
12436 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12437 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12438 break;
12439 }
12440 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12441 {
12442 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12443 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12444 break;
12445 }
12446
Rajeev79dbe4c2013-10-05 11:03:42 +053012447#ifdef FEATURE_WLAN_BATCH_SCAN
12448 case WDA_SET_BATCH_SCAN_REQ:
12449 {
12450 WDA_ProcessSetBatchScanReq(pWDA,
12451 (tSirSetBatchScanReq *)pMsg->bodyptr);
12452 break;
12453 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012454 case WDA_RATE_UPDATE_IND:
12455 {
12456 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12457 break;
12458 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012459 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12460 {
12461 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12462 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12463 break;
12464 }
12465 case WDA_STOP_BATCH_SCAN_IND:
12466 {
12467 WDA_ProcessStopBatchScanInd(pWDA,
12468 (tSirStopBatchScanInd *)pMsg->bodyptr);
12469 break;
12470 }
12471#endif
12472
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012473 case WDA_HT40_OBSS_SCAN_IND:
12474 {
12475 WDA_ProcessHT40OBSSScanInd(pWDA,
12476 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12477 break;
12478 }
12479 case WDA_HT40_OBSS_STOP_SCAN_IND:
12480 {
12481 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12482 (tANI_U8*)pMsg->bodyptr);
12483 break;
12484 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012485 default:
12486 {
12487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12488 "No Handling for msg type %x in WDA "
12489 ,pMsg->type);
12490 /* Do Nothing? MSG Body should be freed at here */
12491 if(NULL != pMsg->bodyptr)
12492 {
12493 vos_mem_free(pMsg->bodyptr);
12494 }
12495 //WDA_VOS_ASSERT(0) ;
12496 }
12497 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 return status ;
12499}
12500
Jeff Johnson295189b2012-06-20 16:38:30 -070012501/*
12502 * FUNCTION: WDA_LowLevelIndCallback
12503 * IND API callback from WDI, send Ind to PE
12504 */
12505void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12506 void* pUserData )
12507{
12508 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12509#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12510 tSirRSSINotification rssiNotification;
12511#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012512 if(NULL == pWDA)
12513 {
12514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012515 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012516 VOS_ASSERT(0);
12517 return ;
12518 }
12519
12520 switch(wdiLowLevelInd->wdiIndicationType)
12521 {
12522 case WDI_RSSI_NOTIFICATION_IND:
12523 {
12524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12525 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012526#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12527 rssiNotification.bReserved =
12528 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12529 rssiNotification.bRssiThres1NegCross =
12530 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12531 rssiNotification.bRssiThres1PosCross =
12532 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12533 rssiNotification.bRssiThres2NegCross =
12534 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12535 rssiNotification.bRssiThres2PosCross =
12536 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12537 rssiNotification.bRssiThres3NegCross =
12538 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12539 rssiNotification.bRssiThres3PosCross =
12540 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012541 rssiNotification.avgRssi = (v_S7_t)
12542 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012543 WLANTL_BMPSRSSIRegionChangedNotification(
12544 pWDA->pVosContext,
12545 &rssiNotification);
12546#endif
12547 break ;
12548 }
12549 case WDI_MISSED_BEACON_IND:
12550 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012551 tpSirSmeMissedBeaconInd pMissBeacInd =
12552 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12554 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012555 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012556 if(NULL == pMissBeacInd)
12557 {
12558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12559 "%s: VOS MEM Alloc Failure", __func__);
12560 break;
12561 }
12562 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12563 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12564 pMissBeacInd->bssIdx =
12565 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12566 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012567 break ;
12568 }
12569 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12570 {
12571 /* TODO: Decode Ind and send Ind to PE */
12572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12573 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12574 break ;
12575 }
12576
12577 case WDI_MIC_FAILURE_IND:
12578 {
12579 tpSirSmeMicFailureInd pMicInd =
12580 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12581
12582 if(NULL == pMicInd)
12583 {
12584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012586 break;
12587 }
12588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12589 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012590 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12591 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12592 vos_mem_copy(pMicInd->bssId,
12593 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12594 sizeof(tSirMacAddr));
12595 vos_mem_copy(pMicInd->info.srcMacAddr,
12596 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12597 sizeof(tSirMacAddr));
12598 vos_mem_copy(pMicInd->info.taMacAddr,
12599 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12600 sizeof(tSirMacAddr));
12601 vos_mem_copy(pMicInd->info.dstMacAddr,
12602 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12603 sizeof(tSirMacAddr));
12604 vos_mem_copy(pMicInd->info.rxMacAddr,
12605 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12606 sizeof(tSirMacAddr));
12607 pMicInd->info.multicast =
12608 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12609 pMicInd->info.keyId=
12610 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12611 pMicInd->info.IV1=
12612 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12613 vos_mem_copy(pMicInd->info.TSC,
12614 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012615 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12616 (void *)pMicInd , 0) ;
12617 break ;
12618 }
12619 case WDI_FATAL_ERROR_IND:
12620 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012621 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012622 /* TODO: Decode Ind and send Ind to PE */
12623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12624 "Received WDI_FATAL_ERROR_IND from WDI ");
12625 break ;
12626 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012627 case WDI_DEL_STA_IND:
12628 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012629 tpDeleteStaContext pDelSTACtx =
12630 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12631
12632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12633 "Received WDI_DEL_STA_IND from WDI ");
12634 if(NULL == pDelSTACtx)
12635 {
12636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012638 break;
12639 }
12640 vos_mem_copy(pDelSTACtx->addr2,
12641 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12642 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012643 vos_mem_copy(pDelSTACtx->bssId,
12644 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12645 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012646 pDelSTACtx->assocId =
12647 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12648 pDelSTACtx->reasonCode =
12649 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12650 pDelSTACtx->staId =
12651 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012652 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12653 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012654 break ;
12655 }
12656 case WDI_COEX_IND:
12657 {
12658 tANI_U32 index;
12659 vos_msg_t vosMsg;
12660 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12661 if(NULL == pSmeCoexInd)
12662 {
12663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012664 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 break;
12666 }
12667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12668 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012669 /* Message Header */
12670 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12671 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012672 /* Info from WDI Indication */
12673 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12674 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12675 {
12676 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12677 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012678 /* VOS message wrapper */
12679 vosMsg.type = eWNI_SME_COEX_IND;
12680 vosMsg.bodyptr = (void *)pSmeCoexInd;
12681 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012682 /* Send message to SME */
12683 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12684 {
12685 /* free the mem and return */
12686 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12687 }
12688 else
12689 {
12690 /* DEBUG */
12691 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12692 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12693 pSmeCoexInd->coexIndType,
12694 pSmeCoexInd->coexIndData[0],
12695 pSmeCoexInd->coexIndData[1],
12696 pSmeCoexInd->coexIndData[2],
12697 pSmeCoexInd->coexIndData[3]);
12698 }
12699 break;
12700 }
12701 case WDI_TX_COMPLETE_IND:
12702 {
12703 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12704 /* Calling TxCompleteAck Indication from wda context*/
12705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12706 "Complete Indication received from HAL");
12707 if( pWDA->pAckTxCbFunc )
12708 {
12709 if( VOS_STATUS_SUCCESS !=
12710 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12711 {
12712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12713 "Tx Complete timeout Timer Stop Failed ");
12714 }
12715 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12716 pWDA->pAckTxCbFunc = NULL;
12717 }
12718 else
12719 {
12720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12721 "Tx Complete Indication is received after timeout ");
12722 }
12723 break;
12724 }
Viral Modid86bde22012-12-10 13:09:21 -080012725 case WDI_P2P_NOA_START_IND :
12726 {
12727 tSirP2PNoaStart *pP2pNoaStart =
12728 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12729
12730 if (NULL == pP2pNoaStart)
12731 {
12732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12733 "Memory allocation failure, "
12734 "WDI_P2P_NOA_START_IND not forwarded");
12735 break;
12736 }
12737 pP2pNoaStart->status =
12738 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12739 pP2pNoaStart->bssIdx =
12740 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12741 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12742 (void *)pP2pNoaStart , 0) ;
12743 break;
12744 }
12745
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012746#ifdef FEATURE_WLAN_TDLS
12747 case WDI_TDLS_IND :
12748 {
12749 tSirTdlsInd *pTdlsInd =
12750 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12751
12752 if (NULL == pTdlsInd)
12753 {
12754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12755 "Memory allocation failure, "
12756 "WDI_TDLS_IND not forwarded");
12757 break;
12758 }
12759 pTdlsInd->status =
12760 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12761 pTdlsInd->assocId =
12762 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12763 pTdlsInd->staIdx =
12764 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12765 pTdlsInd->reasonCode =
12766 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12767 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12768 (void *)pTdlsInd , 0) ;
12769 break;
12770 }
12771#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012772 case WDI_P2P_NOA_ATTR_IND :
12773 {
12774 tSirP2PNoaAttr *pP2pNoaAttr =
12775 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12777 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012778 if (NULL == pP2pNoaAttr)
12779 {
12780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12781 "Memory allocation failure, "
12782 "WDI_P2P_NOA_ATTR_IND not forwarded");
12783 break;
12784 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012785 pP2pNoaAttr->index =
12786 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12787 pP2pNoaAttr->oppPsFlag =
12788 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12789 pP2pNoaAttr->ctWin =
12790 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12791
12792 pP2pNoaAttr->uNoa1IntervalCnt =
12793 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12794 pP2pNoaAttr->uNoa1Duration =
12795 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12796 pP2pNoaAttr->uNoa1Interval =
12797 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12798 pP2pNoaAttr->uNoa1StartTime =
12799 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012800 pP2pNoaAttr->uNoa2IntervalCnt =
12801 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12802 pP2pNoaAttr->uNoa2Duration =
12803 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12804 pP2pNoaAttr->uNoa2Interval =
12805 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12806 pP2pNoaAttr->uNoa2StartTime =
12807 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012808 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12809 (void *)pP2pNoaAttr , 0) ;
12810 break;
12811 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012812#ifdef FEATURE_WLAN_SCAN_PNO
12813 case WDI_PREF_NETWORK_FOUND_IND:
12814 {
12815 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012816 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12817 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12818 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12819 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12820
Jeff Johnson295189b2012-06-20 16:38:30 -070012821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12822 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012823 if (NULL == pPrefNetworkFoundInd)
12824 {
12825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12826 "Memory allocation failure, "
12827 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012828 if (NULL !=
12829 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12830 {
12831 wpalMemoryFree(
12832 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12833 );
12834 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12835 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012836 break;
12837 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012838 /* Message Header */
12839 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012840 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012841
12842 /* Info from WDI Indication */
12843 pPrefNetworkFoundInd->ssId.length =
12844 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012845 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012846 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12847 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12848 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012849 if (NULL !=
12850 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12851 {
12852 pPrefNetworkFoundInd->frameLength =
12853 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12854 vos_mem_copy( pPrefNetworkFoundInd->data,
12855 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12856 pPrefNetworkFoundInd->frameLength);
12857 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12858 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12859 }
12860 else
12861 {
12862 pPrefNetworkFoundInd->frameLength = 0;
12863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012864 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012865 /* VOS message wrapper */
12866 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12867 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12868 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012869 /* Send message to SME */
12870 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12871 {
12872 /* free the mem and return */
12873 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012875 break;
12876 }
12877#endif // FEATURE_WLAN_SCAN_PNO
12878
12879#ifdef WLAN_WAKEUP_EVENTS
12880 case WDI_WAKE_REASON_IND:
12881 {
12882 vos_msg_t vosMsg;
12883 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12884 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12885 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12886
12887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12888 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12889 wdiLowLevelInd->wdiIndicationType,
12890 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12891 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12892 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12893
12894 if (NULL == pWakeReasonInd)
12895 {
12896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12897 "Memory allocation failure, "
12898 "WDI_WAKE_REASON_IND not forwarded");
12899 break;
12900 }
12901
12902 vos_mem_zero(pWakeReasonInd, allocSize);
12903
12904 /* Message Header */
12905 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12906 pWakeReasonInd->mesgLen = allocSize;
12907
12908 /* Info from WDI Indication */
12909 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12910 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12911 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12912 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12913 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12914 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12915 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12916 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12917
12918 /* VOS message wrapper */
12919 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12920 vosMsg.bodyptr = (void *) pWakeReasonInd;
12921 vosMsg.bodyval = 0;
12922
12923 /* Send message to SME */
12924 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12925 {
12926 /* free the mem and return */
12927 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12928 }
12929
12930 break;
12931 }
12932#endif // WLAN_WAKEUP_EVENTS
12933
12934 case WDI_TX_PER_HIT_IND:
12935 {
12936 vos_msg_t vosMsg;
12937 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12938 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12939 /* VOS message wrapper */
12940 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12941 vosMsg.bodyptr = NULL;
12942 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012943 /* Send message to SME */
12944 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12945 {
12946 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12947 }
12948 break;
12949 }
12950
Leo Chang9056f462013-08-01 19:21:11 -070012951#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012952 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012953 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012954 vos_msg_t vosMsg;
12955 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012956
Leo Changd9df8aa2013-09-26 13:32:26 -070012957 lphbInd =
12958 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12959 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012960 {
12961 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12962 "%s: LPHB IND buffer alloc Fail", __func__);
12963 return ;
12964 }
12965
Leo Changd9df8aa2013-09-26 13:32:26 -070012966 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012967 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012968 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012969 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012970 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012971 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12972
12973 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012974 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012975 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12976
Leo Changd9df8aa2013-09-26 13:32:26 -070012977 vosMsg.type = eWNI_SME_LPHB_IND;
12978 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012979 vosMsg.bodyval = 0;
12980 /* Send message to SME */
12981 if (VOS_STATUS_SUCCESS !=
12982 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12983 {
12984 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12985 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012986 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012987 }
12988 break;
12989 }
12990#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070012991 case WDI_PERIODIC_TX_PTRN_FW_IND:
12992 {
12993 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12994 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
12995 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
12996 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
12997 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
12998 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
12999 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13000
13001 break;
13002 }
Leo Chang9056f462013-08-01 19:21:11 -070013003
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013004 case WDI_IBSS_PEER_INACTIVITY_IND:
13005 {
13006 tSirIbssPeerInactivityInd *pIbssInd =
13007 (tSirIbssPeerInactivityInd *)
13008 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13009
13010 if (NULL == pIbssInd)
13011 {
13012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13013 "Memory allocation failure, "
13014 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13015 break;
13016 }
13017
13018 pIbssInd->bssIdx =
13019 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13020 pIbssInd->staIdx =
13021 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13022 vos_mem_copy(pIbssInd->peerAddr,
13023 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13024 sizeof(tSirMacAddr));
13025 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13026 break;
13027 }
13028
Rajeev79dbe4c2013-10-05 11:03:42 +053013029#ifdef FEATURE_WLAN_BATCH_SCAN
13030 case WDI_BATCH_SCAN_RESULT_IND:
13031 {
13032 void *pBatchScanResult;
13033 void *pCallbackContext;
13034 tpAniSirGlobal pMac;
13035
13036 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13037 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13038
13039 /*sanity check*/
13040 if(NULL == pWDA)
13041 {
13042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13043 "%s:pWDA is NULL", __func__);
13044 VOS_ASSERT(0);
13045 return;
13046 }
13047
13048 pBatchScanResult =
13049 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13050 if (NULL == pBatchScanResult)
13051 {
13052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13053 "%s:Batch scan result from FW is null can't invoke HDD callback",
13054 __func__);
13055 VOS_ASSERT(0);
13056 return;
13057 }
13058
13059 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13060 if (NULL == pMac)
13061 {
13062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13063 "%s:pMac is NULL", __func__);
13064 VOS_ASSERT(0);
13065 return;
13066 }
13067
13068 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13069 /*call hdd callback with set batch scan response data*/
13070 if(pMac->pmc.batchScanResultCallback)
13071 {
13072 pMac->pmc.batchScanResultCallback(pCallbackContext,
13073 pBatchScanResult);
13074 }
13075 else
13076 {
13077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13078 "%s:HDD callback is null", __func__);
13079 VOS_ASSERT(0);
13080 }
13081 break;
13082 }
13083#endif
13084
Leo Chang0b0e45a2013-12-15 15:18:55 -080013085#ifdef FEATURE_WLAN_CH_AVOID
13086 case WDI_CH_AVOID_IND:
13087 {
13088 vos_msg_t vosMsg;
13089 tSirChAvoidIndType *chAvoidInd;
13090
13091 chAvoidInd =
13092 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13093 if (NULL == chAvoidInd)
13094 {
13095 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13096 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13097 return ;
13098 }
13099
13100 chAvoidInd->avoidRangeCount =
13101 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13102 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13103 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13104 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13105
13106 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13107 "%s : WDA CH avoid notification", __func__);
13108
13109 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13110 vosMsg.bodyptr = chAvoidInd;
13111 vosMsg.bodyval = 0;
13112 /* Send message to SME */
13113 if (VOS_STATUS_SUCCESS !=
13114 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13115 {
13116 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13117 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13118 vos_mem_free(chAvoidInd);
13119 }
13120 break;
13121 }
13122#endif /* FEATURE_WLAN_CH_AVOID */
13123
Jeff Johnson295189b2012-06-20 16:38:30 -070013124 default:
13125 {
13126 /* TODO error */
13127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13128 "Received UNKNOWN Indication from WDI ");
13129 }
13130 }
13131 return ;
13132}
13133
Jeff Johnson295189b2012-06-20 16:38:30 -070013134/*
13135 * BA related processing in WDA.
13136 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013137void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13138 void* pUserData)
13139{
13140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13141 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013142 if(NULL == pWdaParams)
13143 {
13144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013145 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013146 VOS_ASSERT(0) ;
13147 return ;
13148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013149 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 vos_mem_free(pWdaParams->wdaMsgParam) ;
13151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13152 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013154 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013155 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13156 {
13157 tANI_U8 i = 0 ;
13158 tBaActivityInd *baActivityInd = NULL ;
13159 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13160 tANI_U8 allocSize = sizeof(tBaActivityInd)
13161 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13162 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13163 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013164 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013165 if(NULL == baActivityInd)
13166 {
13167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 VOS_ASSERT(0) ;
13170 return;
13171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013172 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13173 sizeof(tSirMacAddr)) ;
13174 baActivityInd->baCandidateCnt = baCandidateCount ;
13175
13176 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13177 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13178
13179 for(i = 0 ; i < baCandidateCount ; i++)
13180 {
13181 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13183 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013184 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13185 {
13186 baCandidate->baInfo[tid].fBaEnable =
13187 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13188 baCandidate->baInfo[tid].startingSeqNum =
13189 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13190 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013191 wdiBaCandidate++ ;
13192 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013193 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013194 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13195 }
13196 else
13197 {
13198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13199 "BA Trigger RSP with Failure received ");
13200 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013201 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013202}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013203
13204
13205/*
13206 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13207 * during MCC
13208 */
13209void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13210{
13211 wpt_uint32 enabled;
13212 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13213 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13214 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13215
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013216 if (NULL == pMac )
13217 {
13218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13219 "%s: Invoked with invalid MAC context ", __func__ );
13220 VOS_ASSERT(0);
13221 return;
13222 }
13223
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013224 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13225 != eSIR_SUCCESS)
13226 {
13227 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13228 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13229 return;
13230 }
13231
13232 if(!enabled)
13233 {
13234 return;
13235 }
13236
13237 if(NULL == pWDA)
13238 {
13239 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13240 "%s:WDA context is NULL", __func__);
13241 VOS_ASSERT(0);
13242 return;
13243 }
13244
13245 if(activate)
13246 {
13247 if( VOS_STATUS_SUCCESS !=
13248 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13249 {
13250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13251 "Traffic Stats Timer Start Failed ");
13252 return;
13253 }
13254 WDI_DS_ActivateTrafficStats();
13255 }
13256 else
13257 {
13258 WDI_DS_DeactivateTrafficStats();
13259 WDI_DS_ClearTrafficStats();
13260
13261 if( VOS_STATUS_SUCCESS !=
13262 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13263 {
13264 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13265 "Traffic Stats Timer Stop Failed ");
13266 return;
13267 }
13268 }
13269}
13270
13271/*
13272 * Traffic Stats Timer handler
13273 */
13274void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13275{
13276 WDI_Status wdiStatus;
13277 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13278 WDI_TrafficStatsIndType trafficStatsIndParams;
13279 wpt_uint32 length, enabled;
13280 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13281
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013282 if (NULL == pMac )
13283 {
13284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13285 "%s: Invoked with invalid MAC context ", __func__ );
13286 VOS_ASSERT(0);
13287 return;
13288 }
13289
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013290 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13291 != eSIR_SUCCESS)
13292 {
13293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13294 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13295 return;
13296 }
13297
13298 if(!enabled)
13299 {
13300 WDI_DS_DeactivateTrafficStats();
13301 return;
13302 }
13303
13304 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13305
13306 if(pWdiTrafficStats != NULL)
13307 {
13308 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13309 trafficStatsIndParams.length = length;
13310 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013311 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013312 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13313 trafficStatsIndParams.pUserData = pWDA;
13314
13315 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13316
13317 if(WDI_STATUS_PENDING == wdiStatus)
13318 {
13319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13320 "Pending received for %s:%d ",__func__,__LINE__ );
13321 }
13322 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13323 {
13324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13325 "Failure in %s:%d ",__func__,__LINE__ );
13326 }
13327
13328 WDI_DS_ClearTrafficStats();
13329 }
13330 else
13331 {
13332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13333 "pWdiTrafficStats is Null");
13334 }
13335
13336 if( VOS_STATUS_SUCCESS !=
13337 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13338 {
13339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13340 "Traffic Stats Timer Start Failed ");
13341 return;
13342 }
13343}
13344
Jeff Johnson295189b2012-06-20 16:38:30 -070013345/*
13346 * BA Activity check timer handler
13347 */
13348void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13349{
13350 tANI_U8 curSta = 0 ;
13351 tANI_U8 tid = 0 ;
13352 tANI_U8 size = 0 ;
13353 tANI_U8 baCandidateCount = 0 ;
13354 tANI_U8 newBaCandidate = 0 ;
13355 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13356
13357 if(NULL == pWDA)
13358 {
13359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013360 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013361 VOS_ASSERT(0);
13362 return ;
13363 }
13364 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13365 {
13366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13367 "Inconsistent STA entries in WDA");
13368 VOS_ASSERT(0) ;
13369 }
13370 /* walk through all STA entries and find out TX packet count */
13371 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13372 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013373#ifdef WLAN_SOFTAP_VSTA_FEATURE
13374 // We can only do BA on "hard" STAs.
13375 if (!(IS_HWSTA_IDX(curSta)))
13376 {
13377 continue;
13378 }
13379#endif //WLAN_SOFTAP_VSTA_FEATURE
13380 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13381 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013382 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013383 tANI_U32 txPktCount = 0 ;
13384 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013385 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013386 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13387 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013388 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13389 curSta, tid, &txPktCount)))
13390 {
13391#if 0
13392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13393 "************* %d:%d, %d ",curSta, txPktCount,
13394 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13395#endif
13396 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013397 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013398 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13399 curSta, tid)))
13400 {
13401 /* get prepare for sending message to HAL */
13402 //baCandidate[baCandidateCount].staIdx = curSta ;
13403 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13404 newBaCandidate = WDA_ENABLE_BA ;
13405 }
13406 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13407 }
13408 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013409 /* fill the entry for all the sta with given TID's */
13410 if(WDA_ENABLE_BA == newBaCandidate)
13411 {
13412 /* move to next BA candidate */
13413 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13414 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13415 baCandidateCount++ ;
13416 newBaCandidate = WDA_DISABLE_BA ;
13417 }
13418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013419 /* prepare and send message to hal */
13420 if( 0 < baCandidateCount)
13421 {
13422 WDI_Status status = WDI_STATUS_SUCCESS ;
13423 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13424 tWDA_ReqParams *pWdaParams =
13425 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013426 if(NULL == pWdaParams)
13427 {
13428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013430 VOS_ASSERT(0) ;
13431 return;
13432 }
13433 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13434 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13435 if(NULL == wdiTriggerBaReq)
13436 {
13437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013438 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013439 VOS_ASSERT(0) ;
13440 vos_mem_free(pWdaParams);
13441 return;
13442 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013443 do
13444 {
13445 WDI_TriggerBAReqinfoType *triggerBaInfo =
13446 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13447 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13448 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13449 * for each request */
13450 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13451 triggerBaInfo->ucBASessionID = 0;
13452 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13453 } while(0) ;
13454 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013456 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013457 pWdaParams->pWdaContext = pWDA;
13458 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13459 pWdaParams->wdaMsgParam = NULL;
13460 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13461 WDA_TriggerBaReqCallback, pWdaParams) ;
13462 if(IS_WDI_STATUS_FAILURE(status))
13463 {
13464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13465 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13466 vos_mem_free(pWdaParams->wdaMsgParam) ;
13467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13468 vos_mem_free(pWdaParams) ;
13469 }
13470 }
13471 else
13472 {
13473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13474 "There is no TID for initiating BA");
13475 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013476 if( VOS_STATUS_SUCCESS !=
13477 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13478 {
13479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13480 "BA Activity Timer Stop Failed ");
13481 return ;
13482 }
13483 if( VOS_STATUS_SUCCESS !=
13484 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13485 {
13486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13487 "BA Activity Timer Start Failed ");
13488 return;
13489 }
13490 return ;
13491}
Jeff Johnson295189b2012-06-20 16:38:30 -070013492/*
13493 * WDA common routine to create timer used by WDA.
13494 */
13495static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13496{
Jeff Johnson295189b2012-06-20 16:38:30 -070013497 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13498 tANI_U32 val = 0 ;
13499 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13500
13501 if(NULL == pMac)
13502 {
13503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013504 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013505 VOS_ASSERT(0);
13506 return VOS_STATUS_E_FAILURE;
13507 }
13508 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13509 != eSIR_SUCCESS)
13510 {
13511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13512 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13513 return VOS_STATUS_E_FAILURE;
13514 }
13515 val = SYS_MS_TO_TICKS(val) ;
13516
13517 /* BA activity check timer */
13518 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13519 "BA Activity Check timer", WDA_TimerHandler,
13520 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13521 if(status != TX_SUCCESS)
13522 {
13523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13524 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013525 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013526 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013527 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013528 /* Tx Complete Timeout timer */
13529 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13530 "Tx Complete Check timer", WDA_TimerHandler,
13531 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013532 if(status != TX_SUCCESS)
13533 {
13534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13535 "Unable to create Tx Complete Timeout timer");
13536 /* Destroy timer of BA activity check timer */
13537 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13538 if(status != TX_SUCCESS)
13539 {
13540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13541 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013542 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013543 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013544 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013545 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013546
13547 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13548
13549 /* Traffic Stats timer */
13550 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13551 "Traffic Stats timer", WDA_TimerHandler,
13552 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13553 if(status != TX_SUCCESS)
13554 {
13555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13556 "Unable to create traffic stats timer");
13557 /* Destroy timer of BA activity check timer */
13558 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13559 if(status != TX_SUCCESS)
13560 {
13561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13562 "Unable to Destroy BA activity timer");
13563 }
13564 /* Destroy timer of tx complete timer */
13565 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13566 if(status != TX_SUCCESS)
13567 {
13568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13569 "Unable to Tx complete timer");
13570 }
13571 return VOS_STATUS_E_FAILURE ;
13572 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013573 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013574}
Jeff Johnson295189b2012-06-20 16:38:30 -070013575/*
13576 * WDA common routine to destroy timer used by WDA.
13577 */
13578static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13579{
13580 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013581 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13582 if(status != TX_SUCCESS)
13583 {
13584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13585 "Unable to Destroy Tx Complete Timeout timer");
13586 return eSIR_FAILURE ;
13587 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013588 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13589 if(status != TX_SUCCESS)
13590 {
13591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13592 "Unable to Destroy BA activity timer");
13593 return eSIR_FAILURE ;
13594 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013595 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13596 if(status != TX_SUCCESS)
13597 {
13598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13599 "Unable to Destroy traffic stats timer");
13600 return eSIR_FAILURE ;
13601 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013602 return eSIR_SUCCESS ;
13603}
Jeff Johnson295189b2012-06-20 16:38:30 -070013604/*
13605 * WDA timer handler.
13606 */
13607void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13608{
13609 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13610 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013611 /*
13612 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13613 */
13614 wdaMsg.type = timerInfo ;
13615 wdaMsg.bodyptr = NULL;
13616 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013617 /* post the message.. */
13618 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13619 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13620 {
13621 vosStatus = VOS_STATUS_E_BADMSG;
13622 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013623}
Jeff Johnson295189b2012-06-20 16:38:30 -070013624/*
13625 * WDA Tx Complete timeout Indication.
13626 */
13627void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13628{
13629 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013630 if( pWDA->pAckTxCbFunc )
13631 {
13632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013633 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013634 pWDA->pAckTxCbFunc( pMac, 0);
13635 pWDA->pAckTxCbFunc = NULL;
13636 }
13637 else
13638 {
13639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013640 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013641 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013642}
Jeff Johnson295189b2012-06-20 16:38:30 -070013643/*
13644 * WDA Set REG Domain to VOS NV
13645 */
Abhishek Singha306a442013-11-07 18:39:01 +053013646eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13647 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013648{
Abhishek Singha306a442013-11-07 18:39:01 +053013649 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013650 {
13651 return eHAL_STATUS_INVALID_PARAMETER;
13652 }
13653 return eHAL_STATUS_SUCCESS;
13654}
Jeff Johnson295189b2012-06-20 16:38:30 -070013655
Jeff Johnson295189b2012-06-20 16:38:30 -070013656#ifdef FEATURE_WLAN_SCAN_PNO
13657/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013658 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013659 *
13660 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013661void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013662{
13663 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013665 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013666 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013667 {
13668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013669 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013670 VOS_ASSERT(0) ;
13671 return ;
13672 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013673
Yue Ma7f44bbe2013-04-12 11:47:39 -070013674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13675 vos_mem_free(pWdaParams->wdaMsgParam);
13676 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013677
13678 return ;
13679}
Jeff Johnson295189b2012-06-20 16:38:30 -070013680/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013681 * FUNCTION: WDA_PNOScanReqCallback
13682 * Free memory.
13683 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13684 */
13685void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013686{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013687 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13688
13689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13690 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13691
13692 if(NULL == pWdaParams)
13693 {
13694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13695 "%s: pWdaParams received NULL", __func__);
13696 VOS_ASSERT(0);
13697 return;
13698 }
13699
13700 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13701 {
13702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13703 vos_mem_free(pWdaParams->wdaMsgParam);
13704 vos_mem_free(pWdaParams);
13705 }
13706
13707 return;
13708}
13709/*
13710 * FUNCTION: WDA_UpdateScanParamsRespCallback
13711 *
13712 */
13713void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13714{
13715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013717 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013718 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013719 {
13720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013721 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013722 VOS_ASSERT(0) ;
13723 return ;
13724 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013725
13726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13727 vos_mem_free(pWdaParams->wdaMsgParam);
13728 vos_mem_free(pWdaParams);
13729
Jeff Johnson295189b2012-06-20 16:38:30 -070013730 return ;
13731}
Jeff Johnson295189b2012-06-20 16:38:30 -070013732/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013733 * FUNCTION: WDA_UpdateScanParamsReqCallback
13734 * Free memory.
13735 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13736 */
13737void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13738{
13739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13740
13741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13742 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13743
13744 if(NULL == pWdaParams)
13745 {
13746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13747 "%s: pWdaParams received NULL", __func__);
13748 VOS_ASSERT(0);
13749 return;
13750 }
13751
13752 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13753 {
13754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13755 vos_mem_free(pWdaParams->wdaMsgParam);
13756 vos_mem_free(pWdaParams);
13757 }
13758
13759 return;
13760}
13761/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013762 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13763 * Request to WDI to set Preferred Network List.Offload
13764 */
13765VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13766 tSirPNOScanReq *pPNOScanReqParams)
13767{
Jeff Johnson43971f52012-07-17 12:26:56 -070013768 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013769 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13770 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13771 tWDA_ReqParams *pWdaParams ;
13772 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013774 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013775 if(NULL == pwdiPNOScanReqInfo)
13776 {
13777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013779 VOS_ASSERT(0);
13780 return VOS_STATUS_E_NOMEM;
13781 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013782 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13783 if(NULL == pWdaParams)
13784 {
13785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013787 VOS_ASSERT(0);
13788 vos_mem_free(pwdiPNOScanReqInfo);
13789 return VOS_STATUS_E_NOMEM;
13790 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013791 //
13792 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13793 //
13794 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13795 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013796 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13797 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13798 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013799 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13800 {
13801 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13802 &pPNOScanReqParams->aNetworks[i],
13803 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13804 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013805 /*Scan timer intervals*/
13806 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13807 &pPNOScanReqParams->scanTimers,
13808 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013809 /*Probe template for 2.4GHz band*/
13810 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13811 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13812 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013813 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13814 pPNOScanReqParams->p24GProbeTemplate,
13815 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013816 /*Probe template for 5GHz band*/
13817 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13818 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13819 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013820 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13821 pPNOScanReqParams->p5GProbeTemplate,
13822 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013823 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13824 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013825
Jeff Johnson295189b2012-06-20 16:38:30 -070013826 /* Store Params pass it to WDI */
13827 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13828 pWdaParams->pWdaContext = pWDA;
13829 /* Store param pointer as passed in by caller */
13830 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013831 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013832 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013833 if(IS_WDI_STATUS_FAILURE(status))
13834 {
13835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13836 "Failure in Set PNO REQ WDI API, free all the memory " );
13837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13838 vos_mem_free(pWdaParams->wdaMsgParam);
13839 pWdaParams->wdaWdiApiMsgParam = NULL;
13840 pWdaParams->wdaMsgParam = NULL;
13841 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013842 return CONVERT_WDI2VOS_STATUS(status) ;
13843}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013844
13845#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13846
13847void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13848{
13849 /*Convert the CSR Auth types to WDI Auth types */
13850 switch (csrAuthType)
13851 {
13852 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13853 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13854 break;
13855#ifdef FEATURE_WLAN_CCX
13856 case eCSR_AUTH_TYPE_CCKM_WPA:
13857 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13858 break;
13859#endif
13860 case eCSR_AUTH_TYPE_WPA:
13861 *AuthType = eWDA_AUTH_TYPE_WPA;
13862 break;
13863 case eCSR_AUTH_TYPE_WPA_PSK:
13864 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13865 break;
13866#ifdef FEATURE_WLAN_CCX
13867 case eCSR_AUTH_TYPE_CCKM_RSN:
13868 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13869 break;
13870#endif
13871 case eCSR_AUTH_TYPE_RSN:
13872 *AuthType = eWDA_AUTH_TYPE_RSN;
13873 break;
13874 case eCSR_AUTH_TYPE_RSN_PSK:
13875 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13876 break;
13877#if defined WLAN_FEATURE_VOWIFI_11R
13878 case eCSR_AUTH_TYPE_FT_RSN:
13879 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13880 break;
13881 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13882 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13883 break;
13884#endif
13885#ifdef FEATURE_WLAN_WAPI
13886 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13887 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13888 break;
13889 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13890 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13891 break;
13892#endif /* FEATURE_WLAN_WAPI */
13893 case eCSR_AUTH_TYPE_SHARED_KEY:
13894 case eCSR_AUTH_TYPE_AUTOSWITCH:
13895 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13896 break;
13897#if 0
13898 case eCSR_AUTH_TYPE_SHARED_KEY:
13899 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13900 break;
13901 case eCSR_AUTH_TYPE_AUTOSWITCH:
13902 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13903#endif
13904 default:
13905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13906 "%s: Unknown Auth Type", __func__);
13907 break;
13908 }
13909}
13910void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13911{
13912 switch (csrEncrType)
13913 {
13914 case eCSR_ENCRYPT_TYPE_NONE:
13915 *EncrType = WDI_ED_NONE;
13916 break;
13917 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13918 case eCSR_ENCRYPT_TYPE_WEP40:
13919 *EncrType = WDI_ED_WEP40;
13920 break;
13921 case eCSR_ENCRYPT_TYPE_WEP104:
13922 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13923 *EncrType = WDI_ED_WEP104;
13924 break;
13925 case eCSR_ENCRYPT_TYPE_TKIP:
13926 *EncrType = WDI_ED_TKIP;
13927 break;
13928 case eCSR_ENCRYPT_TYPE_AES:
13929 *EncrType = WDI_ED_CCMP;
13930 break;
13931#ifdef WLAN_FEATURE_11W
13932 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13933 *EncrType = WDI_ED_AES_128_CMAC;
13934 break;
13935#endif
13936#ifdef FEATURE_WLAN_WAPI
13937 case eCSR_ENCRYPT_TYPE_WPI:
13938 *EncrType = WDI_ED_WPI;
13939 break;
13940#endif
13941 case eCSR_ENCRYPT_TYPE_ANY:
13942 *EncrType = WDI_ED_ANY;
13943 break;
13944
13945 default:
13946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13947 "%s: Unknown Encryption Type", __func__);
13948 break;
13949 }
13950}
13951
13952/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013953 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013954 * Request to WDI to set Roam Offload Scan
13955 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013956VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013957 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13958{
13959 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013960 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13961 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013962 tWDA_ReqParams *pWdaParams ;
13963 v_U8_t csrAuthType;
13964 WDI_RoamNetworkType *pwdiRoamNetworkType;
13965 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13967 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013968 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013969 {
13970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13971 "%s: VOS MEM Alloc Failure", __func__);
13972 VOS_ASSERT(0);
13973 return VOS_STATUS_E_NOMEM;
13974 }
13975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13976 if (NULL == pWdaParams)
13977 {
13978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13979 "%s: VOS MEM Alloc Failure", __func__);
13980 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013981 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013982 return VOS_STATUS_E_NOMEM;
13983 }
13984
13985 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013986 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013987 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013988 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
13989 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013990 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
13991 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
13992 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
13993 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
13994 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
13995 sizeof(pwdiRoamNetworkType->currAPbssid));
13996 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
13997 csrAuthType);
13998 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
13999 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14000 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14001 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14002 pwdiRoamOffloadScanInfo->LookupThreshold =
14003 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014004 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14005 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014006 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14007 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014008 pwdiRoamOffloadScanInfo->MAWCEnabled =
14009 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014010 pwdiRoamOffloadScanInfo->Command =
14011 pRoamOffloadScanReqParams->Command ;
14012 pwdiRoamOffloadScanInfo->StartScanReason =
14013 pRoamOffloadScanReqParams->StartScanReason ;
14014 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14015 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14016 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14017 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14018 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14019 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14020 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14021 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14022 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14023 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
14024 pwdiRoamOffloadScanInfo->IsCCXEnabled =
14025 pRoamOffloadScanReqParams->IsCCXEnabled ;
14026 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14027 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14028 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14029 pwdiRoamNetworkType->ssId.ucLength =
14030 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14031 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14032 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14033 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14034 pwdiRoamNetworkType->ChannelCount =
14035 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14036 pwdiRoamOffloadScanInfo->ChannelCacheType =
14037 pRoamOffloadScanReqParams->ChannelCacheType;
14038 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14039 pRoamOffloadScanReqParams->ValidChannelList,
14040 pRoamOffloadScanReqParams->ValidChannelCount);
14041 pwdiRoamOffloadScanInfo->ValidChannelCount =
14042 pRoamOffloadScanReqParams->ValidChannelCount;
14043 pwdiRoamOffloadScanInfo->us24GProbeSize =
14044 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14045 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14046 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14047 pRoamOffloadScanReqParams->p24GProbeTemplate,
14048 pwdiRoamOffloadScanInfo->us24GProbeSize);
14049 pwdiRoamOffloadScanInfo->us5GProbeSize =
14050 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14051 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14052 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14053 pRoamOffloadScanReqParams->p5GProbeTemplate,
14054 pwdiRoamOffloadScanInfo->us5GProbeSize);
14055 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14056 pRoamOffloadScanReqParams->MDID.mdiePresent;
14057 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14058 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014059 pwdiRoamOffloadScanInfo->nProbes =
14060 pRoamOffloadScanReqParams->nProbes;
14061 pwdiRoamOffloadScanInfo->HomeAwayTime =
14062 pRoamOffloadScanReqParams->HomeAwayTime;
14063 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014064 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014065 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014066 pWdaParams->pWdaContext = pWDA;
14067 /* Store param pointer as passed in by caller */
14068 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014069 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014070 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14071 if(IS_WDI_STATUS_FAILURE(status))
14072 {
14073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14074 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14076 vos_mem_free(pWdaParams->wdaMsgParam);
14077 pWdaParams->wdaWdiApiMsgParam = NULL;
14078 pWdaParams->wdaMsgParam = NULL;
14079 }
14080 return CONVERT_WDI2VOS_STATUS(status) ;
14081}
14082#endif
14083
Jeff Johnson295189b2012-06-20 16:38:30 -070014084/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014085 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014086 *
14087 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014088void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014089{
14090 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14091
14092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014093 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014094
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014095 if(NULL == pWdaParams)
14096 {
14097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014098 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014099 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014100 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014101 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014102
Jeff Johnson295189b2012-06-20 16:38:30 -070014103 vos_mem_free(pWdaParams->wdaMsgParam) ;
14104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14105 vos_mem_free(pWdaParams) ;
14106
14107 return ;
14108}
14109/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014110 * FUNCTION: WDA_RssiFilterReqCallback
14111 * Free memory.
14112 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14113 */
14114void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14115{
14116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14117
14118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14119 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14120
14121 if(NULL == pWdaParams)
14122 {
14123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14124 "%s: pWdaParams received NULL", __func__);
14125 VOS_ASSERT(0);
14126 return;
14127 }
14128
14129 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14130 {
14131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14132 vos_mem_free(pWdaParams->wdaMsgParam);
14133 vos_mem_free(pWdaParams);
14134 }
14135
14136 return;
14137}
14138/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014139 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14140 * Request to WDI to set Preferred Network List.Offload
14141 */
14142VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14143 tSirSetRSSIFilterReq* pRssiFilterParams)
14144{
Jeff Johnson43971f52012-07-17 12:26:56 -070014145 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014146 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14147 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14148 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014151 if(NULL == pwdiSetRssiFilterReqInfo)
14152 {
14153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014155 VOS_ASSERT(0);
14156 return VOS_STATUS_E_NOMEM;
14157 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14159 if(NULL == pWdaParams)
14160 {
14161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014163 VOS_ASSERT(0);
14164 vos_mem_free(pwdiSetRssiFilterReqInfo);
14165 return VOS_STATUS_E_NOMEM;
14166 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014167 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014168 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14169 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014170
Jeff Johnson295189b2012-06-20 16:38:30 -070014171 /* Store Params pass it to WDI */
14172 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14173 pWdaParams->pWdaContext = pWDA;
14174 /* Store param pointer as passed in by caller */
14175 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014176 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014177 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014178 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014179 if(IS_WDI_STATUS_FAILURE(status))
14180 {
14181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14182 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14184 vos_mem_free(pWdaParams->wdaMsgParam);
14185 pWdaParams->wdaWdiApiMsgParam = NULL;
14186 pWdaParams->wdaMsgParam = NULL;
14187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014188 return CONVERT_WDI2VOS_STATUS(status) ;
14189}
14190
Jeff Johnson295189b2012-06-20 16:38:30 -070014191/*
14192 * FUNCTION: WDA_ProcessUpdateScanParams
14193 * Request to WDI to update Scan Parameters
14194 */
14195VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14196 tSirUpdateScanParams *pUpdateScanParams)
14197{
Jeff Johnson43971f52012-07-17 12:26:56 -070014198 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014199 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14200 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14201 sizeof(WDI_UpdateScanParamsInfoType)) ;
14202 tWDA_ReqParams *pWdaParams ;
14203 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014205 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014206 if(NULL == wdiUpdateScanParamsInfoType)
14207 {
14208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014210 VOS_ASSERT(0);
14211 return VOS_STATUS_E_NOMEM;
14212 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014213 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14214 if ( NULL == pWdaParams )
14215 {
14216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014218 VOS_ASSERT(0);
14219 vos_mem_free(wdiUpdateScanParamsInfoType);
14220 return VOS_STATUS_E_NOMEM;
14221 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014222 //
14223 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14224 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14226 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14227 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14228 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014229 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014230 pUpdateScanParams->b11dEnabled,
14231 pUpdateScanParams->b11dResolved,
14232 pUpdateScanParams->ucChannelCount,
14233 pUpdateScanParams->usPassiveMinChTime,
14234 pUpdateScanParams->usPassiveMaxChTime,
14235 pUpdateScanParams->usActiveMinChTime,
14236 pUpdateScanParams->usActiveMaxChTime,
14237 sizeof(tSirUpdateScanParams),
14238 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14239
Jeff Johnson295189b2012-06-20 16:38:30 -070014240 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14241 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014242 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14243 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014244 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14245 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014246 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14247 pUpdateScanParams->usActiveMaxChTime;
14248 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14249 pUpdateScanParams->usActiveMinChTime;
14250 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14251 pUpdateScanParams->usPassiveMaxChTime;
14252 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14253 pUpdateScanParams->usPassiveMinChTime;
14254
Jeff Johnson295189b2012-06-20 16:38:30 -070014255 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014256 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14257 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014258
Jeff Johnson295189b2012-06-20 16:38:30 -070014259 for ( i = 0; i <
14260 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14261 i++)
14262 {
14263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14264 "Update Scan Parameters channel: %d",
14265 pUpdateScanParams->aChannels[i]);
14266
14267 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14268 pUpdateScanParams->aChannels[i];
14269 }
14270
Yue Ma7f44bbe2013-04-12 11:47:39 -070014271 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14272 wdiUpdateScanParamsInfoType->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 = wdiUpdateScanParamsInfoType;
14276 pWdaParams->pWdaContext = pWDA;
14277 /* Store param pointer as passed in by caller */
14278 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014279
Jeff Johnson295189b2012-06-20 16:38:30 -070014280
14281
14282 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014283 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014284 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014285 if(IS_WDI_STATUS_FAILURE(status))
14286 {
14287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14288 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14290 vos_mem_free(pWdaParams->wdaMsgParam);
14291 vos_mem_free(pWdaParams);
14292 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014293 return CONVERT_WDI2VOS_STATUS(status) ;
14294}
14295#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014296
14297#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14298/*
14299 * FUNCTION: WDA_RoamOffloadScanReqCallback
14300 *
14301 */
14302void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14303{
14304 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014305 vos_msg_t vosMsg;
14306 wpt_uint8 reason = 0;
14307
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014309 "<------ %s " ,__func__);
14310 if (NULL == pWdaParams)
14311 {
14312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14313 "%s: pWdaParams received NULL", __func__);
14314 VOS_ASSERT(0) ;
14315 return ;
14316 }
14317 if ( pWdaParams != NULL )
14318 {
14319 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14320 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014321 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14323 }
14324 if ( pWdaParams->wdaMsgParam != NULL)
14325 {
14326 vos_mem_free(pWdaParams->wdaMsgParam);
14327 }
14328
14329 vos_mem_free(pWdaParams) ;
14330 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014331 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14332 vosMsg.bodyptr = NULL;
14333 if (WDI_STATUS_SUCCESS != status)
14334 {
14335 reason = 0;
14336 }
14337 vosMsg.bodyval = reason;
14338 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14339 {
14340 /* free the mem and return */
14341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014342 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014343 }
14344
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014345 return ;
14346}
14347#endif
14348
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014349/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014350 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014351 *
14352 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014353void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014354{
14355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14356
14357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14358 "<------ %s " ,__func__);
14359
14360 if(NULL == pWdaParams)
14361 {
14362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14363 "%s: pWdaParams received NULL", __func__);
14364 VOS_ASSERT(0);
14365 return;
14366 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014367
14368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14369 vos_mem_free(pWdaParams->wdaMsgParam);
14370 vos_mem_free(pWdaParams);
14371
14372 return;
14373}
14374/*
14375 * FUNCTION: WDA_SetPowerParamsReqCallback
14376 * Free memory.
14377 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14378 */
14379void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14380{
14381 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14382
14383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14384 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14385
14386 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014387 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14389 "%s: pWdaParams received NULL", __func__);
14390 VOS_ASSERT(0);
14391 return;
14392 }
14393
14394 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14395 {
14396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14397 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014398 vos_mem_free(pWdaParams);
14399 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014400
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014401 return;
14402}
14403
Jeff Johnson295189b2012-06-20 16:38:30 -070014404#ifdef WLAN_FEATURE_PACKET_FILTERING
14405/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014406 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014407 *
14408 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014409void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014410 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14411 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014412{
14413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014415 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014416 if(NULL == pWdaParams)
14417 {
14418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014419 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014420 VOS_ASSERT(0) ;
14421 return ;
14422 }
14423
14424 vos_mem_free(pWdaParams->wdaMsgParam) ;
14425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14426 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014427 //print a msg, nothing else to do
14428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014429 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014430 return ;
14431}
Jeff Johnson295189b2012-06-20 16:38:30 -070014432/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014433 * FUNCTION: WDA_8023MulticastListReqCallback
14434 * Free memory.
14435 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14436 */
14437void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14438{
14439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14440
14441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14442 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14443
14444 if(NULL == pWdaParams)
14445 {
14446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14447 "%s: pWdaParams received NULL", __func__);
14448 VOS_ASSERT(0);
14449 return;
14450 }
14451
14452 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14453 {
14454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14455 vos_mem_free(pWdaParams->wdaMsgParam);
14456 vos_mem_free(pWdaParams);
14457 }
14458
14459 return;
14460}
14461/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014462 * FUNCTION: WDA_Process8023MulticastListReq
14463 * Request to WDI to add 8023 Multicast List
14464 */
14465VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14466 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14467{
Jeff Johnson43971f52012-07-17 12:26:56 -070014468 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014469 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14470 tWDA_ReqParams *pWdaParams ;
14471 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014474 pwdiFltPktSetMcListReqParamsType =
14475 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14476 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14477 ) ;
14478 if(NULL == pwdiFltPktSetMcListReqParamsType)
14479 {
14480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014482 return VOS_STATUS_E_NOMEM;
14483 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14485 if(NULL == pWdaParams)
14486 {
14487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014489 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14490 return VOS_STATUS_E_NOMEM;
14491 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014492
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 //
14494 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14495 //
14496 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014497 pRcvFltMcAddrList->ulMulticastAddrCnt;
14498
14499 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14500 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14501 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14502 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14503
Jeff Johnson295189b2012-06-20 16:38:30 -070014504 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14505 {
14506 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14507 &(pRcvFltMcAddrList->multicastAddr[i]),
14508 sizeof(tSirMacAddr));
14509 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014510 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14511 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014512
Jeff Johnson295189b2012-06-20 16:38:30 -070014513 /* Store Params pass it to WDI */
14514 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14515 pWdaParams->pWdaContext = pWDA;
14516 /* Store param pointer as passed in by caller */
14517 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014518 status = WDI_8023MulticastListReq(
14519 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014520 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014521 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014522 if(IS_WDI_STATUS_FAILURE(status))
14523 {
14524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14525 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14527 vos_mem_free(pWdaParams->wdaMsgParam);
14528 vos_mem_free(pWdaParams);
14529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014530 return CONVERT_WDI2VOS_STATUS(status) ;
14531}
Jeff Johnson295189b2012-06-20 16:38:30 -070014532/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014533 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014534 *
14535 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014536void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014537 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14538 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014539{
14540 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014542 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014543 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014544 if(NULL == pWdaParams)
14545 {
14546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014547 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 VOS_ASSERT(0) ;
14549 return ;
14550 }
14551
14552 vos_mem_free(pWdaParams->wdaMsgParam) ;
14553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14554 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014555 //print a msg, nothing else to do
14556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014557 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014558 return ;
14559}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014560
14561/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014562 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14563 * Free memory.
14564 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014565 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014566void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014567 void* pUserData)
14568{
14569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14570
14571 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14572 "<------ %s, wdiStatus: %d",
14573 __func__, wdiStatus);
14574
14575 if (NULL == pWdaParams)
14576 {
14577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14578 "%s: Invalid pWdaParams pointer", __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/*
14594 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14595 * Request to WDI to set Receive Filters
14596 */
14597VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14598 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14599{
Jeff Johnson43971f52012-07-17 12:26:56 -070014600 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014601 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14602 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14603 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14604 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14605 tWDA_ReqParams *pWdaParams ;
14606 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014608 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014609 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14610 {
14611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014613 VOS_ASSERT(0);
14614 return VOS_STATUS_E_NOMEM;
14615 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14617 if(NULL == pWdaParams)
14618 {
14619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014621 VOS_ASSERT(0);
14622 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14623 return VOS_STATUS_E_NOMEM;
14624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014625 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14626 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14627 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14628 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014629 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14630 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14631
14632 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14633 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014634
14635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14636 "FID %d FT %d NParams %d CT %d",
14637 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14638 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14639 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14640 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014641 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14642 {
14643 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14644 &pRcvPktFilterCfg->paramsData[i],
14645 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014647 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014648 pwdiSetRcvPktFilterReqParamsType->
14649 wdiPktFilterCfg.paramsData[i].protocolLayer,
14650 pwdiSetRcvPktFilterReqParamsType->
14651 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014653 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014654 pwdiSetRcvPktFilterReqParamsType->
14655 wdiPktFilterCfg.paramsData[i].dataOffset,
14656 pwdiSetRcvPktFilterReqParamsType->
14657 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014659 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014660 pwdiSetRcvPktFilterReqParamsType->
14661 wdiPktFilterCfg.paramsData[i].compareData[0],
14662 pwdiSetRcvPktFilterReqParamsType->
14663 wdiPktFilterCfg.paramsData[i].compareData[1],
14664 pwdiSetRcvPktFilterReqParamsType->
14665 wdiPktFilterCfg.paramsData[i].compareData[2],
14666 pwdiSetRcvPktFilterReqParamsType->
14667 wdiPktFilterCfg.paramsData[i].compareData[3],
14668 pwdiSetRcvPktFilterReqParamsType->
14669 wdiPktFilterCfg.paramsData[i].compareData[4],
14670 pwdiSetRcvPktFilterReqParamsType->
14671 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014673 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014674 pwdiSetRcvPktFilterReqParamsType->
14675 wdiPktFilterCfg.paramsData[i].dataMask[0],
14676 pwdiSetRcvPktFilterReqParamsType->
14677 wdiPktFilterCfg.paramsData[i].dataMask[1],
14678 pwdiSetRcvPktFilterReqParamsType->
14679 wdiPktFilterCfg.paramsData[i].dataMask[2],
14680 pwdiSetRcvPktFilterReqParamsType->
14681 wdiPktFilterCfg.paramsData[i].dataMask[3],
14682 pwdiSetRcvPktFilterReqParamsType->
14683 wdiPktFilterCfg.paramsData[i].dataMask[4],
14684 pwdiSetRcvPktFilterReqParamsType->
14685 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014686 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014687 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014688 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014689 /* Store Params pass it to WDI */
14690 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14691 pWdaParams->pWdaContext = pWDA;
14692 /* Store param pointer as passed in by caller */
14693 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014694 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014695 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014696 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014697 if(IS_WDI_STATUS_FAILURE(status))
14698 {
14699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14700 "Failure in SetFilter(),free all the memory,status %d ",status);
14701 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14702 vos_mem_free(pWdaParams->wdaMsgParam);
14703 vos_mem_free(pWdaParams);
14704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014705 return CONVERT_WDI2VOS_STATUS(status) ;
14706}
Jeff Johnson295189b2012-06-20 16:38:30 -070014707/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014708 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014709 *
14710 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014711void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014712 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14713 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014714{
14715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14716 tWDA_CbContext *pWDA;
14717 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14718 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14719 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14720 tANI_U8 i;
14721 vos_msg_t vosMsg;
14722
14723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014724 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014725 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14726
Jeff Johnsone7245742012-09-05 17:12:55 -070014727 if(NULL == pRcvFltPktMatchCntRsp)
14728 {
14729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014730 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014731 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014732 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014733 return ;
14734 }
14735
Jeff Johnson295189b2012-06-20 16:38:30 -070014736 if(NULL == pWdaParams)
14737 {
14738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014739 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014740 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014741 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014742 return ;
14743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014744 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14745 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014746 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14747 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14748
14749 /* Message Header */
14750 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14751 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14752
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014753 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014754
14755 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14756 {
14757 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14758 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14759 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014760 /* VOS message wrapper */
14761 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14762 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14763 vosMsg.bodyval = 0;
14764 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14765 {
14766 /* free the mem and return */
14767 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14768 }
14769
14770 vos_mem_free(pWdaParams->wdaMsgParam) ;
14771 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14772 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014773
14774 return;
14775}
14776/*
14777 * FUNCTION: WDA_FilterMatchCountReqCallback
14778 * Free memory and send RSP back to SME.
14779 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14780 */
14781void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14782{
14783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14784 vos_msg_t vosMsg;
14785
14786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14787 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14788
14789 if(NULL == pWdaParams)
14790 {
14791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14792 "%s: pWdaParams received NULL", __func__);
14793 VOS_ASSERT(0);
14794 return;
14795 }
14796
14797 /* VOS message wrapper */
14798 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14799 vosMsg.bodyptr = NULL;
14800 vosMsg.bodyval = 0;
14801
14802 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14803 {
14804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14805 vos_mem_free(pWdaParams->wdaMsgParam);
14806 vos_mem_free(pWdaParams);
14807 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14808 }
14809
14810 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014811}
Jeff Johnson295189b2012-06-20 16:38:30 -070014812/*
14813 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14814 * Request to WDI to get PC Filter Match Count
14815 */
14816VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14817{
Jeff Johnson43971f52012-07-17 12:26:56 -070014818 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014819 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14820 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14821 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014823 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014824 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14825 {
14826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014828 VOS_ASSERT(0);
14829 return VOS_STATUS_E_NOMEM;
14830 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14832 if(NULL == pWdaParams)
14833 {
14834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014836 VOS_ASSERT(0);
14837 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14838 return VOS_STATUS_E_NOMEM;
14839 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014840
Yue Ma7f44bbe2013-04-12 11:47:39 -070014841 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14842 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014843
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014844 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14845 pRcvFltPktMatchRsp->bssId,
14846 sizeof(wpt_macAddr));
14847
Jeff Johnson295189b2012-06-20 16:38:30 -070014848 /* Store Params pass it to WDI */
14849 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14850 pWdaParams->pWdaContext = pWDA;
14851 /* Store param pointer as passed in by caller */
14852 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014853 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014854 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014855 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014856 if(IS_WDI_STATUS_FAILURE(status))
14857 {
14858 /* failure returned by WDI API */
14859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14860 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14862 vos_mem_free(pWdaParams) ;
14863 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14864 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14865 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014866 return CONVERT_WDI2VOS_STATUS(status) ;
14867}
Jeff Johnson295189b2012-06-20 16:38:30 -070014868/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014869 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014870 *
14871 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014872void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014873 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14874 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014875{
14876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014878 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014879/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14880 if(NULL == pWdaParams)
14881 {
14882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014883 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014884 VOS_ASSERT(0) ;
14885 return ;
14886 }
14887
14888 vos_mem_free(pWdaParams->wdaMsgParam) ;
14889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14890 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014891 //print a msg, nothing else to do
14892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014893 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014894 return ;
14895}
Jeff Johnson295189b2012-06-20 16:38:30 -070014896/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014897 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14898 * Free memory.
14899 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14900 */
14901void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14902{
14903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14904
14905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14906 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14907
14908 if(NULL == pWdaParams)
14909 {
14910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14911 "%s: Invalid pWdaParams pointer", __func__);
14912 VOS_ASSERT(0);
14913 return;
14914 }
14915
14916 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14917 {
14918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14919 vos_mem_free(pWdaParams->wdaMsgParam);
14920 vos_mem_free(pWdaParams);
14921 }
14922
14923 return;
14924}
14925/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014926 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14927 * Request to WDI to clear Receive Filters
14928 */
14929VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14930 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14931{
Jeff Johnson43971f52012-07-17 12:26:56 -070014932 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014933 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14934 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14935 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014937 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014938 if(NULL == pwdiRcvFltPktClearReqParamsType)
14939 {
14940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014942 VOS_ASSERT(0);
14943 return VOS_STATUS_E_NOMEM;
14944 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14946 if(NULL == pWdaParams)
14947 {
14948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014950 VOS_ASSERT(0);
14951 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14952 return VOS_STATUS_E_NOMEM;
14953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014954 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14955 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014956 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14957 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14958 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14959 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014960
Yue Ma7f44bbe2013-04-12 11:47:39 -070014961 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014962 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014963 /* Store Params pass it to WDI */
14964 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14965 pWdaParams->pWdaContext = pWDA;
14966 /* Store param pointer as passed in by caller */
14967 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014968 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014969 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014970 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014971 if(IS_WDI_STATUS_FAILURE(status))
14972 {
14973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14974 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014976 vos_mem_free(pWdaParams->wdaMsgParam);
14977 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014978 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014979 return CONVERT_WDI2VOS_STATUS(status) ;
14980}
14981#endif // WLAN_FEATURE_PACKET_FILTERING
14982
Jeff Johnson295189b2012-06-20 16:38:30 -070014983/*
14984 * FUNCTION: WDA_ProcessSetPowerParamsReq
14985 * Request to WDI to set power params
14986 */
14987VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14988 tSirSetPowerParamsReq *pPowerParams)
14989{
Jeff Johnson43971f52012-07-17 12:26:56 -070014990 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014991 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
14992 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014993 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014995 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014996 if(NULL == pwdiSetPowerParamsReqInfo)
14997 {
14998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014999 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015000 VOS_ASSERT(0);
15001 return VOS_STATUS_E_NOMEM;
15002 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15004 if(NULL == pWdaParams)
15005 {
15006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015008 VOS_ASSERT(0);
15009 vos_mem_free(pwdiSetPowerParamsReqInfo);
15010 return VOS_STATUS_E_NOMEM;
15011 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015012
Jeff Johnson295189b2012-06-20 16:38:30 -070015013
15014 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15015 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015016 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15017 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015018 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15019 pPowerParams->uListenInterval;
15020 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15021 pPowerParams->uBcastMcastFilter;
15022 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15023 pPowerParams->uEnableBET;
15024 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15025 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015026 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15027 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015028 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15029 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015030
Jeff Johnson295189b2012-06-20 16:38:30 -070015031 /* Store Params pass it to WDI */
15032 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15033 pWdaParams->pWdaContext = pWDA;
15034 /* Store param pointer as passed in by caller */
15035 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015036 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015037 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015038 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015039 if(IS_WDI_STATUS_FAILURE(status))
15040 {
15041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15042 "Failure in Set power params REQ WDI API, free all the memory " );
15043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15044 vos_mem_free(pWdaParams->wdaMsgParam);
15045 pWdaParams->wdaWdiApiMsgParam = NULL;
15046 pWdaParams->wdaMsgParam = NULL;
15047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015048 return CONVERT_WDI2VOS_STATUS(status) ;
15049}
15050
15051/*
15052 * FUNCTION: WDA_SetTmLevelRspCallback
15053 * Set TM Level response
15054 */
15055void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15056{
15057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15058
15059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015060 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015061
15062 if(NULL == pWdaParams)
15063 {
15064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015065 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015066 VOS_ASSERT(0) ;
15067 return ;
15068 }
15069
15070 /* Dose not need to send notification to upper layer
15071 * Just free allocated resources */
15072 if( pWdaParams != NULL )
15073 {
15074 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15075 {
15076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15077 }
15078 vos_mem_free(pWdaParams->wdaMsgParam) ;
15079 vos_mem_free(pWdaParams) ;
15080 }
15081}
15082
15083/*
15084 * FUNCTION: WDA_ProcessSetTmLevelReq
15085 * Set TM Level request
15086 */
15087VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15088 tAniSetTmLevelReq *setTmLevelReq)
15089{
15090 WDI_Status status = WDI_STATUS_SUCCESS ;
15091 tWDA_ReqParams *pWdaParams ;
15092 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15093 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15094 sizeof(WDI_SetTmLevelReqType)) ;
15095 if(NULL == wdiSetTmLevelReq)
15096 {
15097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015099 VOS_ASSERT(0);
15100 return VOS_STATUS_E_NOMEM;
15101 }
15102
15103 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15104 if(NULL == pWdaParams)
15105 {
15106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015108 VOS_ASSERT(0);
15109 vos_mem_free(wdiSetTmLevelReq);
15110 return VOS_STATUS_E_NOMEM;
15111 }
15112
15113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015114 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015115
15116 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15117 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15118
15119 pWdaParams->pWdaContext = pWDA;
15120 pWdaParams->wdaMsgParam = setTmLevelReq;
15121 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15122
15123 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15124 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15125
15126 if(IS_WDI_STATUS_FAILURE(status))
15127 {
15128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015129 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015130 vos_mem_free(pWdaParams->wdaMsgParam) ;
15131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15132 vos_mem_free(pWdaParams) ;
15133 }
15134
15135 return CONVERT_WDI2VOS_STATUS(status) ;
15136}
15137
15138VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15139 tpTxControlParams pTxCtrlParam)
15140{
15141 VOS_STATUS wdaStatus;
15142
15143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015144 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015145 if( pTxCtrlParam == NULL )
15146 {
15147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015148 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015149 return VOS_STATUS_E_FAILURE;
15150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015151 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15152 {
15153 wdaStatus = WDA_SuspendDataTx(pWDA);
15154 }
15155 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15156 {
15157 wdaStatus = WDA_ResumeDataTx(pWDA);
15158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015159 return wdaStatus;
15160}
15161
15162 /* FUNCTION WDA_featureCapsExchange
15163 * WDA API to invoke capability exchange between host and FW.
15164 */
15165void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15166{
15167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015168 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015169 WDI_featureCapsExchangeReq( NULL, pVosContext);
15170}
15171
Yathish9f22e662012-12-10 14:21:35 -080015172/* FUNCTION WDA_disableCapablityFeature
15173 * WDA API to diable Active mode offload in host.
15174 */
15175void WDA_disableCapablityFeature(tANI_U8 feature_index)
15176{
15177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15178 "%s:enter", __func__ );
15179 WDI_disableCapablityFeature(feature_index);
15180}
15181
Jeff Johnson295189b2012-06-20 16:38:30 -070015182 /* FUNCTION WDA_getHostWlanFeatCaps
15183 * Wrapper for WDI API, that will return if the feature (enum value).passed
15184 * to this API is supported or not in Host
15185 * return value
15186 * 0 - implies feature is NOT Supported
15187 * any non zero value - implies feature is SUPPORTED
15188 */
15189tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15190{
15191 return WDI_getHostWlanFeatCaps(featEnumValue);
15192}
15193
15194 /* FUNCTION WDA_getFwWlanFeatCaps
15195 * Wrapper for WDI API, that will return if the feature (enum value).passed
15196 * to this API is supported or not in FW
15197 * return value
15198 * 0 - implies feature is NOT Supported
15199 * any non zero value - implies feature is SUPPORTED
15200 */
15201tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15202{
15203 return WDI_getFwWlanFeatCaps(featEnumValue);
15204}
15205
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015206
Jeff Johnson295189b2012-06-20 16:38:30 -070015207/*
15208 * FUNCTION: WDA_shutdown
15209 * Shutdown WDA/WDI without handshaking with Riva.
15210 * Synchronous function.
15211 */
15212VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15213{
15214 WDI_Status wdiStatus;
15215 //tANI_U8 eventIdx = 0;
15216 VOS_STATUS status = VOS_STATUS_SUCCESS;
15217 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015218 if (NULL == pWDA)
15219 {
15220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015221 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015222 VOS_ASSERT(0);
15223 return VOS_STATUS_E_FAILURE;
15224 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015225 /* FTM mode stay START_STATE */
15226 if( (WDA_READY_STATE != pWDA->wdaState) &&
15227 (WDA_INIT_STATE != pWDA->wdaState) &&
15228 (WDA_START_STATE != pWDA->wdaState) )
15229 {
15230 VOS_ASSERT(0);
15231 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015232
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015233 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15234 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015235 {
15236 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015237 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015238 }
Leo Chang9d76f622013-08-23 16:34:52 -070015239 else
15240 {
15241 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15242 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015243
Jeff Johnson295189b2012-06-20 16:38:30 -070015244 /* call WDI shutdown */
15245 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015246 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15247 {
15248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15249 "error in WDA Stop" );
15250 status = VOS_STATUS_E_FAILURE;
15251 }
15252 /* WDI stop is synchrnous, shutdown is complete when it returns */
15253 pWDA->wdaState = WDA_STOP_STATE;
15254
Jeff Johnson295189b2012-06-20 16:38:30 -070015255 /* shutdown should perform the stop & close actions. */
15256 /* Destroy the event */
15257 status = vos_event_destroy(&pWDA->txFrameEvent);
15258 if(!VOS_IS_STATUS_SUCCESS(status))
15259 {
15260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015261 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015262 status = VOS_STATUS_E_FAILURE;
15263 }
15264 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15265 if(!VOS_IS_STATUS_SUCCESS(status))
15266 {
15267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015268 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015269 status = VOS_STATUS_E_FAILURE;
15270 }
15271 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15272 if(!VOS_IS_STATUS_SUCCESS(status))
15273 {
15274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015275 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015276 status = VOS_STATUS_E_FAILURE;
15277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015278 /* free WDA context */
15279 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15280 if ( !VOS_IS_STATUS_SUCCESS(status) )
15281 {
15282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15283 "error in WDA close " );
15284 status = VOS_STATUS_E_FAILURE;
15285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015286 return status;
15287}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015288
Jeff Johnsone7245742012-09-05 17:12:55 -070015289/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015290 * FUNCTION: WDA_setNeedShutdown
15291 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015292 */
15293
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015294void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015295{
15296 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015297 if(pWDA == NULL)
15298 {
15299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15300 "Could not get the WDA Context pointer" );
15301 return;
15302 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015303 pWDA->needShutdown = TRUE;
15304}
15305/*
15306 * FUNCTION: WDA_needShutdown
15307 * WDA needs a shutdown
15308 */
15309
15310v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15311{
15312 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015313 if(pWDA == NULL)
15314 {
15315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15316 "Could not get the WDA Context pointer" );
15317 return 0;
15318 }
15319 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015320}
15321
Mohit Khanna4a70d262012-09-11 16:30:12 -070015322#ifdef WLAN_FEATURE_11AC
15323/*
15324 * FUNCTION: WDA_SetBeaconFilterReqCallback
15325 *
15326 */
15327void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15328{
15329 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015331 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015332 if(NULL == pWdaParams)
15333 {
15334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015335 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015336 VOS_ASSERT(0) ;
15337 return ;
15338 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015339
Mohit Khanna4a70d262012-09-11 16:30:12 -070015340 vos_mem_free(pWdaParams->wdaMsgParam) ;
15341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15342 vos_mem_free(pWdaParams) ;
15343 /*
15344 * No respone required for SetBeaconFilter req so just free the request
15345 * param here
15346 */
15347
15348 return ;
15349}
15350
15351VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15352 tUpdateVHTOpMode *pData)
15353{
15354 WDI_Status status = WDI_STATUS_SUCCESS ;
15355 tWDA_ReqParams *pWdaParams ;
15356 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15357 sizeof(WDI_UpdateVHTOpMode)) ;
15358 if(NULL == wdiTemp)
15359 {
15360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015361 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015362 VOS_ASSERT(0);
15363 return VOS_STATUS_E_NOMEM;
15364 }
15365 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15366 if(NULL == pWdaParams)
15367 {
15368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015369 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015370 VOS_ASSERT(0);
15371 vos_mem_free(wdiTemp);
15372 return VOS_STATUS_E_NOMEM;
15373 }
15374
15375 wdiTemp->opMode = pData->opMode;
15376 wdiTemp->staId = pData->staId;
15377
15378 pWdaParams->pWdaContext = pWDA;
15379 /* Store Req pointer, as this will be used for response */
15380 pWdaParams->wdaMsgParam = (void *)pData;
15381 /* store Params pass it to WDI */
15382 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15383
15384 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15385
15386 if(IS_WDI_STATUS_FAILURE(status))
15387 {
15388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15389 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15390 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15391 vos_mem_free(pWdaParams->wdaMsgParam);
15392 vos_mem_free(pWdaParams);
15393 }
15394 return CONVERT_WDI2VOS_STATUS(status) ;
15395}
15396#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015397
15398/*==========================================================================
15399 FUNCTION WDA_TransportChannelDebug
15400
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015401 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015402 Display Transport Channel debugging information
15403 User may request to display DXE channel snapshot
15404 Or if host driver detects any abnormal stcuk may display
15405
15406 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015407 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015408 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015409 enableStallDetect : Enable stall detect feature
15410 This feature will take effect to data performance
15411 Not integrate till fully verification
15412
15413 RETURN VALUE
15414 NONE
15415
15416===========================================================================*/
15417void WDA_TransportChannelDebug
15418(
schang6295e542013-03-12 15:31:23 -070015419 tpAniSirGlobal pMac,
15420 v_BOOL_t displaySnapshot,
15421 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015422)
15423{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070015424 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015425 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015426}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015427
15428/*==========================================================================
15429 FUNCTION WDA_SetEnableSSR
15430
15431 DESCRIPTION
15432 API to enable/disable SSR on WDI timeout
15433
15434 PARAMETERS
15435 enableSSR : enable/disable SSR
15436
15437 RETURN VALUE
15438 NONE
15439
15440===========================================================================*/
15441void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15442{
15443 WDI_SetEnableSSR(enableSSR);
15444}
Leo Chang9056f462013-08-01 19:21:11 -070015445
15446#ifdef FEATURE_WLAN_LPHB
15447/*
15448 * FUNCTION: WDA_LPHBconfRspCallback
15449 *
15450 */
15451void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15452{
15453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15454
15455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15456 "<------ %s " ,__func__);
15457 if (NULL == pWdaParams)
15458 {
15459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15460 "%s: pWdaParams received NULL", __func__);
15461 VOS_ASSERT(0) ;
15462 return ;
15463 }
15464
15465 /* Do not need to send notification to upper layer
15466 * Just free allocated resources */
15467 if (pWdaParams != NULL)
15468 {
15469 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15470 {
15471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15472 }
15473 vos_mem_free(pWdaParams->wdaMsgParam) ;
15474 vos_mem_free(pWdaParams) ;
15475 }
15476
15477 return;
15478}
15479
15480/*
15481 * FUNCTION: WDA_ProcessLPHBConfReq
15482 *
15483 */
15484VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15485 tSirLPHBReq *pData)
15486{
15487 WDI_Status wdiStatus;
15488 tWDA_ReqParams *pWdaParams ;
15489
15490 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15491 "------> %s " , __func__);
15492
15493 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15494 if (NULL == pWdaParams)
15495 {
15496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15497 "%s: VOS MEM Alloc Failure", __func__);
15498 VOS_ASSERT(0);
15499 vos_mem_free(pData);
15500 return VOS_STATUS_E_NOMEM;
15501 }
15502
15503 pWdaParams->pWdaContext = pWDA;
15504 pWdaParams->wdaMsgParam = (void *)pData;
15505 pWdaParams->wdaWdiApiMsgParam = NULL;
15506
15507 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15508 if (WDI_STATUS_PENDING == wdiStatus)
15509 {
15510 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15511 "Pending received for %s:%d ", __func__, __LINE__);
15512 }
15513 else if (WDI_STATUS_SUCCESS != wdiStatus)
15514 {
15515 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15516 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15517 vos_mem_free(pWdaParams->wdaMsgParam);
15518 vos_mem_free(pWdaParams);
15519 }
15520
15521 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15522}
15523#endif /* FEATURE_WLAN_LPHB */
15524